pax_global_header00006660000000000000000000000064141750726220014520gustar00rootroot0000000000000052 comment=75314538bc43cc651a19e00891a7170a6e228881 gImageReader-3.4.0/000077500000000000000000000000001417507262200140405ustar00rootroot00000000000000gImageReader-3.4.0/.github/000077500000000000000000000000001417507262200154005ustar00rootroot00000000000000gImageReader-3.4.0/.github/workflows/000077500000000000000000000000001417507262200174355ustar00rootroot00000000000000gImageReader-3.4.0/.github/workflows/build.yml000066400000000000000000000075401417507262200212650ustar00rootroot00000000000000name: CI Build on: [push] jobs: build: name: MinGW build runs-on: ubuntu-latest container: image: fedora:rawhide options: --security-opt seccomp=unconfined steps: - uses: actions/checkout@v1 - name: Update system run: dnf -y update - name: Install build dependencies run: ./packaging/win32/mingwdeps.sh - name: Version number id: version_number run: | if [ ${{ startsWith(github.ref, 'refs/tags/') }} = true ]; then VERSION=$(basename ${{ github.ref }}) else VERSION=ci-latest-$(basename ${{ github.ref }}) fi echo "##[set-output name=version;]$VERSION" - name: Build application run: | ./packaging/win32/makeinstaller.sh x86_64 qt5 nodebug ${{ steps.version_number.outputs.version }} ./packaging/win32/makeinstaller.sh x86_64 gtk nodebug ${{ steps.version_number.outputs.version }} - name: Reset ci-latest tag run: | VERSION=${{ steps.version_number.outputs.version }} git config --global user.email "ci@github.com" git config --global user.name "Github CI" # Workaround for "could not read Username for 'https://github.com': No such device or address" git remote set-url origin https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git git tag -d $VERSION || true git push origin :$VERSION || true git tag -m $VERSION $VERSION git push --tags env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} if: startsWith(steps.version_number.outputs.version, 'ci-latest-') - name: Create release id: create_release uses: actions/create-release@v1.0.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.version_number.outputs.version }} release_name: CI Build draft: false prerelease: ${{ !startsWith(github.ref, 'refs/tags/') }} - name: Upload qt5 portable zip release asset uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build/mingw64-qt5/gImageReader_${{ steps.version_number.outputs.version }}_qt5_x86_64.zip asset_name: gImageReader_latest_qt5_x86_64.zip asset_content_type: application/zip - name: Upload qt5 installer release asset uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build/mingw64-qt5/gImageReader_${{ steps.version_number.outputs.version }}_qt5_x86_64.exe asset_name: gImageReader_latest_qt5_x86_64.exe asset_content_type: application/x-dosexec - name: Upload gtk portable zip release asset uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build/mingw64-gtk/gImageReader_${{ steps.version_number.outputs.version }}_gtk_x86_64.zip asset_name: gImageReader_latest_gtk_x86_64.zip asset_content_type: application/zip - name: Upload gtk installer release asset uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build/mingw64-gtk/gImageReader_${{ steps.version_number.outputs.version }}_gtk_x86_64.exe asset_name: gImageReader_latest_gtk_x86_64.exe asset_content_type: application/x-dosexec gImageReader-3.4.0/.gitignore000066400000000000000000000000201417507262200160200ustar00rootroot00000000000000*~ build .vscodegImageReader-3.4.0/.lgtm.yml000066400000000000000000000003111417507262200155770ustar00rootroot00000000000000extraction: cpp: prepare: packages: - python3-gi configure: command: - mkdir _lgtm_build_dir - cd _lgtm_build_dir - cmake -DINTERFACE_TYPE=gtk .. gImageReader-3.4.0/AUTHORS000066400000000000000000000000421417507262200151040ustar00rootroot00000000000000Sandro Mani gImageReader-3.4.0/CMakeLists.txt000066400000000000000000000332361417507262200166070ustar00rootroot00000000000000CMAKE_MINIMUM_REQUIRED(VERSION 3.7) IF(${CMAKE_VERSION} VERSION_GREATER "3.17.0") CMAKE_POLICY(SET CMP0100 NEW) ENDIF() LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) INCLUDE(GSettings) SET(ENV{LC_ALL} "C") # Project properties PROJECT(gimagereader) SET(PACKAGE_NAME gImageReader) SET(PACKAGE_VERSION 3.4.0) SET(PACKAGE_LOCALE_DIR "${CMAKE_INSTALL_PREFIX}/share/locale") # Variables SET(INTERFACE_TYPE "qt5" CACHE STRING "Select interface type: qt5/qt6/gtk") MESSAGE(STATUS "${INTERFACE_TYPE} interface will be built") SET(MANUAL_DIR "share/doc/gimagereader" CACHE PATH "Path where manual will be installed") SET(ENABLE_VERSIONCHECK 1 CACHE BOOL "Enable version check") EXECUTE_PROCESS(COMMAND date +%a\ %b\ %d\ %Y OUTPUT_VARIABLE PACKAGE_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) EXECUTE_PROCESS(COMMAND date -R OUTPUT_VARIABLE PACKAGE_RFC_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) EXECUTE_PROCESS(COMMAND git rev-parse HEAD OUTPUT_VARIABLE PACKAGE_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE) IF(NOT IS_ABSOLUTE "${MANUAL_DIR}") SET(MANUAL_DIR "${CMAKE_INSTALL_PREFIX}/${MANUAL_DIR}") ENDIF() # Configure files CONFIGURE_FILE(data/gimagereader.appdata.xml.in data/gimagereader-${INTERFACE_TYPE}.appdata.xml @ONLY) CONFIGURE_FILE(packaging/gimagereader.spec.in packaging/gimagereader.spec @ONLY) CONFIGURE_FILE(packaging/debian/changelog.in packaging/debian/changelog @ONLY) FILE(GLOB gimagereader_HTML RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} data/manual*.html.in) SET(manualFiles) FOREACH(inFile ${gimagereader_HTML}) STRING(REGEX REPLACE ".in\$" "" outFile "${inFile}") CONFIGURE_FILE(${inFile} ${outFile} @ONLY) SET(manualFiles ${manualFiles} "${CMAKE_CURRENT_BINARY_DIR}/${outFile}") ENDFOREACH() # Definitions ADD_DEFINITIONS(-DPACKAGE_NAME=\"${PACKAGE_NAME}\") ADD_DEFINITIONS(-DPACKAGE_VERSION=\"${PACKAGE_VERSION}\") ADD_DEFINITIONS(-DPACKAGE_REVISION=\"${PACKAGE_REVISION}\") ADD_DEFINITIONS(-DGETTEXT_PACKAGE=\"${CMAKE_PROJECT_NAME}\") ADD_DEFINITIONS(-DENABLE_VERSIONCHECK=${ENABLE_VERSIONCHECK}) ADD_DEFINITIONS(-DMANUAL_DIR=\"${MANUAL_DIR}\") SET(CMAKE_CXX_STANDARD 14) SET(CXX_STANDARD_REQUIRED ON) # Dependencies FIND_PACKAGE(Gettext REQUIRED) FIND_PACKAGE(PkgConfig REQUIRED) PKG_CHECK_MODULES(TESSERACT tesseract) PKG_CHECK_MODULES(ddjvuapi REQUIRED ddjvuapi) PKG_CHECK_MODULES(PODOFO libpodofo) IF(NOT TESSERACT_FOUND) MESSAGE(WARNING "Using hardcoded cflags and ldflags for tesseract") SET(TESSERACT_INCLUDE_DIRS /usr/include/tesseract) SET(TESSERACT_LDFLAGS -ltesseract) ENDIF(NOT TESSERACT_FOUND) IF(NOT PODOFO_FOUND) MESSAGE(WARNING "Using hardcoded cflags and ldflags for podofo") SET(PODOFO_INCLUDE_DIRS /usr/include/) SET(PODOFO_LDFLAGS -lpodofo) ENDIF(NOT PODOFO_FOUND) IF(UNIX) PKG_CHECK_MODULES(SANE sane-backends) ENDIF(UNIX) FIND_PROGRAM(INTLTOOL_MERGE_EXECUTABLE intltool-merge) IF(NOT INTLTOOL_MERGE_EXECUTABLE) MESSAGE(FATAL_ERROR "Couldn't find intltool-merge, please install intltool") ENDIF(NOT INTLTOOL_MERGE_EXECUTABLE) PKG_CHECK_MODULES(ENCHANT enchant-2) IF(ENCHANT_FOUND) ADD_DEFINITIONS(-DHAVE_ENCHANT2) ELSE(ENCHANT_FOUND) PKG_CHECK_MODULES(ENCHANT REQUIRED enchant) IF(${ENCHANT_VERSION} VERSION_GREATER_EQUAL 2) ADD_DEFINITIONS(-DHAVE_ENCHANT2) ENDIF() ENDIF(ENCHANT_FOUND) INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/common ${CMAKE_BINARY_DIR} ${TESSERACT_INCLUDE_DIRS} ${SANE_INCLUDE_DIRS} ${ENCHANT_INCLUDE_DIRS} ${PODOFO_INCLUDE_DIRS} ) IF("${INTERFACE_TYPE}" STREQUAL "gtk") PKG_CHECK_MODULES(GTKMM REQUIRED gtkmm-3.0) PKG_CHECK_MODULES(GTKSOURCEVIEWMM gtksourceviewmm-4.0) IF(NOT GTKSOURCEVIEWMM_FOUND) PKG_CHECK_MODULES(GTKSOURCEVIEWMM REQUIRED gtksourceviewmm-3.0) ENDIF(NOT GTKSOURCEVIEWMM_FOUND) PKG_CHECK_MODULES(GTKSPELLMM REQUIRED gtkspellmm-3.0>=3.0.5) PKG_CHECK_MODULES(CAIROMM REQUIRED cairomm-1.0) PKG_CHECK_MODULES(PANGOMM REQUIRED pangomm-1.4) PKG_CHECK_MODULES(POPPLER REQUIRED poppler-glib) PKG_CHECK_MODULES(JSONGLIB REQUIRED json-glib-1.0) PKG_CHECK_MODULES(LIBXMLPP libxml++-3.0) IF(LIBXMLPP_FOUND) ADD_DEFINITIONS(-DHAVE_LIBXMLPP_3) ELSE() PKG_CHECK_MODULES(LIBXMLPP2 REQUIRED libxml++-2.6) ADD_DEFINITIONS(-DHAVE_LIBXMLPP_2) SET(LIBXMLPP_INCLUDE_DIRS ${LIBXMLPP2_INCLUDE_DIRS}) SET(LIBXMLPP_LDFLAGS ${LIBXMLPP2_LDFLAGS}) ENDIF() PKG_CHECK_MODULES(LIBZIP REQUIRED libzip) FIND_PACKAGE(JPEG) IF(JPEG_FOUND) SET(LIBJPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIRS}) SET(LIBJPEG_LDFLAGS ${JPEG_LIBRARIES}) ELSE() PKG_CHECK_MODULES(LIBJPEG libjpeg) IF(NOT LIBJPEG_FOUND) MESSAGE(WARNING "Using hardcoded cflags and ldflags for libjpeg") SET(LIBJPEG_LDFLAGS "-ljpeg") ENDIF() ENDIF() PKG_CHECK_MODULES(FONTCONFIG REQUIRED fontconfig) INCLUDE_DIRECTORIES( ${GTKMM_INCLUDE_DIRS} ${GTKSOURCEVIEWMM_INCLUDE_DIRS} ${GTKSPELLMM_INCLUDE_DIRS} ${CAIROMM_INCLUDE_DIRS} ${PANGOMM_INCLUDE_DIRS} ${POPPLER_INCLUDE_DIRS} ${JSONGLIB_INCLUDE_DIRS} ${LIBXMLPP_INCLUDE_DIRS} ${LIBJPEG_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIRS} ${LIBZIP_INCLUDE_DIRS} ) SET(gimagereader_LIBS ${GTKMM_LDFLAGS} ${GTKSOURCEVIEWMM_LDFLAGS} ${GTKSPELLMM_LDFLAGS} ${CAIROMM_LDFLAGS} ${PANGOMM_LDFLAGS} ${POPPLER_LDFLAGS} ${JSONGLIB_LDFLAGS} ${LIBXMLPP_LDFLAGS} ${LIBJPEG_LDFLAGS} ${FONTCONFIG_LDFLAGS} ${LIBZIP_LDFLAGS} ) SET(srcdir "gtk") ELSEIF("${INTERFACE_TYPE}" STREQUAL "qt5" OR "${INTERFACE_TYPE}" STREQUAL "qt6") STRING(REGEX REPLACE "^qt" "" QT_VER "${INTERFACE_TYPE}") SET(CMAKE_AUTOMOC ON) FIND_PACKAGE(Qt${QT_VER}Concurrent REQUIRED) FIND_PACKAGE(Qt${QT_VER}DBus REQUIRED) FIND_PACKAGE(Qt${QT_VER}Network REQUIRED) FIND_PACKAGE(Qt${QT_VER}Widgets REQUIRED) FIND_PACKAGE(Qt${QT_VER}Xml REQUIRED) FIND_PACKAGE(Qt${QT_VER}PrintSupport REQUIRED) FIND_PACKAGE(QuaZip-Qt${QT_VER} QUIET) IF(QuaZip-Qt${QT_VER}_FOUND) SET(QUAZIP_LIBRARIES QuaZip::QuaZip) ELSE() FIND_PACKAGE(QuaZip5 QUIET) IF(NOT QUAZIP_FOUND) FIND_PATH(QUAZIP_INCLUDE_DIR NAME quazipfile.h PATH_SUFFIXES quazip${QT_VER} QuaZip-Qt${QT_VER}-1.0/quazip QuaZip-Qt${QT_VER}-1.1/quazip QuaZip-Qt${QT_VER}-1.2/quazip) FIND_LIBRARY(QUAZIP_LIBRARIES NAMES quazip${QT_VER} quazip1-qt${QT_VER}) IF(NOT QUAZIP_INCLUDE_DIR OR NOT QUAZIP_LIBRARIES) MESSAGE(FATAL_ERROR "QuaZip${QT_VER} is required but was not found") ENDIF() ENDIF() INCLUDE_DIRECTORIES(${QUAZIP_INCLUDE_DIR}) ENDIF() PKG_CHECK_MODULES(QTSPELL REQUIRED QtSpell-qt${QT_VER}>=0.8.0) PKG_CHECK_MODULES(POPPLER REQUIRED poppler-qt${QT_VER}) INCLUDE_DIRECTORIES(${QTSPELL_INCLUDE_DIRS} ${POPPLER_INCLUDE_DIRS}) SET(gimagereader_LIBS ${QTSPELL_LDFLAGS} ${POPPLER_LDFLAGS} ${QUAZIP_LIBRARIES}) SET(srcdir "qt") ELSE() MESSAGE(FATAL_ERROR "Invalid interface type ${INTERFACE_TYPE}") ENDIF() INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/${srcdir}/src/ ${CMAKE_SOURCE_DIR}/${srcdir}/src/hocr/ ) # Files # sort lists to avoid dependency on readdir() order and make build reproducible FILE(GLOB gimagereader_SRCS ${srcdir}/src/*.cc ${srcdir}/src/hocr/*.cc common/*.cc ) LIST(SORT gimagereader_SRCS) FILE(GLOB gimagereader_HDRS ${srcdir}/src/*.hh ${srcdir}/src/hocr/*.hh common/*.hh) LIST(SORT gimagereader_HDRS) FILE(GLOB gimagereader_FORMS ${srcdir}/data/*.ui) LIST(SORT gimagereader_FORMS) FILE(GLOB gimagereader_ICONS data/icons/*.png) LIST(SORT gimagereader_ICONS) IF("${srcdir}" STREQUAL "qt") FILE(GLOB gimagereader_RESOURCES qt/data/*.qrc) LIST(SORT gimagereader_RESOURCES) ENDIF() IF(UNIX) LIST(APPEND gimagereader_SRCS ${srcdir}/src/scanner/ScannerSane.cc) LIST(APPEND gimagereader_HDRS ${srcdir}/src/scanner/ScannerSane.hh) ELSE(UNIX) LIST(APPEND gimagereader_SRCS ${srcdir}/src/scanner/ScannerTwain.cc) LIST(APPEND gimagereader_HDRS ${srcdir}/src/scanner/ScannerTwain.hh) ENDIF(UNIX) # Generate resources IF("${srcdir}" STREQUAL "gtk") ADD_SCHEMA("gtk/data/org.gnome.gimagereader.gschema.xml") ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_BINARY_DIR}/gimagereader.gresource.c COMMAND glib-compile-resources gimagereader.gresource.xml ARGS --target=${CMAKE_BINARY_DIR}/gimagereader.gresource.c --generate-source WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/gtk/data/ DEPENDS ${gimagereader_FORMS}) LIST(APPEND gimagereader_SRCS ${CMAKE_BINARY_DIR}/gimagereader.gresource.c) # Just to allow running the application from the build tree (via XDG_DATA_DIRS=$PWD:$XDG_DATA_DIRS ./gimagereader-gtk) ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_BINARY_DIR}/glib-2.0/schemas/gschemas.compiled COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_SOURCE_DIR}/gtk/data/org.gnome.gimagereader.gschema.xml ${CMAKE_BINARY_DIR}/glib-2.0/schemas/org.gnome.gimagereader.gschema.xml COMMAND glib-compile-schemas ARGS ${CMAKE_BINARY_DIR}/glib-2.0/schemas/ DEPENDS ${CMAKE_SOURCE_DIR}/gtk/data/org.gnome.gimagereader.gschema.xml ) SET(gimagereader_RESOURCES_RCC ${CMAKE_BINARY_DIR}/glib-2.0/schemas/gschemas.compiled) FOREACH(form ${gimagereader_FORMS}) GET_FILENAME_COMPONENT(outfile ${form} NAME_WE) SET(outfile ${CMAKE_BINARY_DIR}/ui_${outfile}.hh) ADD_CUSTOM_COMMAND( OUTPUT ${outfile} COMMAND python3 ARGS ${CMAKE_SOURCE_DIR}/gtk/data/uigen.py ${form} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS ${form} ) LIST(APPEND gimagereader_FORMS_HEADERS ${outfile}) ENDFOREACH() ELSEIF("${srcdir}" STREQUAL "qt") QT_ADD_RESOURCES(gimagereader_RESOURCES_RCC ${gimagereader_RESOURCES}) SET(UIC_EXECUTABLE Qt${QT_VER}::uic) # Custom WRAP_UI which also gettext-izes the result MESSAGE(${CMAKE_COMMAND}) FOREACH(form ${gimagereader_FORMS}) GET_FILENAME_COMPONENT(outfile ${form} NAME_WE) SET(outfile ${CMAKE_BINARY_DIR}/ui_${outfile}.h) ADD_CUSTOM_COMMAND( OUTPUT ${outfile} COMMAND ${UIC_EXECUTABLE} ARGS -o ${outfile} ${form} COMMAND ${CMAKE_COMMAND} ARGS -P ${CMAKE_SOURCE_DIR}/cmake/gettextizeui.cmake ${outfile} DEPENDS ${form} ) LIST(APPEND gimagereader_FORMS_HEADERS ${outfile}) ENDFOREACH() SET_PROPERTY(SOURCE ${gimagereader_FORMS_HEADERS} PROPERTY SKIP_AUTOMOC ON) SET_PROPERTY(SOURCE ${gimagereader_RESOURCES_RCC} PROPERTY SKIP_AUTOMOC ON) ENDIF() # Process translations FILE(READ po/LINGUAS langs_string) STRING(REGEX MATCHALL "[a-zA-Z_]+" langs "${langs_string}") FOREACH(lang ${langs}) CONFIGURE_FILE(po/${lang}.po ${lang}.po COPYONLY) ENDFOREACH() GETTEXT_PROCESS_POT_FILE(po/gimagereader.pot ALL INSTALL_DESTINATION ${PACKAGE_LOCALE_DIR} LANGUAGES ${langs}) # Process desktop file CONFIGURE_FILE(data/gimagereader.desktop.in data/gimagereader-${INTERFACE_TYPE}.desktop.in @ONLY) # add translations to desktop file ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop COMMAND ${INTLTOOL_MERGE_EXECUTABLE} --desktop-style ${CMAKE_SOURCE_DIR}/po ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop.in) ADD_CUSTOM_TARGET(desktop_file ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop) IF(MINGW) ENABLE_LANGUAGE(RC) SET(CMAKE_RC_COMPILER_INIT ${CMAKE_GENERATOR_RC}) SET(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") SET(gimagereader_SRCS ${gimagereader_SRCS} packaging/win32/gimagereader-icon.rc) LIST(APPEND gimagereader_LIBS -lintl -mwindows) ENDIF(MINGW) # Build and install IF("${srcdir}" STREQUAL "qt") STRING(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER) IF(NOT CMAKE_BUILD_TYPE_TOLOWER MATCHES "debug") ADD_DEFINITIONS(-DQT_NO_DEBUG_OUTPUT) ENDIF() ENDIF() ADD_EXECUTABLE(gimagereader ${gimagereader_HDRS} ${gimagereader_SRCS} ${gimagereader_FORMS} ${gimagereader_FORMS_HEADERS} ${gimagereader_RESOURCES_RCC} ) TARGET_LINK_LIBRARIES(gimagereader ${TESSERACT_LDFLAGS} ${gimagereader_LIBS} ${SANE_LDFLAGS} ${ddjvuapi_LDFLAGS} ${ENCHANT_LDFLAGS} ${PODOFO_LDFLAGS} -ldl ) FIND_PACKAGE(OpenMP REQUIRED) SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") SET_TARGET_PROPERTIES(gimagereader PROPERTIES OUTPUT_NAME gimagereader-${INTERFACE_TYPE}) IF("${srcdir}" STREQUAL "qt") TARGET_LINK_LIBRARIES(gimagereader Qt${QT_VER}::Widgets Qt${QT_VER}::Network Qt${QT_VER}::DBus Qt${QT_VER}::Xml Qt${QT_VER}::PrintSupport Qt${QT_VER}::Concurrent) ENDIF() INSTALL(TARGETS gimagereader DESTINATION bin) INSTALL(FILES data/icons/48x48/gimagereader.png DESTINATION share/icons/hicolor/48x48/apps/) INSTALL(FILES data/icons/128x128/gimagereader.png DESTINATION share/icons/hicolor/128x128/apps/) INSTALL(FILES data/icons/256x256/gimagereader.png DESTINATION share/icons/hicolor/256x256/apps/) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.appdata.xml DESTINATION share/metainfo) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/data/gimagereader-${INTERFACE_TYPE}.desktop DESTINATION share/applications) INSTALL(FILES ${manualFiles} DESTINATION "${MANUAL_DIR}") # Dist ADD_CUSTOM_TARGET(dist COMMAND git archive --format=tar --prefix=${CMAKE_PROJECT_NAME}-${PACKAGE_VERSION}/ HEAD | xz > ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${PACKAGE_VERSION}.tar.xz WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) gImageReader-3.4.0/COPYING000066400000000000000000001045141417507262200151000ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gImageReader-3.4.0/LATEST000066400000000000000000000000061417507262200147530ustar00rootroot000000000000003.3.1 gImageReader-3.4.0/NEWS000066400000000000000000000253501417507262200145440ustar00rootroot00000000000000gImageReader 3.4.0 (Jan 28 2022): * Add support for tesseract 5.0 * Add Qt6 support * Add thumbail view for source documents * Add batch mode for recognizing multiple documents * Display sources in a tree * Allow opening output files directly from the source tree if they exist next to the source with the same basename * Allow moving image selection boxes * Text: Add multi-tab support * HOCR: Allow specifying whether new output is inserted/appended * HOCR: Allow opening multiple files at once, also from command line * HOCR: Add proof-reading widget (Qt interface only) * HOCR: New batch export dialog * HOCR: Add quick navigation for low confidence words gImageReader 3.3.1 (Jul 28 2019): * HOCR: propagate attributes to manually added elements (@foghawk) * HOCR: improve spelling of hyphenated words (@foghawk) * HOCR: improve spelling of words with special characters (@foghawk) * HOCR: allow specifying a DPI to assume for image sources when exporting to PDF (@foghawk) * HOCR: allow use to choose whether to sanitize hyphens when exporting to PDF * HOCR: Attempt to map 639-2 language codes to ISO 639-1 to set spelling language * Allow specifying character whitelist / blacklist for recognition * Various bugfixes * Translation updates * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.3.0 (Sep 26 2018): * Support tesseract-4.0.0 * Translation updates * See 3.2.9x changelogs for all other feature changes since previous stable * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.2.99 (Feb 24 2018): * gImageReader 3.3 beta * Add support for reading DJVU documents * Add support for encrypted PDF files * Rewrite HOCR editor and greatly expand its functionality: - Allow displaying confidence values in HOCR tree - Allow clicking in the canvas to jump to the corresponding item in the HOCR tree - Support mass-editing of HOCR child item attributes from parent - Honour font family attributes if possible - Honour and allow toggling bold and italic attributes - Correctly honour the baseline - Add search/replace and substitution list support - Add preview mode while editing - Allow manually adding lines, words and paragraphs - Allow swapping items - Automatically adjust parent bounding boxes when resizing and removing children - Add navigation toolbar to facilitate navigating through the HOCR tree - Use relative paths to source files in HOCR HTML document if source files are on same level or below the HOCR file - Add export to text - Add export to ODT - Allow choosing paper size in PDF export - Allow setting document metadata in PDF export - Allow setting encryption in PDF export - [Qt] Allow using QPrinter as PDF export backend, which has better support for complex scripts gImageReader 3.2.3 (Jul 01 2017): * Fix broken hOCR export * Add option to prepend source filename / page to plain text output gImageReader 3.2.2 (Jun 30 2017): * Attempt to use original source image for PDF output * Allow collapsing/expanding branches of hOCR tree via context menu * Recognize guillemets as quote characters * Fix crash when adding zero-page sources * Fix possible crash when rapidly switching documents * [Gtk] Fix output pane orientation not properly restored * [Gtk] Don't crash when rendering of image fails * [Gtk] Fix icons not appearing with recent Gtk versions * [Qt] Don't display empty image if rendering of downscaled image fails gImageReader 3.2.1 (Feb 10 2017): * Add possibility to rotate individual pages of multipage documents * Ensure the tessdata manager downloads compatible tesseract language definitions * Add CCITT Group4 compression option for monochrome PDF export * Allow choosing between diffuse and threshold dithering for monochrome PDF export * Preview JPEG compression quality in PDF output preview * Make brightness/contrast/resolution changes affect all selected sources * [Qt] Support multipage images through QImageReader (Qt5.9+ will support multipage TIFFs) * [Gtk] Fix hang when saving selection image * [Qt] Fix possible deadlock when rapidly switching sources * Updated translations gImageReader 3.2.0 (Nov 23 2016): * gImageReader 3.2.0 stable * Add PageUp / PageDown keyboard accelerators for browsing multipage documents * See 3.1.9x changelogs for all other feature changes since previous stable * Many bug fixes since 3.1.99 - special thanks to Daniel Plakhotich * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.1.99 (Oct 13 2016): * gImageReader 3.2 release candidate * General improvements: - Catch critical tesseract errors which otherwise result in the application crashing - Improve spelling dictionary auto-installation logic - Allow choosing whether to store language files (language definitions, spelling dictionaries) in system-wide or user-local directories * Plain text mode improvements: - Allow recognizing user-defined regions on multiple pages - Also treat \u2014 character as a hyphen - Make preserve paragraphs option correctly deal with trailing whitespace * hOCR editor improvements: - Add "Add to dictionary" and "Ignore word" actions to spell-checking menu in hOCR editor - Exclude non-word characters from spell-checking - Allow merging adjacent word items - Allow adjusting bounding boxes of document elements by resizing the selection in the canvas - Allow removing arbitrary items from the document tree - Allow defining custom graphic regions from context-menu of the respective page item * PDF export improvements: - Add previewing capability - Take into account baseline information to better position the words in the generated PDF - Add options to choose color format and compression of images written to PDF, allowing to greatly reduce the size of PDF - Correctly handle paper size and DPI - Improve logic for uniformizing word and line spacing - Make sure correct hyphen character is used, allowing PDF applications to correctly find hyphenated words * New and updated translations * Various bug fixes * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.1.91 (May 03 2016): * gImageReader 3.2 beta 2 * Fix crash when editing items in the hOCR editor * Fix build with Ubuntu 14.04 * Updated czech translation * Fix some string typos * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.1.90 (Apr 28 2016): * gImageReader 3.2 beta 1 * Add an initial hOCR editor implementation, with possibility to save as hOCR HTML, PDF with invisible text overlay, or a PDF reconstructed from the extracted text and graphics * Allow selecting and working on multiple sources at once * Add a tessdata manager, to conveniently manage tesseract language definitions directly from the application * Show a progress bar when recognizing, add a cancel button * Modernized Gtk UI * Expose script and orientation detection support * Possibility to pan via middle button drag * Remove the need to specify the culture code in custom language definitions, and use a built-in language-culture mapping instead to search for spelling dictionaries * Various bug fixes * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.1.2 (Jun 30 2015): * Fix incorrect behavior of "Append to current text" with multiple recognition areas * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.1.1 (Jun 11 2015): * Fix titlebar now shown when window maximized in Gnome 3 * New translations: Chinese (Hong Kong), Chinese (Taiwan) * Updated translations: Russian, Portoguese gImageReader 3.1 (May 1 2015): * Add option to draw whitespace * Allow searching and replacing only in selected portion of output text * Add "preserve paragraphs" postprocessing option * Allow to open files via drag and drop * Improve rendering of certain PDF files with the Qt interface * Fix scanning broken with certain scanners under Windows * Support automatic spelling dictionary installation under Windows * Allow saving scans in other formats than png * Handful of bugs fixed * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.0.1 (Jan 4 2015): * Fix a bug in the Qt interface when loading substitutions list from file * Improve behaviour of strip line breaks functionality with multiple line breaks * Small UI improvements * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 3.0 (Dec 12 2014): * gImageReader 3.0 stable * New Qt4/5 interface, as alternative to the Gtk interface * Fixed scanning on Windows * Memorize image settings (brightness, contrast, etc) when switching images * Search forward and backward, replace all, case sensitive search * Many bug fixes * Translation updates * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 2.93 (Apr 30 2014): * gImageReader 3.0 beta 4 * Add possibility to choose multiple recognition languages * Add button to show/hide output pane * Fix a crash when loading a scanned document * Allow toggling spell checking from context menu * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 2.92 (Mar 19 2014): * gImageReader 3.0 beta 3 * Add replacement-list feature, allowing the user to specify a list of replacements to perform on the recognized text * Fix saving output resulting in empty files * Fix crashes when rendering PDF files * Keep line-breaks if preeded by line-break * Fix localization not working on Windows * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 2.91 (Feb 20 2014): * gImageReader 3.0 beta 2 * Improve page-layout autodetection by merging overlapping regions * Use native file-chooser dialogs on Gnome/KDE/Windows * Allow performing multipage-recognition with page-layout autodetection * Fix broken search/replace which caused the application to crash * Add Win64 packages * Fix some other bugs, full details in commit log: https://github.com/manisandro/gImageReader/commits/master gImageReader 2.90 (Feb 11 2014): * First beta of the grand new gImageReader: - Support multiple selections (via CTRL-key). Rightclicking a selection opens a context menu which allows to: - Deleted and reordered individual selections. - Recognize the selected text, either to clipboard or to the output pane. - Basic automatic page layout detection. - The output pane now supports undo and redo. - Configuration is now automatic. - Proper arbitrary rotation of images. - Detect deleted/renamed files. - Cleaner UI. - Port to Gtk+3, rewrite in C++ using the Gtkmm bindings. gImageReader-3.4.0/README.md000066400000000000000000000066431417507262200153300ustar00rootroot00000000000000[![Translation status](https://hosted.weblate.org/widgets/gimagereader/-/svg-badge.svg)](https://hosted.weblate.org/engage/gimagereader/?utm_source=widget) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/manisandro/gImageReader.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/manisandro/gImageReader/context:cpp) [![Github All Releases](https://img.shields.io/github/downloads/manisandro/gImageReader/total.svg)]() [![Actions Status](https://github.com/manisandro/gImageReader/workflows/CI%20Build/badge.svg)](https://github.com/manisandro/gImageReader/actions) gImageReader ============ gImageReader is a simple Gtk/Qt front-end to [tesseract-ocr](https://github.com/tesseract-ocr/tesseract). ![Logo](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/gimagereader.jpg) Features: ------------ - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents Installation: --------------- - ![Source](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/source.png) **Source**: Download from the [releases page](https://github.com/manisandro/gImageReader/releases) - ![Windows](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/windows.png) **Windows**: Download from the [releases page](https://github.com/manisandro/gImageReader/releases) - ![Fedora](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/fedora.png) **Fedora**: Available from the [official repositories](https://apps.fedoraproject.org/packages/gimagereader) - ![Debian](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/debian.png) **Debian**: Available from the [official repositories](https://packages.debian.org/unstable/main/gimagereader) - ![Ubuntu](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/ubuntu.png) **Ubuntu**: Available from [ppa:sandromani/gimagereader](https://launchpad.net/~sandromani/+archive/ubuntu/gimagereader) - ![OpenSUSE](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/opensuse.png) **OpenSUSE**: Available from [OpenSUSE Build Service](https://build.opensuse.org/project/show/home:sandromani) - ![ArchLinux](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/arch.png) **ArchLinux**: Available from the [community repositories](https://www.archlinux.org/packages/community/x86_64/gimagereader/) Compilation: -------------- The steps for compiling gImageReader from source are documented in the [wiki](https://github.com/manisandro/gImageReader/wiki/Compiling-gImageReader). Support: ---------- If you encounter issues, please file a ticket in the [issue tracker](https://github.com/manisandro/gImageReader/issues), or feel free to mail me directly at `manisandro(at)gmail(dot)com`. Be sure to also consult the [FAQ](https://github.com/manisandro/gImageReader/wiki/FAQ). Contributing: --------------- Contributions are always welcome, ideally in the form of pull-requests. Translating: -------------- gImageReader translations are hosted on [weblate](https://hosted.weblate.org/projects/gimagereader/) and are periodically merged into master. gImageReader-3.4.0/README_docs.md000066400000000000000000000015211417507262200163260ustar00rootroot00000000000000# How to translate docs (Help files) ## 1. Install: https://github.com/mkdocs/mkdocs/ https://squidfunk.github.io/mkdocs-material/ https://pypi.org/project/mkdocs-static-i18n/ https://pypi.org/project/mkdocs-redirects/ ## 2. Copy: File: `mkdocs.yml` and Folder: `/docs` in to the same location *(\*don't put mkdocs.yml in /docs folder!)* ## 3. Edit mkdocs.yml Add your language under `languages:` `alternate:` `redirect_maps:` ## 3. Translate: In Folder `/docs` duplicate, rename and translate every `*.\.md` file example for German: Clone `index.md` -> `index.de.md` ## 4. Test in your console go to the folder of mkdocs.yml then run `mkdocs serve` Open your web-browser and go to http://127.0.0.1:8000 ## 5. Build `mkdocs build` compiled site is in folder `\site` that is in same folder where the `mydocs.yml` is gImageReader-3.4.0/astyle.options000066400000000000000000000002531417507262200167560ustar00rootroot00000000000000--preserve-date --indent-preprocessor --style=java --indent=tab#4 --suffix=none --pad-oper --align-pointer=type --align-reference=type --add-braces --keep-one-line-blocks gImageReader-3.4.0/cmake/000077500000000000000000000000001417507262200151205ustar00rootroot00000000000000gImageReader-3.4.0/cmake/GSettings.cmake000066400000000000000000000041331417507262200200320ustar00rootroot00000000000000# GSettings.cmake, CMake macros written for Marlin, feel free to re-use them. option (GSETTINGS_LOCALINSTALL "Install GSettings Schemas locally instead of to the GLib prefix" ON) option (GSETTINGS_COMPILE "Compile GSettings Schemas after installation" ${GSETTINGS_LOCALINSTALL}) if(GSETTINGS_LOCALINSTALL) message(STATUS "GSettings schemas will be installed locally.") endif() if(GSETTINGS_COMPILE) message(STATUS "GSettings shemas will be compiled.") endif() macro(add_schema SCHEMA_NAME) set(PKG_CONFIG_EXECUTABLE pkg-config) # Have an option to not install the schema into where GLib is if (GSETTINGS_LOCALINSTALL) SET (GSETTINGS_DIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas/") else (GSETTINGS_LOCALINSTALL) execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable prefix OUTPUT_VARIABLE _glib_prefix OUTPUT_STRIP_TRAILING_WHITESPACE) SET (GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/") endif (GSETTINGS_LOCALINSTALL) # Run the validator and error if it fails execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE _glib_comple_schemas OUTPUT_STRIP_TRAILING_WHITESPACE) if("${_glib_comple_schemas}" STREQUAL "") MESSAGE(FATAL_ERROR "Could not find glib_compile_schemas") endif() execute_process (COMMAND ${_glib_comple_schemas} --dry-run --schema-file=${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} ERROR_VARIABLE _schemas_invalid OUTPUT_STRIP_TRAILING_WHITESPACE) if (_schemas_invalid) message (SEND_ERROR "Schema validation error: ${_schemas_invalid}") endif (_schemas_invalid) # Actually install and recompile schemas message (STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} DESTINATION ${GSETTINGS_DIR} OPTIONAL) if (GSETTINGS_COMPILE) install (CODE " if(\"\$ENV{DESTDIR}\" STREQUAL \"\") message (STATUS \"Compiling GSettings schemas\") execute_process (COMMAND ${_glib_comple_schemas} ${GSETTINGS_DIR}) endif() ") endif () endmacro() gImageReader-3.4.0/cmake/gettextizeui.cmake000066400000000000000000000010321417507262200206500ustar00rootroot00000000000000# Function to replace QApplication::translate with gettext() in ui headers # 3: argv0 = cmake, argv1 = -P, argv2 = gettextizeui.cmake FOREACH(i RANGE 3 ${CMAKE_ARGC}) SET(form_header "${CMAKE_ARGV${i}}") IF(NOT "${form_header}" STREQUAL "") MESSAGE(STATUS "Gettextizing ${form_header}") FILE(READ ${form_header} _text) STRING(REGEX REPLACE "Q(Core)?Application::translate\\(\"[^\"]+\", \"((\\\\.|[^\\\"])*)\", [^\\)]+\\)" "gettext(\"\\2\")" _text_out "${_text}") FILE(WRITE ${form_header} "${_text_out}") ENDIF() ENDFOREACH() gImageReader-3.4.0/common/000077500000000000000000000000001417507262200153305ustar00rootroot00000000000000gImageReader-3.4.0/common/CCITTFax4Encoder.cc000066400000000000000000000351301417507262200205320ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CCITTFax4Encoder.cc * Based on code from libtiff/tif_fax3.c, which is: * Copyright (c) 1990-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. * * Modifications are: * Copyright (C) 2016-2020 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "CCITTFax4Encoder.hh" #include #include struct CCITTFax4Encoder::TableEntry { unsigned short length; /* bit length of g3 code */ unsigned short code; /* g3 code */ short runlen; /* run length in bits */ }; #define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */ // Status values returned instead of a run length #define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */ #define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */ #define G3CODE_EOF -3 /* end of input data */ #define G3CODE_INCOMP -4 /* incomplete run code */ const CCITTFax4Encoder::TableEntry CCITTFax4Encoder::whiteCodes[] = { { 8, 0x35, 0 }, /* 0011 0101 */ { 6, 0x7, 1 }, /* 0001 11 */ { 4, 0x7, 2 }, /* 0111 */ { 4, 0x8, 3 }, /* 1000 */ { 4, 0xB, 4 }, /* 1011 */ { 4, 0xC, 5 }, /* 1100 */ { 4, 0xE, 6 }, /* 1110 */ { 4, 0xF, 7 }, /* 1111 */ { 5, 0x13, 8 }, /* 1001 1 */ { 5, 0x14, 9 }, /* 1010 0 */ { 5, 0x7, 10 }, /* 0011 1 */ { 5, 0x8, 11 }, /* 0100 0 */ { 6, 0x8, 12 }, /* 0010 00 */ { 6, 0x3, 13 }, /* 0000 11 */ { 6, 0x34, 14 }, /* 1101 00 */ { 6, 0x35, 15 }, /* 1101 01 */ { 6, 0x2A, 16 }, /* 1010 10 */ { 6, 0x2B, 17 }, /* 1010 11 */ { 7, 0x27, 18 }, /* 0100 111 */ { 7, 0xC, 19 }, /* 0001 100 */ { 7, 0x8, 20 }, /* 0001 000 */ { 7, 0x17, 21 }, /* 0010 111 */ { 7, 0x3, 22 }, /* 0000 011 */ { 7, 0x4, 23 }, /* 0000 100 */ { 7, 0x28, 24 }, /* 0101 000 */ { 7, 0x2B, 25 }, /* 0101 011 */ { 7, 0x13, 26 }, /* 0010 011 */ { 7, 0x24, 27 }, /* 0100 100 */ { 7, 0x18, 28 }, /* 0011 000 */ { 8, 0x2, 29 }, /* 0000 0010 */ { 8, 0x3, 30 }, /* 0000 0011 */ { 8, 0x1A, 31 }, /* 0001 1010 */ { 8, 0x1B, 32 }, /* 0001 1011 */ { 8, 0x12, 33 }, /* 0001 0010 */ { 8, 0x13, 34 }, /* 0001 0011 */ { 8, 0x14, 35 }, /* 0001 0100 */ { 8, 0x15, 36 }, /* 0001 0101 */ { 8, 0x16, 37 }, /* 0001 0110 */ { 8, 0x17, 38 }, /* 0001 0111 */ { 8, 0x28, 39 }, /* 0010 1000 */ { 8, 0x29, 40 }, /* 0010 1001 */ { 8, 0x2A, 41 }, /* 0010 1010 */ { 8, 0x2B, 42 }, /* 0010 1011 */ { 8, 0x2C, 43 }, /* 0010 1100 */ { 8, 0x2D, 44 }, /* 0010 1101 */ { 8, 0x4, 45 }, /* 0000 0100 */ { 8, 0x5, 46 }, /* 0000 0101 */ { 8, 0xA, 47 }, /* 0000 1010 */ { 8, 0xB, 48 }, /* 0000 1011 */ { 8, 0x52, 49 }, /* 0101 0010 */ { 8, 0x53, 50 }, /* 0101 0011 */ { 8, 0x54, 51 }, /* 0101 0100 */ { 8, 0x55, 52 }, /* 0101 0101 */ { 8, 0x24, 53 }, /* 0010 0100 */ { 8, 0x25, 54 }, /* 0010 0101 */ { 8, 0x58, 55 }, /* 0101 1000 */ { 8, 0x59, 56 }, /* 0101 1001 */ { 8, 0x5A, 57 }, /* 0101 1010 */ { 8, 0x5B, 58 }, /* 0101 1011 */ { 8, 0x4A, 59 }, /* 0100 1010 */ { 8, 0x4B, 60 }, /* 0100 1011 */ { 8, 0x32, 61 }, /* 0011 0010 */ { 8, 0x33, 62 }, /* 0011 0011 */ { 8, 0x34, 63 }, /* 0011 0100 */ { 5, 0x1B, 64 }, /* 1101 1 */ { 5, 0x12, 128 }, /* 1001 0 */ { 6, 0x17, 192 }, /* 0101 11 */ { 7, 0x37, 256 }, /* 0110 111 */ { 8, 0x36, 320 }, /* 0011 0110 */ { 8, 0x37, 384 }, /* 0011 0111 */ { 8, 0x64, 448 }, /* 0110 0100 */ { 8, 0x65, 512 }, /* 0110 0101 */ { 8, 0x68, 576 }, /* 0110 1000 */ { 8, 0x67, 640 }, /* 0110 0111 */ { 9, 0xCC, 704 }, /* 0110 0110 0 */ { 9, 0xCD, 768 }, /* 0110 0110 1 */ { 9, 0xD2, 832 }, /* 0110 1001 0 */ { 9, 0xD3, 896 }, /* 0110 1001 1 */ { 9, 0xD4, 960 }, /* 0110 1010 0 */ { 9, 0xD5, 1024 }, /* 0110 1010 1 */ { 9, 0xD6, 1088 }, /* 0110 1011 0 */ { 9, 0xD7, 1152 }, /* 0110 1011 1 */ { 9, 0xD8, 1216 }, /* 0110 1100 0 */ { 9, 0xD9, 1280 }, /* 0110 1100 1 */ { 9, 0xDA, 1344 }, /* 0110 1101 0 */ { 9, 0xDB, 1408 }, /* 0110 1101 1 */ { 9, 0x98, 1472 }, /* 0100 1100 0 */ { 9, 0x99, 1536 }, /* 0100 1100 1 */ { 9, 0x9A, 1600 }, /* 0100 1101 0 */ { 6, 0x18, 1664 }, /* 0110 00 */ { 9, 0x9B, 1728 }, /* 0100 1101 1 */ { 11, 0x8, 1792 }, /* 0000 0001 000 */ { 11, 0xC, 1856 }, /* 0000 0001 100 */ { 11, 0xD, 1920 }, /* 0000 0001 101 */ { 12, 0x12, 1984 }, /* 0000 0001 0010 */ { 12, 0x13, 2048 }, /* 0000 0001 0011 */ { 12, 0x14, 2112 }, /* 0000 0001 0100 */ { 12, 0x15, 2176 }, /* 0000 0001 0101 */ { 12, 0x16, 2240 }, /* 0000 0001 0110 */ { 12, 0x17, 2304 }, /* 0000 0001 0111 */ { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ }; const CCITTFax4Encoder::TableEntry CCITTFax4Encoder::blackCodes[] = { { 10, 0x37, 0 }, /* 0000 1101 11 */ { 3, 0x2, 1 }, /* 010 */ { 2, 0x3, 2 }, /* 11 */ { 2, 0x2, 3 }, /* 10 */ { 3, 0x3, 4 }, /* 011 */ { 4, 0x3, 5 }, /* 0011 */ { 4, 0x2, 6 }, /* 0010 */ { 5, 0x3, 7 }, /* 0001 1 */ { 6, 0x5, 8 }, /* 0001 01 */ { 6, 0x4, 9 }, /* 0001 00 */ { 7, 0x4, 10 }, /* 0000 100 */ { 7, 0x5, 11 }, /* 0000 101 */ { 7, 0x7, 12 }, /* 0000 111 */ { 8, 0x4, 13 }, /* 0000 0100 */ { 8, 0x7, 14 }, /* 0000 0111 */ { 9, 0x18, 15 }, /* 0000 1100 0 */ { 10, 0x17, 16 }, /* 0000 0101 11 */ { 10, 0x18, 17 }, /* 0000 0110 00 */ { 10, 0x8, 18 }, /* 0000 0010 00 */ { 11, 0x67, 19 }, /* 0000 1100 111 */ { 11, 0x68, 20 }, /* 0000 1101 000 */ { 11, 0x6C, 21 }, /* 0000 1101 100 */ { 11, 0x37, 22 }, /* 0000 0110 111 */ { 11, 0x28, 23 }, /* 0000 0101 000 */ { 11, 0x17, 24 }, /* 0000 0010 111 */ { 11, 0x18, 25 }, /* 0000 0011 000 */ { 12, 0xCA, 26 }, /* 0000 1100 1010 */ { 12, 0xCB, 27 }, /* 0000 1100 1011 */ { 12, 0xCC, 28 }, /* 0000 1100 1100 */ { 12, 0xCD, 29 }, /* 0000 1100 1101 */ { 12, 0x68, 30 }, /* 0000 0110 1000 */ { 12, 0x69, 31 }, /* 0000 0110 1001 */ { 12, 0x6A, 32 }, /* 0000 0110 1010 */ { 12, 0x6B, 33 }, /* 0000 0110 1011 */ { 12, 0xD2, 34 }, /* 0000 1101 0010 */ { 12, 0xD3, 35 }, /* 0000 1101 0011 */ { 12, 0xD4, 36 }, /* 0000 1101 0100 */ { 12, 0xD5, 37 }, /* 0000 1101 0101 */ { 12, 0xD6, 38 }, /* 0000 1101 0110 */ { 12, 0xD7, 39 }, /* 0000 1101 0111 */ { 12, 0x6C, 40 }, /* 0000 0110 1100 */ { 12, 0x6D, 41 }, /* 0000 0110 1101 */ { 12, 0xDA, 42 }, /* 0000 1101 1010 */ { 12, 0xDB, 43 }, /* 0000 1101 1011 */ { 12, 0x54, 44 }, /* 0000 0101 0100 */ { 12, 0x55, 45 }, /* 0000 0101 0101 */ { 12, 0x56, 46 }, /* 0000 0101 0110 */ { 12, 0x57, 47 }, /* 0000 0101 0111 */ { 12, 0x64, 48 }, /* 0000 0110 0100 */ { 12, 0x65, 49 }, /* 0000 0110 0101 */ { 12, 0x52, 50 }, /* 0000 0101 0010 */ { 12, 0x53, 51 }, /* 0000 0101 0011 */ { 12, 0x24, 52 }, /* 0000 0010 0100 */ { 12, 0x37, 53 }, /* 0000 0011 0111 */ { 12, 0x38, 54 }, /* 0000 0011 1000 */ { 12, 0x27, 55 }, /* 0000 0010 0111 */ { 12, 0x28, 56 }, /* 0000 0010 1000 */ { 12, 0x58, 57 }, /* 0000 0101 1000 */ { 12, 0x59, 58 }, /* 0000 0101 1001 */ { 12, 0x2B, 59 }, /* 0000 0010 1011 */ { 12, 0x2C, 60 }, /* 0000 0010 1100 */ { 12, 0x5A, 61 }, /* 0000 0101 1010 */ { 12, 0x66, 62 }, /* 0000 0110 0110 */ { 12, 0x67, 63 }, /* 0000 0110 0111 */ { 10, 0xF, 64 }, /* 0000 0011 11 */ { 12, 0xC8, 128 }, /* 0000 1100 1000 */ { 12, 0xC9, 192 }, /* 0000 1100 1001 */ { 12, 0x5B, 256 }, /* 0000 0101 1011 */ { 12, 0x33, 320 }, /* 0000 0011 0011 */ { 12, 0x34, 384 }, /* 0000 0011 0100 */ { 12, 0x35, 448 }, /* 0000 0011 0101 */ { 13, 0x6C, 512 }, /* 0000 0011 0110 0 */ { 13, 0x6D, 576 }, /* 0000 0011 0110 1 */ { 13, 0x4A, 640 }, /* 0000 0010 0101 0 */ { 13, 0x4B, 704 }, /* 0000 0010 0101 1 */ { 13, 0x4C, 768 }, /* 0000 0010 0110 0 */ { 13, 0x4D, 832 }, /* 0000 0010 0110 1 */ { 13, 0x72, 896 }, /* 0000 0011 1001 0 */ { 13, 0x73, 960 }, /* 0000 0011 1001 1 */ { 13, 0x74, 1024 }, /* 0000 0011 1010 0 */ { 13, 0x75, 1088 }, /* 0000 0011 1010 1 */ { 13, 0x76, 1152 }, /* 0000 0011 1011 0 */ { 13, 0x77, 1216 }, /* 0000 0011 1011 1 */ { 13, 0x52, 1280 }, /* 0000 0010 1001 0 */ { 13, 0x53, 1344 }, /* 0000 0010 1001 1 */ { 13, 0x54, 1408 }, /* 0000 0010 1010 0 */ { 13, 0x55, 1472 }, /* 0000 0010 1010 1 */ { 13, 0x5A, 1536 }, /* 0000 0010 1101 0 */ { 13, 0x5B, 1600 }, /* 0000 0010 1101 1 */ { 13, 0x64, 1664 }, /* 0000 0011 0010 0 */ { 13, 0x65, 1728 }, /* 0000 0011 0010 1 */ { 11, 0x8, 1792 }, /* 0000 0001 000 */ { 11, 0xC, 1856 }, /* 0000 0001 100 */ { 11, 0xD, 1920 }, /* 0000 0001 101 */ { 12, 0x12, 1984 }, /* 0000 0001 0010 */ { 12, 0x13, 2048 }, /* 0000 0001 0011 */ { 12, 0x14, 2112 }, /* 0000 0001 0100 */ { 12, 0x15, 2176 }, /* 0000 0001 0101 */ { 12, 0x16, 2240 }, /* 0000 0001 0110 */ { 12, 0x17, 2304 }, /* 0000 0001 0111 */ { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ }; const CCITTFax4Encoder::TableEntry CCITTFax4Encoder::horizcode = { 3, 0x1, 0 }; /* 001 */ const CCITTFax4Encoder::TableEntry CCITTFax4Encoder::passcode = { 4, 0x1, 0 }; /* 0001 */ const CCITTFax4Encoder::TableEntry CCITTFax4Encoder::vcodes[7] = { { 7, 0x03, 0 }, /* 0000 011 */ { 6, 0x03, 0 }, /* 0000 11 */ { 3, 0x03, 0 }, /* 011 */ { 1, 0x1, 0 }, /* 1 */ { 3, 0x2, 0 }, /* 010 */ { 6, 0x02, 0 }, /* 0000 10 */ { 7, 0x02, 0 } /* 0000 010 */ }; struct CCITTFax4Encoder::EncoderState { std::vector buf; uint8_t data = 0; uint8_t bit = 8; }; CCITTFax4Encoder::CCITTFax4Encoder() : m_state(new EncoderState) {} CCITTFax4Encoder::~CCITTFax4Encoder() { delete m_state; } uint8_t* CCITTFax4Encoder::encode(const uint8_t *buffer, uint32_t width, uint32_t height, uint32_t rowbytes, uint32_t &outputSize) { m_state->buf.resize(0); m_state->data = 0; m_state->bit = 8; std::vector whiteline(rowbytes, 0); const uint8_t* refline = whiteline.data(); for(uint32_t y = 0; y < height; ++y) { encode2DRow(buffer, refline, width); refline = buffer; buffer += rowbytes; } putbits(EOL, 12); putbits(EOL, 12); if(m_state->bit != 8) { flushbits(); } outputSize = m_state->buf.size(); return m_state->buf.data(); } void CCITTFax4Encoder::putspan(int32_t span, const TableEntry* tab) { while (span >= 2624) { const TableEntry& te = tab[63 + (2560>>6)]; putbits(te.code, te.length); span -= te.runlen; } if (span >= 64) { const TableEntry& te = tab[63 + (span>>6)]; assert(te.runlen == 64*(span>>6)); putbits(te.code, te.length); span -= te.runlen; } const TableEntry& te = tab[span]; putbits(te.code, te.length); } void CCITTFax4Encoder::putbits(uint16_t bits, uint16_t length) { static const int msbmask[9] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; while (length > m_state->bit) { m_state->data |= bits >> (length - m_state->bit); length -= m_state->bit; flushbits(); } assert(length < 9); m_state->data |= (bits & msbmask[length]) << (m_state->bit - length); m_state->bit -= length; if (m_state->bit == 0) { flushbits(); } } void CCITTFax4Encoder::flushbits() { m_state->buf.push_back(m_state->data); m_state->data = 0; m_state->bit = 8; } static inline uint8_t pixel(const uint8_t* line, uint32_t i) { return !(((line[i>>3]) >> (7 - (i&7))) & 1); } static inline uint32_t findpixel(const uint8_t* line, uint32_t start, uint32_t length, uint8_t color) { for(uint32_t pos = start; pos < length; ++pos) { if(pixel(line, pos) == color) { return pos; } } return length; } void CCITTFax4Encoder::encode2DRow(const uint8_t* codeline, const uint8_t* refline, uint32_t linebits) { uint32_t a0 = 0; uint32_t a1 = findpixel(codeline, 0, linebits, 1); uint32_t b1 = findpixel(refline, 0, linebits, 1); uint32_t b2 = findpixel(refline, b1 + 1, linebits, !pixel(refline, b1)); while(true) { if (b2 < a1) { /* pass mode */ putbits(passcode.code, passcode.length); a0 = b2; } else { int32_t d = b1 - a1; if (-3 <= d && d <= 3) { /* vertical mode */ putbits(vcodes[d+3].code, vcodes[d+3].length); a0 = a1; } else { /* horizontal mode */ uint32_t a2 = findpixel(codeline, a1 + 1, linebits, !pixel(codeline, a1)); putbits(horizcode.code, horizcode.length); if (a0+a1 == 0 || pixel(codeline, a0) == 0) { putspan(a1-a0, whiteCodes); putspan(a2-a1, blackCodes); } else { putspan(a1-a0, blackCodes); putspan(a2-a1, whiteCodes); } a0 = a2; } } if (a0 >= linebits) break; // Next changing pixel on codeline right of a0 a1 = findpixel(codeline, a0 + 1, linebits, !pixel(codeline, a0)); // Next changing pixel on refline right of a0 and of opposite color than a0 b1 = findpixel(refline, a0 + 1, linebits, !pixel(refline, a0)); if(pixel(refline, b1) == pixel(codeline, a0)) { b1 = findpixel(refline, b1 + 1, linebits, !pixel(codeline, a0)); } // Next changing pixel on refline right of b1 b2 = findpixel(refline, b1 + 1, linebits, !pixel(refline, b1)); } } gImageReader-3.4.0/common/CCITTFax4Encoder.hh000066400000000000000000000043521417507262200205460ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CCITTFax4Encoder.hh * Based on code from libtiff/tif_fax3.c, which is: * Copyright (c) 1990-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. * * Modifications are: * Copyright (C) 2016-2020 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FAX4ENCODER_HH #define FAX4ENCODER_HH #include class CCITTFax4Encoder { public: CCITTFax4Encoder(); ~CCITTFax4Encoder(); uint8_t* encode(const uint8_t* buffer, uint32_t width, uint32_t height, uint32_t rowbytes, uint32_t& outputSize); private: struct EncoderState; struct TableEntry; EncoderState* m_state; void encode2DRow(const uint8_t* codeline, const uint8_t* refline, uint32_t linebits); inline void putspan(int32_t span, const TableEntry* tab); inline void putbits(uint16_t bits, uint16_t length); inline void flushbits(); static const TableEntry whiteCodes[]; static const TableEntry blackCodes[]; static const TableEntry horizcode; static const TableEntry passcode; static const TableEntry vcodes[]; }; #endif // CCITT_HH gImageReader-3.4.0/common/LangTables.hh000066400000000000000000000336461417507262200177010ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * LangTables.hh * Copyright (C) 2013-2020 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef LANGTABLES_HH #define LANGTABLES_HH namespace LangTables { template Container languages(const std::function& utf8str) { return Container { // See https://en.wikipedia.org/wiki/List_of_language_names // {ISO 639-2, ISO 639-1, name} // // An easy way to generate the strings below: // echo "עברית (רש״י)" | uni2ascii -a U -q // Verify: // echo "\u05E2\u05D1\u05E8\u05D9\u05EA (\u05E8\u05E9\u05F4\u05D9)" | ascii2uni -a U -q {"afr", "af", utf8str("Afrikaans")}, // Afrikaans {"amh", "am", utf8str("\u12A3\u121B\u122D\u129B")}, // Amharic {"ara", "ar", utf8str("\u0627\u0644\u0644\u063A\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629")}, // Arabic {"asm", "as", utf8str("\u0985\u09B8\u09AE\u09C0\u09AF\u09BC\u09BE")}, // Assamese {"aze", "az", utf8str("\u0622\u0630\u0631\u0628\u0627\u06CC\u062C\u0627\u0646 \u062F\u06CC\u0644\u06CC")}, // Azerbaijani {"aze_cyrl", "az", utf8str("Az\u0259rbaycanca")}, // Azerbaijani (Cyrillic) {"bel", "be", utf8str("\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u043A\u0430\u044F")}, // Belarusian {"ben", "bn", utf8str("\u09AC\u09BE\u0982\u09B2\u09BE")}, // Bengali {"bod", "bo", utf8str("\u0F51\u0F56\u0F74\u0F66\u0F0B\u0F66\u0F90\u0F51\u0F0B")}, // "Tibetan (Standard)" {"bos", "bs", utf8str("Bosanski")}, // Bosnian {"bre", "bs", utf8str("Brezhoneg")}, // Breton {"bul", "bg", utf8str("\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438 \u0435\u0437\u0438\u043A")}, // Bulgarian {"cat", "ca", utf8str("Catal\u00E0")}, // Catalan {"ceb", "", utf8str("Bisaya")}, // Cebuano {"ces", "cs", utf8str("\u010Ce\u0161tina")}, // Czech {"chi_sim", "zh_CN", utf8str("\u7b80\u4f53\u5b57 ")}, // Chinese (Simplified) {"chi_sim_vert", "zh_CN", utf8str("\u7b80\u4f53\u5b57 \u7EB5")}, // Chinese (Simplified, Vertical) {"chi_tra", "zh_TW", utf8str("\u7e41\u9ad4\u5b57")}, // Chinese (Traditional) {"chi_tra_vert", "zh_TW", utf8str("\u7e41\u9ad4\u5b57 \u7EB5")}, // Chinese (Traditional, Vertical) {"chr", "", utf8str("\u13E3\u13B3\u13A9")}, // Cherokee {"cos", "co", utf8str("Corsu")}, // Corsican {"cym", "cy", utf8str("Cymraeg")}, // Welsh {"dan", "da", utf8str("Dansk")}, // Danish {"dan_frak", "da", utf8str("Dansk (Fraktur)")}, // Danish (Fraktur) {"deu", "de", utf8str("Deutsch")}, // German {"deu_frak", "de", utf8str("Deutsch (Fraktur)")}, // German (Fraktur) {"div", "dv", utf8str("\u078B\u07A8\u0788\u07AC\u0780\u07A8")}, // Dhivehi {"dzo", "dz", utf8str("\u0F62\u0FAB\u0F7C\u0F44\u0F0B\u0F41\u0F0B")}, // Dzongkha {"ell", "el", utf8str("\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC")}, // Greek {"eng", "en", utf8str("English")}, {"enm", "en", utf8str("Middle English (1100-1500)")}, // Middle English (1100-1500) {"epo", "eo", utf8str("Esperanto")}, // Esperanto {"equ", "", utf8str("Math / Equations")}, // Math / equation {"est", "et", utf8str("Eesti")}, // Estonian {"eus", "eu", utf8str("Euskara")}, // Basque {"fas", "fa", utf8str("\u0641\u0627\u0631\u0633\u06CC")}, // Persian (Farsi) {"fao", "fo", utf8str("F\u00F8royskt")}, // Faroese {"fil", "", utf8str("Wikang Filipino")}, // Filipino {"fin", "fi", utf8str("Suomi")}, // Finnish {"fra", "fr", utf8str("Fran\u00E7ais")}, // French {"frk", "", utf8str("Frankish")}, // Frankish {"frm", "fr", utf8str("Moyen fran\u00E7ais (ca. 1400-1600)")}, // Middle French (ca. 1400-1600) {"fry", "fy", utf8str("Frysk")}, // Frisian (West) {"gla", "gd", utf8str("G\u00E0idhlig")}, // Scottish Gaelic {"gle", "ga", utf8str("Gaeilge")}, // Irish {"glg", "gl", utf8str("Galego")}, // Galician {"grc", "el", utf8str("\u1f19\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ae")}, // Ancient Greek {"guj", "gu", utf8str("\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0")}, // Gujarati {"hat", "ht", utf8str("Krey\u00F2l Ayisyen")}, // Haitian {"heb", "he", utf8str("\u05E2\u05D1\u05E8\u05D9\u05EA")}, // Hebrew {"heb_rashi", "he", utf8str("\u05E2\u05D1\u05E8\u05D9\u05EA (\u05E8\u05E9\u05F4\u05D9)")}, // Hebrew (Toranit, Rashi Script) {"heb_toranit", "he", utf8str("\u05E2\u05D1\u05E8\u05D9\u05EA (\u05EA\u05D5\u05E8\u05E0\u05D9\u05EA)")}, // Hebrew (Toranit) {"hin", "hi", utf8str("\u0939\u093F\u0928\u094D\u0926\u0940")}, // Hindi {"hrv", "hr", utf8str("Hrvatski")}, // Croatian {"hun", "hu", utf8str("Magyar")}, // Hungarian {"hye", "hy", utf8str("\u0540\u0561\u0575\u0565\u0580\u0565\u0576")}, // Armenian {"iku", "iu", utf8str("\u1403\u14C4\u1483\u144E\u1450\u1466")}, // Inuktitut {"ind", "id", utf8str("Bahasa Indonesia")}, // Indonesian {"isl", "is", utf8str("\u00CDslenska")}, // Icelandic {"ita", "it", utf8str("Italiano")}, // Italian {"ita_old", "it", utf8str("Italiano (Antico)")}, // Italian (Old) {"jav", "jv", utf8str("Basa jawa")}, // Javanese {"jpn", "ja", utf8str("\u65E5\u672C\u8A9E")}, // Japanese {"jpn_vert", "ja", utf8str("\u65E5\u672C\u8A9E \u7E26\u66F8\u304D")}, // Japanese (Vertical) {"kan", "kn", utf8str("\u0C95\u0CA8\u0CCD\u0CA8\u0CA1")}, // Kannada {"kat", "ka", utf8str("\u10E5\u10D0\u10E0\u10D7\u10E3\u10DA\u10D8")}, // Georgian {"kat_old", "ka", utf8str("\u10d4\u10dc\u10d0\u10f2 \u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8")}, // Georgian (Old) {"kaz", "kk", utf8str("\u049A\u0430\u0437\u0430\u049B T\u0456\u043B\u0456")}, // Kazakh {"khm", "km", utf8str("\u1797\u17B6\u179F\u17B6\u1781\u17D2\u1798\u17C2\u179A")}, // Khmer {"kir", "ky", utf8str("\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430")}, // Kyrgyz {"kor", "ko", utf8str("\uD55C\uAD6D\uC5B4")}, // Korean {"kor_vert", "ko", utf8str("\uD55C\uAD6D\uC5B4 \uC218\uC9C1\uC120")}, // Korean (Vertical) {"kur", "ku", utf8str("Kurd\u00ED")}, // Kurdish {"kur_ara", "ku", utf8str("\u06A9\u0648\u0631\u062F\u06CC")}, // Kurdish (Arabic) {"lao", "lo", utf8str("\u0E9E\u0EB2\u0EAA\u0EB2\u0EA5\u0EB2\u0EA7")}, // Lao {"lat", "la", utf8str("Latina")}, // Latin {"lav", "lv", utf8str("Latvie\u0161u")}, // Latvian {"lit", "lt", utf8str("Lietuvi\u0173")}, // Lithuanian {"ltz", "lb", utf8str("L\u00EBtzebuergesch")}, // Luxembourgish {"mal", "ml", utf8str("\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D02")}, // Malayalam {"mar", "mr", utf8str("\u092E\u0930\u093E\u0920\u0940")}, // Marathi {"mkd", "mk", utf8str("M\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438")}, // Macedonian {"mlt", "mt", utf8str("Malti")}, // Maltese {"mon", "mn", utf8str("\u041C\u043E\u043D\u0433\u043E\u043B \u0425\u044D\u043B")}, // Mongolian {"mri", "mi", utf8str("te Reo M\u0101ori")}, // Maori {"msa", "ms", utf8str("Bahasa Melayu")}, // Malay {"mya", "my", utf8str("\u1019\u103C\u1014\u103A\u1019\u102C\u1005\u102C")}, // Burmese {"nep", "ne", utf8str("\u0928\u0947\u092A\u093E\u0932\u0940")}, // Nepali {"nld", "nl", utf8str("Nederlands")}, // Dutch {"nor", "no", utf8str("Norsk")}, // Norwegian {"oci", "oc", utf8str("Occitan")}, // Occitan {"ori", "or", utf8str("\u0b13\u0b21\u0b3c\u0b3f\u0b06")}, // Oriya {"pan", "pa", utf8str("\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40")}, // Punjabi {"pol", "pl", utf8str("Polski")}, // Polish {"por", "pt", utf8str("Portugu\u00EAs")}, // Portuguese {"pus", "ps", utf8str("\u067E\u069A\u062A\u0648")}, // Pashto {"que", "qu", utf8str("Runasimi")}, // Quechuan {"ron", "ro", utf8str("Rom\u00E2n\u0103")}, // Romanian {"rus", "ru", utf8str("\u0420\u0443\u0441\u0441\u043A\u0438\u0439")}, // Russian {"san", "sa", utf8str("\u0938\u0902\u0938\u094D\u0915\u0943\u0924\u092E\u094D")}, // Sanskrit {"sin", "si", utf8str("\u0DC3\u0DD2\u0D82\u0DC4\u0DBD")}, // Sinhala {"slk", "sk", utf8str("Sloven\u010Dina")}, // Slovak {"slk_frak", "sk", utf8str("Sloven\u010Dina (Frakt\u00far)")}, // Slovak (Fraktur) {"slv", "sl", utf8str("Sloven\u0161\u010Dina")}, // Slovene {"snd", "sd", utf8str("\u0633\u0646\u068C\u064A")}, // Sindhi {"spa", "es", utf8str("Espa\u00F1ol")}, // Spanish {"spa_old", "es", utf8str("Espa\u00F1ol (Antiguo)")}, // Spanish (Old) {"sqi", "sq", utf8str("Shqip")}, // Albanian {"srp", "sr", utf8str("\u0421\u0440\u043F\u0441\u043A\u0438")}, // Serbian {"srp_latn", "sr", utf8str("Srpski")}, // Serbian (Latin) {"sun", "su", utf8str("\u1B98\u1B9E \u1B9E\u1BA5\u1B94\u1BAA\u1B93")}, // Sundanese {"swa", "sw", utf8str("Kiswahili")}, // Swahili {"swe", "sv", utf8str("Svenska")}, // Swedish {"syr", "", utf8str("\u0720\u072b\u0722\u0710 \u0723\u0718\u072a\u071d\u071d\u0710")}, // Syriac {"tam", "ta", utf8str("\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD")}, // Tamil {"tat", "tt", utf8str("Tatar\u00E7a")}, // Tatar {"tel", "te", utf8str("\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41")}, // Telugu {"tgk", "tg", utf8str("\u0442\u043e\u04b7\u0438\u043a\u04e3")}, // Tajik {"tgl", "tl", utf8str("\u170A\u170A\u170C\u1712")}, // Tagalog {"tha", "th", utf8str("\u0E20\u0E32\u0E29\u0E32\u0E44\u0E17\u0E22")}, // Thai {"tir", "ti", utf8str("\u1275\u130D\u122D\u129B")}, // Tigrinya {"ton", "to", utf8str("Lea faka-Tonga")}, // Tongan {"tur", "tr", utf8str("T\u00FCrk\u00E7e")}, // Turkish {"uig", "ug", utf8str("\u0626\u06C7\u064A\u063A\u06C7\u0631 \u062A\u0649\u0644\u0649")}, // Uyghur {"ukr", "uk", utf8str("\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430")}, // Ukrainian {"urd", "ur", utf8str("\u0627\u064F\u0631\u062F\u064F\u0648")}, // Urdu {"uzb", "uz", utf8str("\u0627\u0648\u0632\u0628\u06CC\u06A9")}, // Uzbek {"uzb_cyrl", "uz", utf8str("\u040E\u0437\u0431\u0435\u043A")}, // Uzbek (Cyrillic) {"vie", "vi", utf8str("Ti\u1EBFng Vi\u1EC7t Nam")}, // Vietnamese {"yid", "yi", utf8str("\u05D9\u05D9\u05B4\u05D3\u05D9\u05E9 \u05D9\u05D9\u05B4\u05D3\u05D9\u05E9\u202C")}, // Yiddish {"yor", "yo", utf8str("\u00C8d\u00E8 Yor\u00F9b\u00E1")}, // Yoruba }; } template Container languageCultures() { return Container{ {"af", "af_ZA"}, {"ar", "ar_AE"}, {"ar", "ar_BH"}, {"ar", "ar_DZ"}, {"ar", "ar_EG"}, {"ar", "ar_IQ"}, {"ar", "ar_JO"}, {"ar", "ar_KW"}, {"ar", "ar_LB"}, {"ar", "ar_LY"}, {"ar", "ar_MA"}, {"ar", "ar_OM"}, {"ar", "ar_QA"}, {"ar", "ar_SA"}, {"ar", "ar_SY"}, {"ar", "ar_TN"}, {"ar", "ar_YE"}, {"az", "az_AZ"}, {"az", "az_AZ"}, {"be", "be_BY"}, {"bg", "bg_BG"}, {"br", "br_FR"}, {"ca", "ca_ES"}, {"co", "co_FR"}, {"co", "co_IT"}, {"cs", "cs_CZ"}, {"da", "da_DK"}, {"de", "de_AT"}, {"de", "de_CH"}, {"de", "de_DE"}, {"de", "de_LI"}, {"de", "de_LU"}, {"div", "div_MV"}, {"dv", "dv_MV"}, {"el", "el_GR"}, {"en", "en_AU"}, {"en", "en_BZ"}, {"en", "en_CA"}, {"en", "en_CB"}, {"en", "en_GB"}, {"en", "en_IE"}, {"en", "en_JM"}, {"en", "en_NZ"}, {"en", "en_PH"}, {"en", "en_TT"}, {"en", "en_US"}, {"en", "en_ZA"}, {"en", "en_ZW"}, {"es", "es_AR"}, {"es", "es_BO"}, {"es", "es_CL"}, {"es", "es_CO"}, {"es", "es_CR"}, {"es", "es_DO"}, {"es", "es_EC"}, {"es", "es_ES"}, {"es", "es_GT"}, {"es", "es_HN"}, {"es", "es_MX"}, {"es", "es_NI"}, {"es", "es_PA"}, {"es", "es_PE"}, {"es", "es_PR"}, {"es", "es_PY"}, {"es", "es_SV"}, {"es", "es_UY"}, {"es", "es_VE"}, {"et", "et_EE"}, {"eu", "eu_ES"}, {"fa", "fa_IR"}, {"fi", "fi_FI"}, {"fo", "fo_FO"}, {"fr", "fr_BE"}, {"fr", "fr_CA"}, {"fr", "fr_CH"}, {"fr", "fr_FR"}, {"fr", "fr_LU"}, {"fr", "fr_MC"}, {"fo", "fo_FO"}, {"fo", "fo_DK"}, {"fy", "fy_NL"}, {"gd", "gd_GB"}, {"gd", "gd_CA"}, {"gl", "gl_ES"}, {"gu", "gu_IN"}, {"he", "he_IL"}, {"he", "he_TORANIT"}, {"hi", "hi_IN"}, {"hr", "hr_HR"}, {"hu", "hu_HU"}, {"hy", "hy_AM"}, {"id", "id_ID"}, {"is", "is_IS"}, {"it", "it_CH"}, {"it", "it_IT"}, {"ja", "ja_JP"}, {"ka", "ka_GE"}, {"kk", "kk_KZ"}, {"kn", "kn_IN"}, {"kok", "kok_IN"}, {"ko", "ko_KR"}, {"ku", "ku_IQ"}, {"ky", "ky_KZ"}, {"lb", "lb_LU"}, {"lt", "lt_LT"}, {"lv", "lv_LV"}, {"mi", "mi_NZ"}, {"mk", "mk_MK"}, {"mn", "mn_MN"}, {"mn", "mn_CN"}, {"mr", "mr_IN"}, {"ms", "ms_BN"}, {"ms", "ms_MY"}, {"nb", "nb_NO"}, {"nl", "nl_BE"}, {"nl", "nl_NL"}, {"nn", "nn_NO"}, {"oc", "oc_ES"}, {"pa", "pa_IN"}, {"pl", "pl_PL"}, {"pt", "pt_BR"}, {"pt", "pt_PT"}, {"qu", "qu_PE"}, {"ro", "ro_RO"}, {"ru", "ru_RU"}, {"sa", "sa_IN"}, {"sd", "sd_PK"}, {"sd", "sd_IN"}, {"sk", "sk_SK"}, {"sl", "sl_SI"}, {"sq", "sq_AL"}, {"sr", "sr_SP"}, {"sr", "sr_SP"}, {"su", "su_ID"}, {"sv", "sv_FI"}, {"sv", "sv_SE"}, {"sw", "sw_KE"}, {"syr", "syr_SY"}, {"ta", "ta_IN"}, {"te", "te_IN"}, {"th", "th_TH"}, {"to", "to_TO"}, {"tr", "tr_TR"}, {"tt", "tt_RU"}, {"uk", "uk_UA"}, {"ur", "ur_PK"}, {"uz", "uz_UZ"}, {"vi", "vi_VN"}, {"yo", "yo_NR"}, {"zh", "zh_CHS"}, {"zh", "zh_CHT"}, {"zh", "zh_CN"}, {"zh", "zh_HK"}, {"zh", "zh_MO"}, {"zh", "zh_SG"}, {"zh", "zh_TW"}, }; } } #endif // LANGTABLES_HH gImageReader-3.4.0/common/PaperSize.cc000066400000000000000000000146131417507262200175460ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * PaperSize.cc * Copyright (C) 2017-2018 Alexander Zaitsev * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "PaperSize.hh" #include #include #include #include #include template bool PaperSize::Size::operator<(const Size &val){ return std::tie(width, height) < std::tie(val.width, val.height); } PaperSize::Size PaperSize::getSize(PaperSize::Unit unit, const std::string& format, bool landscape) { auto result = std::find_if(paperSizes.begin(), paperSizes.end(), [&format](const std::pair>& val) { return val.first == format; }); if(result == paperSizes.end()) { return {0.0, 0.0}; } // Translate size into cm from mm Size formatResult = {static_cast(result->second.width) / 10.0, static_cast(result->second.height) / 10.0}; if(landscape) { std::swap(formatResult.width, formatResult.height); } if(unit == PaperSize::inch) { return {formatResult.width / CMtoInch, formatResult.height / CMtoInch}; } else /*if(unit == PaperSize::cm)*/ { return formatResult; } } const double PaperSize::CMtoInch = 2.54; const std::vector>> PaperSize::paperSizes = { // A type {"4A0", Size(1682, 2378)}, {"2A0", Size(1189, 1682)}, {"A0", Size(841, 1189)}, {"A1", Size(594, 841)}, {"A2", Size(420, 594)}, {"A3", Size(297, 420)}, {"A4", Size(210, 297)}, {"A5", Size(148, 210)}, {"A6", Size(105, 148)}, {"A7", Size(74, 105)}, {"A8", Size(52, 74)}, {"A9", Size(37, 52)}, {"A10", Size(26, 37)}, {"A11", Size(18, 26)}, {"A12", Size(13, 18)}, {"A13", Size(9, 13)}, // B type {"B0", Size(1000, 1414)}, {"B1", Size(707, 1000)}, {"B2", Size(500, 707)}, {"B3", Size(353, 500)}, {"B4", Size(250, 353)}, {"B5", Size(176, 250)}, {"B6", Size(125, 176)}, {"B7", Size(88, 125)}, {"B8", Size(62, 88)}, {"B9", Size(44, 62)}, {"B10", Size(31, 44)}, {"B11", Size(22, 31)}, {"B12", Size(15, 22)}, {"B13", Size(11, 15)}, // C type {"C0", Size(917, 1297)}, {"C1", Size(648, 917)}, {"C2", Size(458, 648)}, {"C3", Size(324, 458)}, {"C4", Size(229, 324)}, {"C5", Size(162, 229)}, {"C6", Size(114, 162)}, {"C7", Size(81, 114)}, {"C8", Size(57, 81)}, {"C9", Size(40, 57)}, {"C10", Size(28, 40)}, // D type. (German extension) {"D0", Size(771, 1090)}, {"D1", Size(545, 771)}, {"D2", Size(385, 545)}, {"D3", Size(272, 385)}, {"D4", Size(192, 272)}, {"D5", Size(136, 192)}, {"D6", Size(96, 136)}, {"D7", Size(68, 96)}, {"D8", Size(48, 68)}, {"D0 (China)", Size(764, 1064)}, {"D1 (China)", Size(532, 760)}, {"D2 (China)", Size(380, 528)}, {"D3 (China)", Size(264, 376)}, {"D4 (China)", Size(188, 260)}, {"D5 (China)", Size(130, 184)}, {"D6 (China)", Size(92, 126)}, {"RD0 (China)", Size(787, 1092)}, {"RD1 (China)", Size(546, 787)}, {"RD2 (China)", Size(393, 546)}, {"RD3 (China)", Size(273, 393)}, {"RD4 (China)", Size(196, 273)}, {"RD5 (China)", Size(136, 196)}, {"RD6 (China)", Size(98, 136)}, {"CAN P1", Size(560, 860)}, {"CAN P2", Size(430, 560)}, {"CAN P3", Size(280, 430)}, {"CAN P4", Size(215, 280)}, {"CAN P5", Size(140, 215)}, {"CAN P6", Size(107, 140)}, {"ANSI A", Size(216, 279)}, {"ANSI B", Size(279, 432)}, {"ANSI C", Size(432, 559)}, {"ANSI D", Size(559, 864)}, {"ANSI E", Size(864, 1118)}, {"Arch A/1", Size(229, 305)}, {"Arch B/2", Size(305, 457)}, {"Arch C/3", Size(457, 610)}, {"Arch D/4", Size(610, 914)}, {"Arch E/6", Size(914, 1219)}, {"Arch E1/5", Size(762, 1067)}, {"Arch E2", Size(660, 965)}, {"Arch E3", Size(686, 991)}, {"B0 (JIS)", Size(1030, 1456)}, {"B1 (JIS)", Size(728, 1030)}, {"B2 (JIS)", Size(515, 728)}, {"B3 (JIS)", Size(364, 515)}, {"B4 (JIS)", Size(257, 364)}, {"B5 (JIS)", Size(182, 257)}, {"B6 (JIS)", Size(128, 182)}, {"B7 (JIS)", Size(91, 128)}, {"B8 (JIS)", Size(64, 91)}, {"B9 (JIS)", Size(45, 64)}, {"B10 (JIS)", Size(32, 45)}, {"B11 (JIS)", Size(22, 32)}, {"B12 (JIS)", Size(16, 22)}, {"F0", Size(841, 1321)}, {"F1", Size(660, 841)}, {"F2", Size(420, 660)}, {"F3", Size(330, 420)}, {"F4", Size(210, 330)}, {"F5", Size(165, 210)}, {"F6", Size(105, 165)}, {"F7", Size(82, 105)}, {"F8", Size(52, 82)}, {"F9", Size(41, 52)}, {"F10", Size(26, 41)}, // North American paper sizes {"Letter", Size(216, 279)}, {"Legal", Size(216, 356)}, {"Tabloid", Size(279, 432)}, {"Ledger", Size(432, 279)}, {"Junior Legal", Size(127, 203)}, {"Half Letter/Memo", Size(140, 216)}, {"Government Letter", Size(203, 267)}, {"Government Legal", Size(216, 330)}, // Traditional British paper sizes {"Foolscap", Size(203, 330)}, {"Quarto", Size(203, 254)}, {"Imperial", Size(178, 229)}, {"Kings", Size(165, 203)}, {"Dukes", Size(140, 178)}, // Raw sizes {"RA0", Size(860, 1220)}, {"RA1", Size(610, 860)}, {"RA2", Size(430, 610)}, {"RA3", Size(305, 430)}, {"RA4", Size(215, 305)}, {"SRA0", Size(900, 1280)}, {"SRA1", Size(640, 900)}, {"SRA2", Size(450, 640)}, {"SRA3", Size(320, 450)}, {"SRA4", Size(225, 320)} }; gImageReader-3.4.0/common/PaperSize.hh000066400000000000000000000026001417507262200175510ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * PaperSize.hh * Copyright (C) 2017-2018 Alexander Zaitsev * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef GIMAGEREADER_PAPERSIZE_HH #define GIMAGEREADER_PAPERSIZE_HH #include #include #include class PaperSize { public: template struct Size { Size(T width_ = 0, T height_ = 0) : width(width_), height(height_) {} bool operator<(const Size &val); T width, height; }; enum Unit { cm, inch }; static Size getSize(Unit unit, const std::string& format, bool landscape); static const double CMtoInch; static const std::vector>> paperSizes; }; // PaperSize #endif //GIMAGEREADER_PAPERSIZE_HH gImageReader-3.4.0/data/000077500000000000000000000000001417507262200147515ustar00rootroot00000000000000gImageReader-3.4.0/data/gimagereader.appdata.xml.in000066400000000000000000000066451417507262200221400ustar00rootroot00000000000000 gimagereader-@INTERFACE_TYPE@.desktop CC0-1.0 GPL-3.0+ gImageReader gImageReader A graphical (@INTERFACE_TYPE@) frontend to tesseract-ocr Grafická (@INTERFACE_TYPE@) nadstavba pro engine tesseract-ocr ocr optical recognition tesseract pdf @INTERFACE_TYPE@ ocr optické rozpoznávání tesseract pdf

gImageReader is a simple optical character recognition (OCR) application which acts as a frontend to the tesseract OCR engine. Features include:

gImageReader je jednoduše použitelná aplikace pro rozpoznávání textu z obrázků, využívající OCR engine tesseract. Mezi funkce patří:

  • Import PDF documents and images from disk, scanning devices, clipboard and screenshots
  • Import PDF dokumentů a obrázků z poÄítaÄe, skenovacích zařízení, schránky a snímků obrazovky
  • Process multiple images and documents in one go
  • Zpracování vícero obrázků a dokumentů naráz
  • Manual or automatic recognition area definition
  • RuÄní nebo automatická definice oblasti k rozpoznávání
  • Recognize to plain text or to hOCR documents
  • Rozpoznání do holého textu nebo hOCR dokumentů
  • Recognized text displayed directly next to the image
  • Rozpoznaný text je zobrazen hned vedle zdrojového obrázku
  • Post-process the recognized text, including spellchecking
  • Následné zpracování rozpoznaného textu vÄetnÄ› kontroly pÅ™eklepů
  • Generate PDF/ODT documents from hOCR documents
  • Vytváření PDF/ODT dokumentů z hOCR dokumentů
https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/gimagereader-@INTERFACE_TYPE@.jpg gImageReader-@INTERFACE_TYPE@ https://github.com/manisandro/gImageReader/issues https://github.com/manisandro/gImageReader/wiki/FAQ https://github.com/manisandro/gImageReader https://github.com/manisandro/gImageReader/blob/master/README.md manisandro@gmail.com gimagereader gimagereader-@INTERFACE_TYPE@ gimagereader-@INTERFACE_TYPE@.desktop mild
gImageReader-3.4.0/data/gimagereader.desktop.in000066400000000000000000000007231417507262200213670ustar00rootroot00000000000000[Desktop Entry] Name=gImageReader _GenericName=OCR application Exec=gimagereader-@INTERFACE_TYPE@ %U Icon=gimagereader Terminal=false Type=Application StartupNotify=true StartupWMClass=gimagereader-@INTERFACE_TYPE@ Categories=Graphics;OCR;Scanning; MimeType=image/bmp;image/jpeg;image/gif;image/png;image/tiff;image/x-bmp;image/x-ico;image/x-png;image/x-pcx;image/x-tga;image/xpm;image/svg+xml;text/html; Keywords=OCR;optical character recognition;Scanner;tesseract; gImageReader-3.4.0/data/icons/000077500000000000000000000000001417507262200160645ustar00rootroot00000000000000gImageReader-3.4.0/data/icons/128x128/000077500000000000000000000000001417507262200170215ustar00rootroot00000000000000gImageReader-3.4.0/data/icons/128x128/gimagereader.png000066400000000000000000000323401417507262200221450ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËbKGDÿÿÿ ½§“ IDATxœíw|\å•þ¿·L/ê½K#K¶e¹a\h óKè$!ÒØ$›º$!›ì®7›lH#›%¤°Ù°ébŠZ(6`Û¸Ûê½êÌhú̽÷÷ÇH²z±5¶Éò|>cÉW·¼sïsÏûœóž÷¼qƆ÷ÜU¨Ó„OŠ¢p»(ЇEQxNV´g_Øñ›îx_ûÌ !^'®¼î‹IöÿF¯×m[^R$%Ø,´u÷âÐDÄc¢,>‹Æ³ Š÷Àã?®Ä«-ï`fÄëÞ}{¦A–ºwþê§ ÐÑÞÎàà `ˆ¶'íÝ}töö…EÑ/ â>QvI:ÝŽ§ûq{¼Úõ&"~ØüîLƒÝÞýúÓ¿Û* {èîqÒÜÜ„ÏëÅãõÓÙÛGWß Ýýƒ¨š†(ŠM¢(í’igŠÚóè£FâÕÎÿ눖o~wf‚ÕÚ½wçgÜ'ĬCG'mm­„ÂaœC8]ôºðøƒ‚0(‰ÒË‚ÈK’NÝõ‡ý¨+^mþ¿ˆ¸Àj2u¿ùìóÚ_UUÜÝÝÝ475ź‹P˜ÞA=ƒ.<èª¦Š¢tT…—dYØUœdÛ·}ûv5^ßáÿâJ³ÁÐ}ðùgu|(b``€Î®.ðûýx|œCn<^ü¡0‚ ôK¢ô*»ÌzaçO|ph‘¿Æß<âF€Šk¯Í0H¶ž·^xòœÏ¥ªng“ÖÖÚÛÛ G¢ ûöáöP5MEñ˜(J»…?ðßÚ¹“¿mÄë¯ÍÐÙ-=G^|zÑωD¤­­•ÚÚZ¼^/¾`—/Èp „?AE§(J/ ’°SÖi/<¼}»gÑò7€¸ hýµv‹©çØË;ãu‰1 ÓÝÝCKK3„Âa†ƒa|¡¾pU#*ŠÂA”v ²øÒýËWǽQoÄ•V“¡çÄ«‰×%¦…¢( ÒÜÒBmM5CCC#Q|á(Á¨BXÕ±I¥—$QÜeúþº}ûöàymäE„¸ÀlÐõœÚó\¼.1/øÏ¢™ššjÁ !E%U‰h"š $QÜ‹(î’eõ©oÞëmðyFÜPR¹)]o·9«^~AÇ=ò«=ètëWR±$I­Mš¦100HSsõuõtvvU5š@UD±I…]’,îÄùÚöíw„­!âJÉbvÖîû낎ûÊwžæàñØKhÐË,_’ÅÆÕE\±®„´Û¢¶1 ÑÕÝEScUÕUx‡‡Q EPe‚(ùDAzU”Ø)ê…¿|íŸè\Ô\ˆ2*7¥ÛLFgý›//è¸ñ˜Œ‚œd6®)bmE>+—æ,ªuˆD£ôööÒÒÒJSc(š†*êÐ$A§G”¤*IwÊ¢ü’¯·m÷öíÛ£‹Ö€ „¸Àj48¼² ãf#ÀxØ­FV/ÏcÃêB6®)Æf1œmSP5 %%ª(„Âá˜vè즵µ…¶Öüþš,#è 12Èr§$ˆÏJ²¸ó ½7þ®NœW˜ :gÓÁÝ :n¾Qp¤±au×QZ˜ŽpßLQ¢ŠB$!Ž ‡ ‡Ã±¨äÐ=]Ýôõ:ñ¸]$gdÑç "Š"‚ üÌ×ÕúÉ·cXZŽçÉUõüÜUÕ¨k¹—_í8@fšKV䳦"KWb2êæuQ5 I’dY•PU E‘I°Û1èõ¤ed00䦣¥‘J‡ƒ“m pŸ5«À|)¾ßtñ7 éX¦³[zÛ¿¾ ãÎÆ̆ñBòòu%¤Ï!$UU%‰F ‡#1 0b‚¡Á`@ H‡³—¨o˜äŒLN7¶ Š"’$ýÃ?~ìC,ZãÏOEMM½ð¡øP8Ê‘Sí<òë׸û3ñÏÿ’G~µ‡#§Ú‰*S-”(Š£Y–äØON‡N–ÑÉ:tz)I øƒAÊ‹ ÉIOEUUEùÁ÷~ö?—_€¯yÖˆo ]xLFw¯›/gÇ Çg’¢$u²$£J*ª¤¢Óéˆ* :E‡ÅhB2™éëëã’åå¸<‡ðC:Mÿø½Ÿýlåý÷Ý׿ê¼7xÛyÒg 7Èžõì9P?EH祌X5¦TY‘@QE‡ÅbcÐå"??Ÿõ+–±ûðq”¨š(ÿJÓ´A¸øÞ€I¸èD šNù5e¨ªBÈë%àd¸¯€Ç q´(“…dFªµyT.ͦ²< Y’P% ,£È:‚,ˈ¢„Ñh$%9‰Ê’ŽÔ6¢ªÜðŸþϧ€Å­Á‹„¸‰@Û’µ©&Yìsž>¸ ãøÏ¿Lw 3š'l†B¸zºpwvàîéž“ ¢¬C.N*¡A/³¤8UK³XUžÅ$ †¨kmÅ,K\yÙ&¼^/:yšÎ¾ADQ ’´þ¿ÿÈñEiDœWè­¯¿fa#¯ÿü_/âM¤ædÍ„”©FJTC<­èµ0‰IfÌ‚@4ª00àåø±VHʧëÔ 4mñ»¡´d ¥©¤§Baº•«®¸œ`0ˆÛí¦¯¯×ŽÇŠ bUX§­Û~ß}þEoÄ"!®]ÀÙÀ’•MV~ÑH”æªzÔ@k²A0õ¤%Ë”®(ÄhÒÐéÑ#Š©¦(eå7–²ãM?ÑPg]Í¢·±oÐÇ«|”êÈM)E’$ôz=f³»ÝΊ’"TÕ¢jê2CTú:pÿ¢7b‘pÑÀÓÒŒ³»ìütÒR-l¹<-ä㱟ï&QQƒ^æ%YA#'/‰¼Âl²E4 dZ£‚QD½…¬¥Ëjo%Ä¥­ÂÈ¿£n£ÑhÄjµ’‘–JIÖõNÐøüƒ?úé3üÃß¿—Fœ#.:”.Í¢¼2UQ9r¤™¿¾xŸ74¶O0&-5åË IJ¶ÑÓ3Dmã1–TR/AtdŽ‘(Ëä­¾„Æý¯Ç%;P’4DQ@„A#AQn=.<âÿ~÷»¿ZñÅ/~зø­87Ä•ÚY¨ö–F'Õõ=ƒazû,¿båë Ô9Åð{l¿¾~7»_;,Kd™“ލWñ…'ƶ²²I+YB_CÝ9ŸÉPAˆ‘@–e ‹…„„–çsàTŠª Þ¯ÿ¸è8GÄ/(úÎêÓ%¥£Ë($(Úp»¼ìßõ2îþA–mX…=%iêþ:{‚žKÖfqÍ2‰ò,ÐO¢unÅJ,É)gõ5f‚%9Ñ€(KÂÔ® =5•¢¬T4UASµÏ}ã‡?»è¢„]ìï#hKeÅåëXqÅ:º›Zi¯k¡ùÅ7PNbåªV¯)$)Ù‚ÝsCá(-} ¨ŒäíÁ;èCgI@gµ#J2K®¼_OQ¯UU ‚ý~ü¡ÀÂRõf3iù¹èän„+'š¦!Ë2ªªb2™°Ùl#]ÁÞPDDŒþü¡‡Zý…/|!>¢ä,pÑ@àÄÞ#Ô¼ušü²BòËKØxc1J$г½ gKuN¿Õ„ѤÇhÔ( ÇîiFAë®»’Ìcì|@(¬ «X¬$QÀj’0¤±kºú8ðìn¼îùeއý~ˆø‘,$ùÌ-FÆ Gµ€Åb!11‘eÅ<]¢©eâáËÀöE¹Y‹€øj€³P^¹…ÜxËZ0½½^zz:ih¨G•ͤd³úšM„Ca\Î~Bþ^—‡C/¾ÆeÛ¶ ˆ"`Ô‹õ" #_WQT4±œ½Ñ¸à¶ºÚ1GôˆbÎØ¶Qˆ¢8A¦§¦’Ÿ>@³sà«_ÿþOžþ—üÄÑßœ8ࢳi6Ìf=……É&³ˆDZZh:݆+ `¶'œ•Nz~ö‚¯1šJ&¨ bpú:Y³±KF6:£‘h8‚×妳¡•–ªzTejéYÔP"!ÄI™'£‚prl $?—žA7HTŽŠ‘ŸýéOÚxÇw\ðšq#€à•4Ìsï7Áàô‘;N¢´4ÒÒt††üôôõvëhíôŽŠ$¥'cKN@§Ÿ9ĤS±êUŒ V½‚€JJô‹´ Éè zÌ6 éyÙ$g¦ñÖ_§æ4È’Š,ÉH’4åo£‚p¼HJJbYqoU7¢"®;ÙÞýYà¡…ß¡ÅÅEgº»ýØ ¤§ÎΞ¤$3II±}V–'Žh´¶öÓßí¤ßFd$NbpÀƒ )äØ(.M'ÁnšöœÉf•¢ÐãYˆ¶šFjÞŠ…òÓJèÍVüƒ¸ÝÈr,NУí $)–G`4±Ùld¦¥‘ÑÓK÷qûöoÿן¶ù3g}³qŽ,ü˜ˆ*ñÛ§š(É·‘Ÿc!;ÃLJ’ Iš}ØB¯(u¤QêH›ò·êZ‰§ž:ɪõDLVº=AÔ “^#)Á4!p¼ý‘ :!F†¾¦li$çî(EíØƒQ/#Ë3[›Ñ®Àh4‰DFb… =IXQm‘ÿnXÈýYlÄm0Èž»û9â爢v6cšhAUðT±«-£^euÊR0ÊÕÖ.Ò¤^„QŸ]…P½žC56¢²CR9Ž2Vy¥:ÈÊò ö뢦©Ì4#Ù&r2̤¥Ä4…N'RR˜HIa"o˜ÖV7ee´¶ Q’—LEY ¾À05µCx#œ‘‚¨úÑË&Ãô^À„û0Sl =¼´^Zœý  ÷>ð­üþÁ¯|þ¥ß°sÄEgä°““îBLz«rÆú¨ò7í9•¼Ð‘DšÐ‰ FIÈ–:H•€j¦íÍ~6| QE"Y¿"«ÅȾãÝx†#ì;:€¦A¢M&5É@Z²‘ÔdI z¬zV,OcÅò˜ì ÐÔÚK“ÞÀËÍ“MØä>ÌÆ0bnò¼:ÑɃEf³™»¥ŽBº E¢?þüC­üÁy_tpù9 áU}—޳9¿ ½ë .ÍìâPnÑŠA Ñé_ÁqU%Is’E+iB7²¨ðîâvÊ3üø£õ6‚žì6 kŠM¬( FTÞ¬ r²1D}[¸´"·×ÅÇOFºGI ’ ')% ‰¶7½~$½MS áy§¾OHINfiQ‡k›Ð Tà«À×âww§iW¼Nœ¿"IÓ ƒî†…¥ÄýàëŸ$0ØSÐSЍ¨\NFŠ‘~§Ÿ'@¯y7–µ¢hUC™ D30èuÔ8uô K\žÝ̵yMΫ]¾D^kM§Ý—FnŠ»Y`_uo@%;ÕÄÒB;éIF|‚LRº}ìXUÕØÿz=„ÂQTO5c³I"%ÁNNf:ù™,)Î!'=uÆI«£^A8&àr¹èq:yy߆bÓÌ¢¢(¬ûîW¿tlÁ7ü,qÑà‡ßø4¾þæØÍÒb7MÓ Ñj¡¼(IèPsqÙÖ°)ßI‰½Mƒ–~@—DRr:uýlbK§–#D s&sÈ™M‡ÇÊÊì® @ƒS¹–JR¢+/+$Án âòa’TŒã<‹Ý¯>‡³·“QD¯—@ÓPUðûÃ(Häd’–˜ÀÊ%yåç`³X€Ñ( ápx,‘´¾©™=‡O€ ˆâë}íKWqžRÊgW0çSR¶Qµ¾ò™O,踷ö¾HÈ7ˆ-!³ÙL8AUTüÁ‡ëÚiëÀålÄß¶—ÚÇìóªåXI±„ð ¶!ûÛYZ’ÍpHÏÀp½¤!‹±û™œQBg‡‹4ÏAtz"iܶ6Â{V…±\!n45»QTä ¢AÏpH£ß¥{(L{[ ^¯Ÿa”pDAAAÖ‰èuƒ.7§jÛikoåÈñ㯪£ÇÙK0Âl2a0èǾ¯¦iÈ¢Hÿ_ .m_ë¾Ý/+7 X¸*Q•Ô¡…Z€ïý“ÔÕœ"=ÉBFzV«¯ÏG¿³EUéspûCØÍz’­fŒz™ôä²R±˜ 䦞n'VôIJN#99…A×p€Òâ"t:™½Gºð·$ªéyKÞFQŽ…w/ó‘hR9Ý£co£‘ªn‰ˆ*’“m£¨0Ô3 øqv¶0ÐÝ«ÏI$›M,¢¢× H’€ªhH˜tª¦¢¨*jTAQìv–â(, #% ÇC[G»öìGÕ@…^0•ýçöÏ»âótÎࢋUÓhèÂ9è##ÉŒ<âk‹‚@z¢³Q¦Ï õ‘žh¦µ»Ÿ–®>$Q"¡ÚLvV•ùäf'~z:‡héÑXwI%:]ì+_¶&›Ãâ ú›ª)×fcšÆPL‡‚#ÛΊ¬0aE Ã­ÇŽÒëõÓY#”̤¤ÙÈw,#ß±Œh4Â`O'ý= ôtàqyv‡"¤›@ ‰kšhƒCC¼qp€×öÄfµ²qÍJr3R)ÎΠ®½ ÓE1¸ø\¼ï÷Eg~÷ã¯ÑÕRCKw?ƒÞ –`&Ñb@ÓbbNÓ4¢* ye™D»…Üül$Q$ŽP_ß‚ªBZ𵕅x½!^ÝW$I¬¨(gÕªeT,/Å`Ðsäè)Nž¨á¦kÏDó"ª„›ŠrÐ:X¤aÐLT´ ¨õ}ƒQI)RRLcဟ¡¾j«0øº@ ¡ªJÌ(*Šª DUTU!ª*¨Q•H4B¢ÝÆ•ëVóâÞƒ(±‚ÙŠ,Ëkú—â:±ä¢#À?ßNaQ>ý½Nö¿ñ:ƒÃ~<0’ ’™dF–¤q1FA)[æ@–$ú‡hmíˆb¡XbUµqÇÈ’Lyy1åKKhkiåÊõ?ÝÁú ëÑ 0ŠNŠ`IÎ'Í~fÀÇy¹ÎNÛ°‰ ›Fs?x`K0’`7`·0tˆ¢Àc£:DCk M­ôôõ¡DU5Š¢¨#ŸØïáH8–àšE{ß’("ˆâ ýk×/ꃙ„¸‰@cbæY‰ÀæÚcô÷´‘_@À7Œd1b1èQTmÌÅÒY'£©ªª†IL²#Ë2}½ƒèôz.ݸžöÖØÒ²,a±è±Z X­zŒF­m=œ8YG[G¯¿YG]£“†¦NJŠ )/+Â`0ÑÝÙÙjC7’ü©—4ÊÓƒä%†©rp$DÔˆBy– “ ÑÑa€K äg&’›•Éò%¥”;бX,#eó}¨š:æhZ¬>²$Æf8„¯ÞòÆ=¯4/Þ“™ˆøyÉ9MPL€%+6]°œ¾.üZÐKEq.yÉdgÇf -Y¶œ+WSZ^†ÏëÃív †e›Í‚¢(ƒa6]±‰þÞ~"$&š1bE²,! à19Žãv³oÿ1^ã¾@ˆò²’¬SÚi3(¬Êò£× 8&$QÄ9&VH±ÐË"å¹V,£Ö#–0š–’Œ£0Ÿ²âBL¡p¯?€†Š¦‚Ùd É áÄH AÚ¡×_ýíY>†9·. ©xm‚"D\ í&#è÷Ruà9:k0Û¬šŠÏç§®±‰în'‘H”o½$a6è).ÉÇj5qêT—]q9v›•7÷íÁbµ¢ªƒƒC±7Ð"2z“Gº…ˆ¢ÄúrMë6@¤¤8‡5«–²fõRr²Ó§´±Õmâ…Æ4BQu$& ªwlÊ$'Ù€Q¡X͡Ѫ#Á`@0DÿЧ«ë¨ki%ÉjÆ®p£x ¢(F~ò­5@|âœO?ý4§OŸ&33‡ÃAii)™™™cƒ(ãF¨?þ­Õéíl¥¦©MÓ†£ôºcó/m&#«V”â÷p ù¸þ¦­Øÿ}N7ùYÈ:U§›ÃS´D A$¤IºáŒ~ÈHKfÙ²ÊÊ Xº¤ˆ´´Ø\…^ŸÌóÍy„•Qhܼ6ì$äâSaB#¥gFK΃±ŸÎ¾~j"A†\¡¢(’m’¤x ºàxøá‡ž°Íb±PRR‚Ãá ¨¨ƒaúp=ÍTŸx“ªcûin¨¦Ïã'U0éuä¤%âõÉÈLC'«8Ê—ãÆïu qâD#š¦a6é †£„à A%‚¤ XÍF‚á(‘¨:…ã#”ÙÙX­fúñ‡£øÃ±ûÑÑPûïUUU›]ÀxôõõÑÐÐ@}}=ÓçJZ,ŠŠŠ(--¥¤¤½^?eÇEcÍ1jOæÔÑý {\Èzë.½‡£€Ý¯î%èë'V0𬤥&`2ë%% âqŽ„ôãVùÈGî@E=Í«»L° ’šDNN:ºúV>ý•orÝ–kÇÚ)D‰œ©AGÆ´@0¤«³‹ÚêSô{ôûBˆ¢HQ¢I¯ª¤qL‘5´…UèHKK#--7â÷ûill¤¡¡¦¦&B¡Øì`ŸÏÇ©S§8uê²,“——‡Ãá ¬¬ »=6‚g·'²úÒͬ¾t3š¦ÑÚX͉#û8qxÍ-l¼l=6®å©;)(È"9)–è„È’ˆÙbÁh2S]ÝJ0¤ j*ƒƒ.dYÂÙ;0¥íš¦ÑÛ7ˆ³w`,vr²Ðø:„£Å§IEÖéÐÔ’dqì|£%vv/è.. q³©ee¶pÔà9W/byucÖ¡¿úô¹ÄÄDJKKq8L›®Õïìâäá½ôvÖÒÔXª†Ñëdœ½Cür³b…(DIÄnOÆ`Ò³çõ„”(¨ ¨…ùI tGT̨Œ× Ÿýê7Ùr͵®?^N´!‚¡ mmíœ~˜#örèÍ×9pèÄ„ê'f³™ò²N×Ô Š*¡ ( X 3ßÞÑ®`´þ "Ǭ€,*íUg‰IDATëT f¼ý,¹MvƒÏ?—Ð4ÖÖÖ1Å?00Ua¤¤¤Œ‘!//oÎ|üɈF£´··ÓÒÒB]]ÝŒ×IMM¥´´”ÂÂÂi…¤¢(Ôלfÿ¯p`ïú{{¸õ½[).Îá¥W÷qªª†`@áý—nœ¹(Èt‚°±¡‘×ö즽ˆÎA¢(¶êŒÏ=üphÆâG€ÂB£]²êŒkÇ»ã1Ó[»Œ’­­­ÓV5’£!j£Ñ8eŸöÖfÞ:°—·ÞÜK‚6\Z‰^'óì‹{ÙvûÇX·á²Û0!B8â Ô7Ô³û•Whë¤}À$Š ‹aÓîÿý߸¬lvÑ`<ë­ @€–––±ëø|S‹y ‚0­·kˆ#‡ösòÈ~û:¹éörÉúM³^[™;F …ÃÔÕÕñÊK/Ñ꤭Q±„læÇÿA\æ ćÁ®™ƒ‹Åb½µ³aTHÖ××S__OOOÏ´û%&&RTT„Ãá ¸¸xÊ ¡aOLרì s^sL†#ÔÖÖñן§Å9@kï ¢(b‹$¼ °|¹Þ”B‹I€ñƒ477Ÿó[;f’ã¡ÓéÈÍÍÅápP^^ŽÍ¶°ÕÍTUë jjjxþ¹çhîé§Å9ˆ( ìzËÎGK¹Ùø`íZÝ ÏE€}ûöqúôirssÇ̸DADo߆àvÉ^R¯Uâ£"/œêõœ«Àƒù I³ÙLAAÁØ›;SBÊLP…ÖÖÖ1B¸\±ùW\qW\qÅŒÇi@uU5O=õ$õ=4tõ! ¢.jÛýøãÞ5bžˆ#í%•ÊÙˆ@MÓèèè˜uôOrrrƬCjjꂯ3Ò¿ŽÃá -mj ¢¹ÐßßÛí¦¸¸xNËR]]ÓOî ®½‡úN'¢  a±ï}æóx–¸( 03þÇ|†‚gÃù’s¡¦¦†;vPÛÖM]GO¬µ´ï}æ™·{I¥ºØnà¨ûï®ÂívÓÔÔDKKˬB²  `Œx ’Óa”5­]Ô¶w#Š"šjH8ðÜoçWÇvˆ'°—Tj“ 04KálêHNÀø®¢¹¹yÚ·v1ºŠ³’yyy ¾œ!@uK'5m]±¥i1ýí øáÈï™@P”rîµë].טuhnnž³«ÈÏÏ?+>š»ØÒÒ2«,..¦´´”ââây ÉQT5wPÝÚ…( hŠ.ñðK»ç>záˆ7TwÃñ ×O€ñ°K€åÄHq®ÖÁçóÑØØ8F†éL¸Åba,..F§›ßÃã1<<<¦ö[ZZ¦uÿt:ÅÅÅ\{íµ$&&Îz¾ššZvìø3§›Ú©j錭H¢âF€‹fz¸8:òbD¨rY8S- •••TVVNpËêëëÇò|>Ççøñãq÷Ýw/¸Ý6›Õ«W³zõj¢Ñè÷oô:‘H„ÚÚZ¬V+[·nãŒãRÇUA‰ÄíE7bùÒ „ ´|žl@912,æ•ÇjöS\\Ìu×]Gooﺺºb³‹¦“ …,Ë”””PRRÂÖ­[ÇºŠ††|>eeeó8KìviÚ™…7ÅøMß8/8g ‡F>: ˜˜nXdœÅùÒÓÓIOOgÓ¦Møý~ºººÈÉÉ™ûÀb|šû|¡M± ½Í-À<¡ìé$PÑ%§cJ˜¾¢w¨ù<¤#C1Ïb¡ïŠÙlÆáp,ð¨øaôIkÄæ‚Š ¨o[Ì Å]Íѯmçôvâé?3ämÈ*!óòÍl{/ŽÛ®ÇbšþÑûF>zbB²‚˜˜œ{$þâÃèsÆHq\Ûë‚Z€pËÓìX}'}®©i_¡îFZo¤õñÿágQ|ßçXÿ¯Ÿ%9ifN|àŒ›Yg—g‘0f&ˆÀhÜš?jÅ037/¬ß´2Ô`7 ?ü2¿Ï.埾<ï‹÷/ÿ üðp¸hòeªPÎbö…à‚už§?HKïÔG!gmdågï!9ÛŠ¿á8íyœ¶Ãm¨ÁvŽ~b {¿Í­¿ü"ºy¬0ŠÅv3ãØ bAU_ó.XÐòµ½S¶éroå}õÄníïïaÍ¿}÷+¿àå|†ÎîØxßo¾Ìï‡>ðäWXÆ0ÙÍL&æf–qvnf< ™„‘n N¸`]Àé¶©ƒ[Ëžüɸ‡ ×|˜÷Ôî£(Û2¶Íýô?±ã«óïfà 1ù±®âb]Gýì0™ òöÔÂLÐBôû'†L]×Ì…Õ0Q'ÿÎéi®eφiþtÍŒºi}ì[ìXšÍ®Ooh~Æ~&7ó\fpLˆŽÔŠ'âÛ3‹À²\+]î31Õ7ÏÌ!A¦0ÙÄ©î3†qøÏOÀ.°›o÷Ç8U5ÍÃMäÝr7Ùù¨ÃNz¼FÛÞªØV4ÿèKtìxŠmU¯’“0ÿéé“ÝÌBÎä:,$5d|@SUÔ‘õã… Ƚ¿îÝ3öÿ¨ëe|a‹~n£”džØìhï€ïLØÖú…¿L9N4•pݾ7)]5Ql†›rü[ÿÌÁ_üUÕˆtí£Ëš@އßnùEÛ¶Q´m¹«‹flŸ 4|`næ¨ÕªŠ¿ÁÀ çÚo{h‚¢G qàØü–ΛlÕP;ÈĈÙÉÆ©ÞAÁÏ_˜òðôÅ—²î¿_àÃ~CfÆ ©(š‚û­—8ö¯ŸåÉ5Åü,¯‚>ñêžÝG(2{´n¼›ù/#?gÚyœ%AÈ 7^ÆÛ3Øñžqü×Ïâήĺ‰iTËHÛµ±ªª¢©j¬‰âL€ÙëÛýâO$˜Î˜óÀ±¯òú®öYϨEiêŸ$³“îÌWÑ”á)âIJ¹ ó<ºѲ„w:BÞ,ƒNSÚì§óé_òÚoä±ä^¸ÿ!\ÃçVÔk,gï.`ö‹[×rË㟛0YâÄí—Su¨oÆc¼ÏŠPt¢É•,«Ñ[\zÔÍœp-ÓôëûNÁP@æd/eHIW‘Y61%E tR÷ýä·ÙË8ôçªy_sÜÕÇ~­$GpGG`½ñ»Üú½;Çþ¯ÛxeS/ã7xýËn…ëŸã/wï˜rý’OMÚ"‘eŸô«‹?½^_p?·×ôðѺƒ\ó­ûIË>£TooÞ^ÉË.pí§I’?Þnà'@Ö~Ï?ÿúÑ*™Ñ!ªþùþ79›7ÞÁžÏ|š—n¿\~}Þ©Ù½ÅM]}iñIJ1ÊðÁ³iÿ¼`*]Çò¾Ë--lx︀–¦PõÉMTO3î1#âüÀ'#¾˜%0ù:ú$%—œ™¬…úè|öqN<ü#ªŸx‰à4jÛXù6_™5e{ö×ÖLø¿â~\ÊíŽAÐ¥qÉÞ˜ kPì»ë‚­?'λ0‹©Oû·Š›y÷¡n{ü‡oœ;OÏ´ö}ܺïûÓ Ûnø1fý8ZSØ÷üìs1 è³X_:±¤]àЗ'z)³àü¾ÿ œK,dóEàbQ²‰ÏO"ë¶Ïpã¾z>VkÚNÙ-דZ^‚9=Kƒìî`Ó/žãÞC¿%Ù2},K0qç–OØÖñ‰/¢Ä7ÁsöÄ„V-ê¢Ý5¿P÷ùNL¹ !"±ŸGŒÃ@51߸½UFÇ:–}~Ë>vÏzðY²+¡k$í,Úûgžþ·W¸åß®9»NFdúu›§nBÑóýnÏqm]s*Yp)p/ð ±Õ·m;únÜóИ¸èü÷ëØóßÎñÌ1NßÃÏò+yá“ÿDíÓ¯0XWKç¿ÉÞú©ci–…O;;ˆó`ð…WÝð~I·lÝ|¥|ßïæÒ5+1›¦Ïù‡#‹G>7¯%6[ .@n¬ü$wý¡ßÝùm¢ŠšÂ‰o``ßv6÷’SÏ-,Ü~’ºŸœ¤î'ßšq]öß‘f/Îo'p^®f[²6UTÂïÕáf4¶äå?ñwïgÛu×’“•1ïzÉGO±÷h,`¬B†·ñD\2ÔÎ2ìæÍ²­mhƒ h·kp‹N’roÛv÷Þu•ËËgµ“1œ$¦˜;e+Ú³Ÿ×?ôaN½P3ç¹7´zX—?;L•OðÞéizò N?ú{†}g¿¢!—Kþó{”¿ÿlSßþ‹…ç?¼{wt¸éøžÆŸn,+ kÑ«þøÔ®ïo½ëCµY+6påÍwñ«?í «Ç9§vH6Ÿ¾ILClfª,gnäêç«yÿ ±äšŠW›Ñ@ÊÛX÷Ð/¹§ó(e㲉ÔPÇ~qãq~ßÉ <5ìqÅ[ÏkÀkÀýÖ’ÊôãUÕ×úŸ¾~¨[-f³ý®÷ÞÌÿïݬ®X6ëúf`õÈG:8£š™èŽ$_÷!¶^÷!®n>BÓ;iß³‡Þc§q·÷ÅH'èøÜ¤„å\»ÿIÚ³¶àÇlQ¨êw<ñÞMÜûìäPõl8¿ÞÂÅ6â Fº Dn4íf`éêËùÄß½-W]FÊ<Ö…¨çL>ߌ£J„H ˆd¶MYðiÚ.`ÕN>zô¦ Ûº¾PÉŸpr¶uÇúÙ°2e¶™º€ªêjž:]ÀŸ:#vïŽÃÄ>$,YQ|ìä©-ÿâW·¡qÕbÖÿÝ·ð[ßÃ’’¢YËËZ9cT …j‰Mƒ¤C7oµ>=2ÿý·˜~´š@äŒ"9q×÷ÙPýó;Áy\Ðáà…À]w²ÉÝxòQOÉm& ÉÃ~ÿÍ?úÅoÝtãm)åk¹áî³ë¯¯àrÏ^KiÔͼ™X4r;p1rÌêŠFäyLC-+Øzoé„m¡šoq¸vú Ñ…ÆÅkfóÄ °säƒÕ±rùþƒoÝ´ïÐámÀƤÄñï?x7·Ü¸•’±%ç§C21ḉؤ&b–á$à·ŸdßÄ}C­´ÿeÍ;wÒüìË3zÙßûú_\Nx\ÞÂÑ»aíѯÎýåÎs§|ñj€³„mÉÚTQ _­iÂ6`¸åŠM|üƒw³ñ’ÕØPËoV7S 2x2@òÊéµHËûKÏL`ÁUMn*‹b>ÊÅâþÍ`r7šìzïÕâ  Ý”ädfò±{îäÿ]¿…¼ÜyW uÄ´Ãi`® iŠë¯<š²•è¸É/æ ?à#ûc“Zf#µ‚_?r’}ÇbEï`‘`)ªÈDq+7ö.Qo¸ö*>öþ;¹tÍJ,æù§ë&F„ZbÆtƒŒ-Ÿ½…WÛ…w4?PÙÒîfiŽuN/àÄ·K %5«4A؆ÆMÀšüÜlá“z?ÛÞu-9Ù™óù˜h&T=Pýôí~žæ]»hÞ¹ _Î7øðîÏbªxê©§Þ!ÀùÆdë Ibâ{®»ç.VU,Ã4ÏzÃ*ÐÉ™˜C=;íaLekyït1¦Z‡2G±ð÷ÞÃuW_NFZÚ¼­ÃL¹ïh€·¬%•é"\?j z]ân}¼ã½”—:0ç7¤&¦NËuØ<Í>ït=¦Z‡5+– Ÿº÷ý\¹q=i©)ç4ÈôÞf°–T¦K‚vÕHÜá&›ÅœôÑ÷ßÉ­7]ÏG1†.€ýÞÖ˜j®Üp‰ð±Üɦu—’œ4§u8ßx[†‚/^<®¸9 ¶[K*Ó_?pèª×Þ|kpSRbBÒ}¸“÷ÜpŽâÂiËÓŸçy!ïX€ó‡˜u@c‹&Û€M[®Ø$Ü÷Á»¸tÍ*ìvA ªªŠ'žø3yý5ͱ±Êwº€¿A$®*ÔDõ-–Mù’Ëç>ö!øæý_ ÐÀ#ƒòœ>=uNÜ"à\˜bïxŒÊâõàGñÿQX‡Æ“YÑœIEND®B`‚gImageReader-3.4.0/data/icons/256x256/000077500000000000000000000000001417507262200170255ustar00rootroot00000000000000gImageReader-3.4.0/data/icons/256x256/gimagereader.png000066400000000000000000000765521417507262200221660ustar00rootroot00000000000000‰PNG  IHDR\r¨fbKGDÿÿÿ ½§“ IDATxœì½w”\×uæû;çÞ[9wÎhdFEÓ²ä(yìg{Í[“l$K²dKY‡5|K-Û²fä(ËÉQ"mZ")Q$!Ì`&ˆÐ:çîê®®®n8ïêêŒD¢ÕÖEwW¸çœ[u¾»÷wöÞGðÁÞŸû9WÌ2~F¢>†ÐÂBˆïjB}מ{öرcÖõîß&6ñf„¸Þx£xÇÏüL‹céB|H š…,?$âaMÊïʲó½‡ÿíïã׻ϛØÄ›5K·ýÄϾ!~U ~\!…¸ ƒH(@"™‚%X"BŠ¡x@¢ÝR™'î¹çžòõË&6q½P“pëþì%Ô‰êÄn¬‹rËþ=ìÚÒ¦i˜¦ÅÈTœ¡ñI†'¦É +I@D…¦<(¤ö]Ë~ä[_ûÚüõÛ&6q-Q“päÇ~öPêe¿ÏË_ü¯ÿAz>ÉÔÔŽã ”Xüé(Åôì£SqF¦âÄ•9¾Œª‡#„xÁQ]jÞÚúÌ]wÝå\·Anb×µIïyÿ!4íåX$ÄCßøŽ£ÈòÌÎÌ02:Jbv¥ÔB0M‹éD’±é†'§IesËô`‘f5!SR> Lyÿwþé/’×i¸›ØÄ†¡f @Iùr,æáo~mÝט¦É|*E|zš¡¡! …ÀBHgóLÌÌ21“`,žÀ²ìÕ–B[ ñªâ”¸ÿ[_ÿ‹—u-ƺ‰Ml$j’ßùS7)M¾‹„yäî¯_òõJ)ò…333LŒ311ã8‹ÏUÚŽÃt"ÉD<ÁTb޹tv5 „@ 9P ¡Ýï+Їþñ¿œÞÐob„š$€wþÔMš/E#a¾Ïß]ñûmÛ&•J1=gppL&½Æ2PJ‘͘˜™cznžé¹$¦e¯C¢(„xJqTSÚ}ßüê—z®ê`7±‰ DÍ€¼„yô_þþ Ÿ¯X,2;›`bbœ¡¡!lÛ^+&:ÉL–‰™9&gçHå*.Å2"XpBUhd\ÖÃ~ùË¥7ÜÁMlbƒP“°ÿ‡~â°âÅh$ÌcÿúWõÜŽãÉd™™‰344Äôô4°V;(–ÊÌ̧™J$™žKaÚÖ*2!òRˆg„8ˆ{¿ñç_½ªÝÄ&Þ j–¼„9vï?nh[¥R™¹¹9&&&¤Ï+ A)Å|6Çì|šé¹Ée+ r¥Ë0 àMÊû=¥ôã_ùÊWÌ íü&6q Ô, Ô‹ÑpˆÇ¿õÏ׬]¥ ŸÏÇfttt]1±lY$RfSfæ3”-k H!æâûqÔ–úýÿð¥ß›¼fÙÄ&P“°ïÝ?~Å Ñp'¾ýëÖ˲˜K&™œ˜ ¿¿Ÿtz}11/Hg™Kg™_ÐVYŽâ8*¥z 3èÝ BÚÄ5AÍ€Rê…h(Ä“÷]?Xb±Äìì CÃà ô÷cYÖB°l›d&Ïl:C2“_ge„3BÈcÀŽãºïk_ºk3Dy‚š$€]oû‘#𦽠…xúþo^ïî¬ Çq˜ŸO155Éàà ““ 5!Je™s™¹B ÅÚ $!Ä«RŠ)îÿêï~3iW 5I;ïøÑ›5M= …x滯ww. eÓd&ghh˜þu#mÇ!“/’̘Ï0íµqBˆ!|XJu´äø¿÷·_ølæzŽkµ%€¾YJíùH(ij߹çzw犡”"›Í219ÉÐà ###ض½ø\õgÉ´H勤 E²…ò:ÖÌÁ#ñ]éVþé]wM\Çam¢Q³ „|>qü;ÿr½»ó†aÛ6‰D‚¡áaz{{I§Rk\ÛqÈ•L2…Ùb™Ò:Q‰•eFyTh<@2ôð—¿üÉÍ ¤M\5K ž‡‚<ÿà½×»;W…B©©)†††èííÅ4Í5„P²lrÅ2¹’I®l-³­„¼@<ƒè.uïû·7ƒ6±µI·ßy‹B<yá{ÿv½»³¡p‡Dbޱ±1úûû.(&æË"È—MLG+­)Ä„¸ÉÑ\cìñ¯|ä#›AH›¨Mè¾ýÎ[4Ås‘PˆzkÀj”Ëe¦ãq†‡†9wî,ÙlX-&*ò¦EÞ´)ZÎz+ sRˆï+)ŽÚ÷é·>µ„ôŠÚ$€#wÞ"5õ\$âŇ¿u½»sÝ €T*ÅØØ}½½ŒŽŽbY•ÈKIL Óq(XEÛÁrX¬—X B’B¼ò¨ÐÔðÙ_!6—@P“°åðÝ*5އC^~ä¾ëÝ7 lÛfvv–ááaΜ9ÃÜÜÜ:b¢¢ä(J¶¢¬@±FHœ’cRð€Ë÷Ýõ©Om!½…Q³ ¤:xåèýÚÖÏ÷qêÜ·êæÀîVt]ÛÐö®&r¹cããô÷÷3ÐßO±X\["ÍQ˜JPvÀB®®†d !Žƒ¸_ÓÄÑÏÿú'_Þ´ÞZ¨Qxû­íx8äÕïo,ÜûÐ þìïÀehìÛÕÊá}¼íÈV:Z¢ÚöÕ„Rй¹99{¶‡ééé‰LJ)PvÀ B®ÜcAŠ!‰|XŽ-ß÷¾ðÙn!Õ8j“nzÛmJhφCAN<úÀ†¶µœV£¥1Ì퇶pûM[9°§ ]“Ú—«‰b©Äøø8ƒœ?žL&³Ö]P` [H©¯vŠBȧ¤G¥R÷ýΧ>¾Y ©Q“ÐvÓÛnÓφ‚Nûu1X¯ÇàÆ=íÜ~S7·ßÔM]Ä¿¡ýºÚH§Óô pþìÙÅÈÄ*@Ep´…†#5i€”« a@yT Q~ø“ŸÜ BªÔ,H%ž œzüÁ mër `9„ìØÒÀm‡*d°cK#¢®´£Êq(—ËLNM348ÀÀÀñøÚÝÔ”8ÒÀ–:B7V­,‚gÚJê÷þöÇi3éMŠøZ®EÛ¡;nÈgB?§ŸøÞ†¶õz`5"!/7èâö›º¹ùÆ.|×UêÝÕ‡ã8•C)ÇÁ¶R©4##à 1>:J©´êæ.Jj8RÝš¶Ò:@œÑ¤¼_"†4óñl!½iP» Ä3Á`€35@˱\H¼ãðV:[ß\B¢Z˜øU¨€½p8X–Ålb–Ñ‘1&ÆÇ˜ššB©•µK” (Í@¸\ˆeb¢bNù})8ªaÜÿ©üÇÍ ¤ëˆš%ž ô<õІ¶uµ `5V‰o’eÆÕ°’l,{éïB¡ÀäÄ$ãLMN,¦9/BÐ Ð]H—g…v …0…à)‰¸ûSú/%6—¯9j’Z÷Ý~’§C=O?¼¡mm4,‡Çmpð†ë/$*¥V€rì°–AÕ*°mÓ²°,‹t&C|j’é©)³³‹K†aбm'ÃñY`ex²|3£ó_îúÅ_,^—Aÿ€¢¦ è÷sö™G6´­kIËq½…Ä*¨ešÀšÉo-· l¬°¬ !”Í2‰Ùs‰ɹù\MÓ¸ímoçùÓçp”Z½’pT†}ïÿôÏÿ|áÒ=ÜÄÕÀõ·7_¼õA—ËÅ'>øŸ6´­žþi^81¼¡m\‰ù'zÆùΣ§¸ïèk Ž&°‡Æº †±±Xm”ª¬VêËO«…§*ÿ Àãñâöûñ‡¢DêÈe3ÌÆ§¹ãæÃŒNÍà8+¬þ­¢T¾áŽÃ‡î9vìØ¦;p  _ï¼^T¢×~p çΧ <òÔYyêì5ïÌR")åÂu ‡ÄQ ¹I¨iZÅ})%RjH©ð¹ÝhR0—¶¨ïèbü|™Ô· o(Âtb†l6‹×ëeÏÖ.r…“‰$‚Å;S£²åý_üâÝ·~úÓ›+š$LPšÚÜã ñz…D+cýa™ X%'U¬ÂJA°* ꚆÇdppƒbYvn#óê)²…"ÎB»ö[Ü^“‹ô†šÔÜu­RðK†aðkþÅ m«4€×ƒ+/&ªÅÿW¯®+Ë„•ÙBÛ¶È¥SìÙ³gQ< y=LÌ$pVú+G~äýè;zÿ}'¯Öø7QAjJ(@9?8Ë€ÉxŠ{:Ágþ׿ñ…ßú£ûyàÑS$’¹Å׬³Á’¿âXÐ ªw~­âÿkZUÐ0t·×O:•BJ‰ËåÂår ‡¸ak'À M‡¿üƒ?ÿ›]×ëú¼UQ›.›"àF¢*$e/-D$Þ´¯ƒÛu³g{óbÙ0)J¤(¡VެèU `ul€¡i %¯\.‡ßïÇåraY- õÌ¥2ŒNÏVü€ÊBÜýÅ/Þ}Û¦põPÛp-ÚAP¿u;þHiX¥å|–r>O9—¥J­ˆw«a=!ñÈþNn=ØÅM{ÛñxŒ‹UAMV@µ@º®#xý~ …ápÃ0I`GG+©LŽt~Å\?`z3ŸþÛuºo9Ô$(¥„àÚXyG£óÐá ÷ÅvÈ'd³äfgÈÌÎâXoÝt÷ùt£OŸãèÓçÐ4É®­Ürc7ïo§¥1X™ð«V*n@…ª¢ &%…Ëí¡X,¢ë:¶mãv»ó nØÚÉ‹gz±Vì§ÿÏ¿úØç>ö_¿s½®Á[ 5™ Ù±ÿ =îóz?ñ솶uïC'xxHlhº¬×+Ç!“œ%=1޹ºxÆ[MõAŽìoçÐÞ6vm‰`EêaZ63ÉyƧã¸%limæàÁƒ”ËeÊå2Åb‘|>O6—cd|’žáñÕÛžÅmƒ¿õ¡M_ï1×:jÒ°í¹ýÏ—_þ2—BîÇ͇ÿ~³~ÀëCmºB¨ÕùhÝ1É¥³øC5Ϲ}^öÞ~ˆé‘ Î>õ,ûöwâQ.¦&SLǓħç©kÒØBk ãk ‘$D}}mÙ,WÀù„›²]yÌk8Ôy-ê}öЏ4)iêjg2 [·17<@.™Üðk°T'÷R”a5¼XÓ´u]ŽæF’™鲪aïv5¶þðÅë2GmÀ5„PÝ}?»o¾‘–î<RjØf MYx Åmû‚üè­?ÀcžæÕýƒ^š[¢äs%ÎäÔÉ¥Òøš”Ô7ilÓÜ¡­-Ê–ŽFæËy‚)3]ÄsŠŽp™»"øe‹0®vLÐqèg=ʵ"ë M(¥¢2ñW“@•ÇYA;:ZxµwÛQKABŠßý½?ýÊ¿ù+>]Uƒ¨M¸†@©P$=6@WÌbGKá°·Úª2ŠRŠï=x‚§Ÿ<@&S “Y b©«ÑÒ#05•`h$ÎôtŠ“'F€ )´wÖqËmÛÙ¶s ‰‚FÙÑžwÑ)ãX6/ÂòH_4FÃÖmÌ ô]‹ËpUQ)~¬—ö€E!°*ðVW Àã!è÷ÓÙXÇÀäÌòÓy¯Ý}÷ÝïøùŸÿù7ßòÈ›µI ¸‹R“|ôã?B[{삯ÉåJ|ë__ §gü‚¯I̦I̦ñz]¼q;?òžÃd³††§žf|"ÁðÐ ÃC3tíMR¿ûF¤4ñ0< ekýó¶ì=@rb «X[Åt¥¬|~rY^AÕï_¾"P­L¼Ü hi¨c.%™+,Of¹½wzþW€ÿ}}FT›¨Q°ÔµÊcBÐzTÙrÙâ¥yìû§Èç/O‘/Ê<{ü ÇŸëa÷®î¸ýÞ÷Þ#”M‹Ñц†§H¸›+{ñ9»D‘î2èºéfúŸyò Gv}¡ µHU¬v„+¬€ÅUÓdk[3¯öU\¥úÎï}þÿåwçW7W.µ¹ kìˆêºÎg>¾±«gz'¹ïá×½(¥ÈfŠŒŒÌòô“ç9öÔ"ÔD][ >¿\:‹m]¾:;›â•Wû8sf˜bÉ$òÑÕÑH8d&wé÷Wá ) ækGlˆUƒ[ë´6ÕÓÜܼøÜz©ÇUëÀqœñÐA*E2³âBBpø]·ÞüµÍUËCmZB\Ój =§Çè9=¶æñHCÍ]mxü>n|×­ ž:OÏó¯R*\¾I>O2ýèÒämmòî÷ÎOK.·èQLJÈ%S©Ën÷zBÓ–V4mé>Tu–ëÕUÕ®@S}”ÙT†ù• CwhÑæ_¾ÖcªEÔ¨ÐÔ!Ô4Ï|üÃÚVOœ©¢¤¾¥©ë”òÅÅ»Q1_ ÿµ³äRi¤¦á ©ki¤{ß.2ói2É+›Œš&¹íöíüÜÏßFsL£- é"\Žw!¤$ÜÔÌÜÈð›2Lx94 ꣕»ü––m-Ô×ׯ¸óWuåXm8ŽƒÇЉϧ ˆ,°¥à]ïú©¿ûØw¿;wMTèI @píö³¥Î-ï}'ÕmylËbv|šÁÓç™Á±m†{úîéC7tbÍ Äšˆ6Ö110rI¥ÒãqÑÖeçîöíï ö¡LßíðÎ]ÈBïL¦.~:—?ÀÖÛßNßÓOàXP ¯'t8D!1æJã Ñt}K“ý¢±A¿Î†S3, lõI[üµRêÎÍý/Žš$×ÌГ§î{„ÃwÞ7@ÓušºÚhêj£Ë3r¦—¡ž>²ói,Ó">:I|te„^¬.À­·nÇçwáö¸]¯‹@ÀM8ì[Û¨‚Ñ´A®¬áÑü†×œ!þÊiJÂG¤½ƒ@]ëErêØñŽwÓ÷ôØo²Pa©øë(ÏV&½”å¬ €*–ßýWÇTÁª+Ð\c6•&]X¦˜:¼ûwÿÏ_| ø³k0´šEMæ„v¸‡ãn—‹ø™6´­{øöwO"umûw±ãÐÞEŸ¿ ¥`nrš¡ž>Æû1KkëèºdÇÎöîkgç®V|¾ çX–ÃÔTšé¬†5 „\l';ŸÂ2-[¸0AÉZû1êš ä¶Ñe…)Ír™R¡D¹P¢\,R.Ȩ́É.ficÉBs¹7µà ‰Å4üj«Tâ–-n9|ˆÎÎί_žìµ|‡bÓ4)—Ë”J%òù<¹|žt:Mb.Ék#«÷ÌI©ßø;ŸüHÿ†®†Q›€%òe ‰Ð4”‚¾gé?užöm]l¹a;u­ÕòXP×ÚD]k7ýÐíÌMÍ0=:ÁôÈÉ©”RX–CÏ™qzÎTb"MÍa £ò8¶"—+’É™ŸÏãØ•"‘†:n~ï;ÕE‚Ñðš.*¥(” %›bÙ¡\v°lE² ñ{5ÂA8xá1*Eb2ÎȹOŸßZ‹v¹ÌÜè0;váõû! ºÛ¾ÊXŽå‚`õ¨Š«]PÀO[]„áø\%º°£åWXÿø‰«> ·jSŒ6·!ø¦iüƯl¬xnp†—NO€x=.”©D’᳌œëÇ,–ñ|¸<•Ì>!¾`€†öº÷îdûÁ¨kmªäA©P@9ŠbÑ$1›%O§™™I“Jå)Ê+ˆ­˜/0|¦ÍЈ5¯¿C°C—ø<!¿N8hàuKt]bZŠù´I±l£ÉÊëÖ9¾`€–îÜ>/Sƒ£k_s•KÎ*\  3bÐÑÞF °2×âB‚`•V ‚¶ãàÖ5’é,åeú‡‚w¾ï'‡Ž=ô6¨FmZ×0XÈŠ2ÿîwïÀã6€JäßÔTŠññ$££ ž¸÷,h„¶Ý´t¶â[–8d¸]´twÐÒÝT*ÍÏ$™›Ž“NÌ“O‘žKQ\™å¶¶móÚ“/ŒÏrË{ßź,° R€×­áuWø]¶­(™¶£Ðä…ß_¾‚åË×¥ÈMBÐ'D¾‹Z•·¬× öz1M“ím¼60º¢¬¸#œ/þÏ/}é{¿õk¿¶YAhj“®!¤¦ñžÞ¾ìÎé÷»Ù¶­‘mÛJ¾þðp‚¾¾8¯>rž¢%iÚÒJsG+±æzIJûBJ¢MuD›êV´c–L2ó"(æòóEJùÅ\ˬÜÑ”¥b ·×sEcT4ý­rrE߉Î<÷êûõ@ÓV©H¶\BʺKnfz!Apyõ ÅU@€ÖX„ÑÙAQ1ÓÖþø7d@5Œš$¥òšhº[_1ù׃¦I¶nm`ëÖÞûÞ½ÌÏè훦ïü^9–"ÒÔHc[õmMø‚þuÏa¸ bMõ1„K"›H0ôÚ)ú{†Ð öí;ˆ4Æð‡‚¸ÈƱmr© ¹Tš¹x‚Ù±ÉEbºšæ —&Ö­}ýÚåVÀêB¢eÓ¤½©žd&Kv™ëñïïúã/ã®_ÿÄ}WÜé·0jr ¼uß%ä †®3{ö¥ më{Ïn^g©î2aÛCC úúgèíS0õ-Ô·VÏ{é“l¤PD¼6 > ŸQýÛa|¦ÄŒDè¯t¤‡‘sœ9þ2ùÌåÇ-»tèh­‡ßãâÇnßÉm·ÝF(ºx{+7]S=hy!Ñt:M|v–SCãÀŠLFŠ–oß>ûÁÌewø-Žš´¸†Áê âš&Ù¶­mÛxß{o`>™§·–ó½Cœ|æ%¡Áh˜pC„HCáº0RnŒ6+%„\6aEØc£­¢©I:š½´+›ùb‰‰Œ±X¤d5„”tíÙNó–vž¸÷{¤——‡`• ?ŠŠ+p) `E›—á x, Óã! ÑI3•\1×;=zþŸ¼¬P» ¸&.€c)r¹2~ÿ•Õþ»"Q7éäæ#€ÀÅ2LN¦xñ…^ž¾œP,D¸>J¤!J0".®2\ „Pø ‡ Û!è²ñÎ¥ôÃÅ÷E½6!ÍÀœ›lùÂÔíõкµó² @×b¸¸ô¥­Ã/ݧ•®À¥ ‰–M“®æFæ²yJ¦½-¨ññßù“/óóŸúÄÓ—Õá·8j“®%„ä‰ããüØwoÀÉš²ð°½ÓÏöÎýXö>†‡çM23;Éùs½$Y4à  ˆ„‚¸½\7bÙmÜ,–ñ{%± Ag«ˆ_CÆ’&`K¤Ì©øúnŠiš Ÿî¥÷ÕÓ‹yCat«T¦”ͬÉK0´¥ø ·¡/®í_.®$YÈ4M¶4Ösnl …@ @JÛù³ÿÕ_Ýü•|ä­»ƒËe¢& @ ®Ý®Bpúü<š>»noÃíÚØÐ ]lÛZǶ­K«¶ãLH$r‹&¶å€(áó*|~‘ WT IDAT)$©TG÷˜Í•<û®-1vílf×î¢Ñ×§cšZˆ¼^i:ô¾ršžç_Yõnk§yçn¤®£‡b6Cjbœ¹‘aŠ™4ºî,€[¿l .-®®`–Ë4Ä"ÄçRÌåò‹œÁéâoÿßëº(o!Ô$\Kˆ…HÀ“çæéJ³wWŒvDi¨»vâ&%õu~êëÖ_AhoðÄ“½MÇåÒ¹õûÙ²­PÄGÙQ NgfP@#ö\–+à8¬™üP‰H¬h+ `ªç43}½Ôuumïīǻ;LóîHMNb> v±²  ë‹ùrqEÉB ®@w[©…â!Ëð›¿óû_ü—ÏîÓ§×¶òƒƒšŒôÔµ4+¥~YHÁg?ñËÚVßD†ýó)±l˜Œx­gŽ“çæ˜ž)Ζ±…®K\ÆõÝm]HÉðH—ÇÃÛï™Ä6MË¢«µŽÆº[º.½ãÒš±®Ã`Ë-„ªePM¶-“ùìŠ`+MIy¸ùC¿ôÏÜsÏlÆà¦p !‘š^1‚Ô+¥¹"œÌrv T].I,ì"q »‰F]„n~M ܆D\d²½Q¹©ƒ;yúø ÷|ý(m[šØwh[º›WD:hxc ”Ãôè$Ù¹9š›45­\ŽÓ…Z(¼»†a°ýÆ=l?°›‰¡QFÏ0=4†i.Yå|¾BCƒèº¢µ¡( ‡`(¸˜èt%¸\W d–Ë´750“Ê+.•€[w M~Œàâ!5éÞ{£#µW5M2wî• më{/Lñõ‡Ekb…ÇPhR-ææ—-E<¥˜Í( ¥ÊGU¥nµô»ð„ƒ.š½47úhn𠬽þQ”J&'NNqòô$ù¢Ãî½]too¥©%zÁP⡾ N¼pl“–汨Ÿ`ÐMÁÛ‚%/w#›™‘IƆ™YQÉë¶iˆ™xBaÜ~oÛÕLK,ÀÛï¸ýŠÇ·æN¿,cpõÎB¹\ŽT:ÍT|†“£ VÄä¤Ô÷ÿîg>1xÅx `Ó¸„”H]çÃï,ó®] ¨¨K MÀsýð—³òå°@Š€G²»Õ 9­1“–H—K§èHò¶FÁÖ(9r]¿ûJàvÜr¤ƒ[Žt0—,pºgš£§Pvèên¢{{ ][š0ÜKä³e{+[¶·2Ø;Îã¼L21J¡»ì£kw÷%c4M£¹»æîvÔw075Ãìø3cÓ”ÓcøcA4—¥*«—-F¬ÂòÕ¸¼B¢uÑÑÓÉôòSùÇú3àÇ_WGj5©x£MMJˆ !øÜkSyNgi‹*ö¶^¼Ô–Â>ØÛóþY¥¨¤ Éá>~òÖÛ[ÝÄ‚:†.Bá’~Í&b˜Ä\&>ÍÂB JöÚòXW¯× «#‘›ÚéIç8ybˆ§ïa|8N6[@Ó$~¿!ѺûïÀëó051_ÙÎ{l𑾤#AäêýËÖ»Bà ú©om¢s÷64Cb—+“O{Úc¸]ím?ÑEοÞïU¬)!fÛx ƒ©ä<öBÊó»v¼ó=ïë}òèC'_WGj5J׎¦‹dç'81îÅ놭õë“@!GÓ]©1™üós:%[«ø¸²J’á‹c'rŒÏY  .¤­É΀!>Í&l˜4¸ËœHñ|Ojá®Éë^Ž ø]twE9r¨›nl%à×™IñÜ3çyáøy&Çç(J¸].¶îheßÁ­”M‹Ùx Û´™™ˆ3t¦Ÿ|6ÇëÁ㻼Ä$GA|´U®† +öuÖ!5íu@"ÇÕnBEtÊ!‘Ê®>ÉÛÞó?ú7Çz¨¶6Xxƒ¨I ,„ºVÌ¥-l]õ¹;^àɱ¾:×À”h,s”"Ÿž¦™á\v'_>B¹\¢Å=GL&ѤR’²Ò0 ÛÑõpn؇-Üìépsh››}]n<Æú_æ;v{Ie2Ô#H)8×›`r6MS½‡Ö&?áЕG*ú|»wÖ³{g=ï»s+cY†“ôžä©ÇNâõyhm‹ÑÔ¥³»•‘¡i@á(HNΚžAóx¨oi¤¹³™Plm±’*¤Ÿ^¢¨ƒc܆†z– \™ èñx(›&- õL&æIåWÌõæbIý1ðÁ7Ô¡CMŠ€möI8)¥$y~cEÀc§æ¸û©)ÔOñÿìè!k¹xv¼•‰bÛ!âµñÉ,[Ý=äLƒz±‰#òI.§fƒ àxÉÙ>’N#POSKÛ·6Ñ[)*÷¾ Ø»£©ÒV¡ÌCO 1<™Æeb^Zš¼´7ûhmòãq¿~š,›“i†Fæ™gr:»X‘T Á/|à0]í1”‚d*Çdð¹On¬ 02SäüDŽ™BŒéf_ÝÛ#óì«›ÀíÌS.fèòM ËŠEàÒºÊ<6±?iÜââ[ûÀ%LüZžz=IÔÇ•:Çô@ÏœLsz6D¦$±lE¶àðj_†‚%iˆzq»·ÖáréŒNçHeM&ãEÎõ§yéT‚ÁÑ ‰d‘RÉAJÇ­]¶– i‚HØÃ–Î÷7³wO#õu~4]#›39qfœÁ‘ hªÑÖa×¶&¶·E˜™äÙ'^%1=G¹lâò¸R‘;»pv…ËÐØÑE¡ÑÙÞúú? å×ò2b7 …"éE+@·ÿÈ;îøê±cÇÞ„e•¯>jÓØ~ã^©Ô)!ó½[À⩞$ß~>ŽZH>:Ò0Ê{;Ï]ò}§fùçž‹­r˜F1IL&аȩ~‘½ä9 Ž—Ç³w0i6RABðC75qÃÖ¥-ËÆ¦sÜ÷ø –]ý‚¯\‚D)\†¤>桱ÎMcÌCC½‡ú¨ç¢@ëÁq“ÓY†FS §gioÑÙ¥³-Bkc˜l®Ä?}ëEæSy@áó@Ø=…a¸0Ü ??|` ŽæâŽ›oº¢ö/„Ë-$šÏçI¥ÓÌÏÏóìÉs˜¶½"Á)ïúÂÿõˆ0áM¸þå_ïá䔎ÚƒB¢€ƒu#¼§íÜ%mþñìAÎ'c‹äRh˜”•Ÿ­r„V9BƒŒ/,"®[é<˜}/³vlÑ WJ±µ-À­{ꈅ+kô¯œKðÔ‰išÂ’h@+*fÓ6ù¢½‚[­¤¶4Q4u±¨›XØE8ä&v »p—g æ Ãóô $éœÃvÀï5(M,ËYü2¾Ø‡ö¦ïç~LtÞqÛwª×¤ú³z·¯n1^%€ÅºÙ,étš¾‘1ÎN® !D]?ø…Ï~ªçªtìMŒšA*¸6»ß¤§Îãé{—Ân¸»îfNÍwQ°½üXÇkòÂý¸¥yœÁL}å ‰X  C)J*ÊQú¸ì"Íb”9B³G__¯ ‹¾anm)õѤC¦d0—wóÂËÓÌ;|.鼉Ô4‚>Üꥳ¡òñÎf¦Ê¼Ò_¢g¸LÙqÕ;¥R̤,fæÍ…Í:A“`Z>¯V!ƒ  @ÇïÑ©ùðû \†@×$ÊQH)ØÞe{w”R¹‹£O Ó?8„¦ gâJ(Ü®…jÈ—»÷Ùeàrª­;[š˜H$Éä‹Ë6Å%,ë/QêÝײöÄõ@@×¢€\²D96þ0ÚØÃ8¾fÆêrOa?ïî§Õ·~.|³?ƒË(U™ü9üz™xÁO¢àÇrXxÎÇ;W;‘¶MãÔ‹)‚$ÑpH«õÍ1ÞÓ=¼n;–#M8—ˆ0”s>âîÏÓQ'¹m‡Á¾Nƒ[vx¸e‡‡BYñÜùŸ,O[+›}nÿüS»pé’l¡ÌÐx†3 Nõ¥ <üäOî#¨,ûÙ ‡rSS)â Ì˵8ñÅ‚û!ªo‚ùl‰ÉDšºèú;/¿^¼žB¢»:Ûx±§8,& ¾ó3¿÷‡¿ø‡ð·Wµƒo2Ô¦ °cßéÈ3©¾­öüõ¯|‰ž'*wïóuÑ­»èÞ³—[¶Ag©4–ã(ÎKúãLábBÛû:GØ hô¥83×È`:Æ Í&n]qnÚ Y‹nÂçÀ–P’_Úwy+–Ò8¯ã•©:ÎÌF1mI{L°§]g{³Fw£†K¼Ð_æ[Ç ¤ ö‚k¡èhôsÇþ&bKëûc)fKŠö^B¬SŠ¡¡Y{ô\% š´­n{ÍI‚RH!*…AEkC„[ÚÙÖÙʶ®ÚšêÞPÐS¥¹õ]j˜p©TZ Îf³¤Òi^îée:™Zí Ìa‰=t×gâo¨CobÔ´p-pÑrUÊdÏœ¡ÿYI˶´umÅ-A%úV‰ê”i¶ûx|êߣIØžÀ£™ì‹M°/6AÁ2xm®9«‰Þ^ÄŠWÇݼ<æf6WÙ”d<ãô\#{c—þ.êÂæ`SœƒMqʶƙDŒ—§yìtŒ£§,‚ÖÔ….ÎŒ™‹06[âžG‡©ºén ÒÞॣ9H›[)œ‹Lβi£l›ÎÖP¥fP,™äŠåùʽUHÁ–Žàb°íØœäµóç)–lʦCc]Œ›ngk{ mu4Ä"Wt§z=…D÷tw0›J¯NŽ ?þã4_S¨I ¸eÿn¡‰Øx àŸþï—~íèúÀâOµâ±›÷lÃíZ›àóJø?Q”Av…Æxgã™5ú­$g“ÍÌÛõܲ͠9d12oðꘛãJ–Í/l™Vz͹/é²›ç'›yb¤¼©/Y°¾H¸èb)ã‚{<üI&ÆÇÈLtb×b˜Äâ”[h¯T¶ÉæM”’x¼.Â!mM lii¢1¡»½‰ ÿÒN®´hOß½ãÓ«­%5ñCø›¿ñø^îš@MƸ£ÍuBð+ÿý“ÝжN¿öóSW¶µ\6_$ôa,³J–bd|YN1W r.סkÔyÒ‹,,…¢Ñ›¡Ã7Åpï ^>9@sÌÇ-Û Þ±-Ï–P†žd™²F½7sYì-¤F_º…Gú›è™‘,(;&:R îÜUæïγ£ÉF ™Ík8,„./ c¶™Ççs‹.Cq•Ê4…×¥!/bLMŽb–òø½%Ó!•)ãuk‹–Àòû®&Ž×£áØ63³FÆg978ÆK=½|ë¡g&—Ï`Ù^wq‹µ5ã¿H˜ðŠaÇÁëv1ŸÅ\YÆLo?òÓïÿÊó>øæÞwýu 6-€î»„ä,l¼p÷?üý/=¸dšfàØv%¡d À²ærb?m aÜ.“³I ¹è‹w] ñqÇ-»Ø¹½uÝ 4=“bh<ÍÎ]{Ù¾£R—жlFâ˜å õþ"ÚE„ê@¬ —7ƒOŒàš}‰A41îlaJub+É»wøÙƒy4 ESð∋Çιš«j¬°š|¾±™XÌSQÎ騔 &¶í`™¦iS2mòy“L¡ÌXß R‰1LÛÆ±ª‹Š%ôUòVŒbUÑ·rÙf.Y$›·EsÌKSÔS ìAðûhoifkGí­Ô×Å*u VÅT­Ë²(•Jkbú‡G9Ñ;´Ú @Jñ¹?úÏþÁ•~Þì¨MØzãN!Ô9Øxø—úKz_x`‘¢±:±PÙq7—É2ŸLbÙö · ™-O€JõÛ€×EØëBJ±8‘ Mcï¶vŒ…̺@ÈKWW±ºÀšÂ!ùB™¡Ñ9BÑföî߇®W¬‹R±ÀøÈ `²ÞNãîP;P¥¾à±g1'O,Æ”ðrNfHí¦-bógh‹,Ý䆿t?ïæùae›d€‚ÖÖ ûöÔ­°.„ÑÞÓœ?ñ¶íTHÂr0M Ót°¿Gè+ǽŒt«(ä-¦Ãnš¢n¥PŽZuGwƒtµ·ÒÕÞÆöî.ÂÁຂàòºUWà±ç_%S("W’@Vi®ÝòÛŸ¿ä`kµì|6Þ8×ó*Ã}'™M¢²Ë­Bár»Ñ ÏK(ÅBañ}—ŽÏí¢P21m‡BÙ"/#xª;+ÅÌ|)%‘ Cj¤’y&'æÉ¤ó†ŽÛ£ÃÐh¨ òÃØð“SSø¼|þÑú¢uÍ=@<‘e&Y$SÒɘ>|þ0>o%PhKG”™RÒüDe»0,š¡AL2`mçÙ‘ESгÐ%D¼ÛMîÜU¢> È–%Ù’†¦ ¤äre†RÄgóhš p]Ð䄣蚆c›ØV—KÃãÖñù\ün4]'[t(+¸Ú²jÇË—{uCðêØ–ÂïÕ—½¦j‰U(£X*195ÙÞ>žzþENöœ#1?‚P0°X‡pùŠ )ÃRÀøLbEÿ¸„²[ž=öý}}ߤ7'jÒm=¸ᜇ·¾}ÏßòÌ#ÿÌH¼²Á„Ç¥Óñò¸qû¼øý~ÜžJ‰î|.ÇÄØÄÒK­`&•'_Ê pa%fñ á€úH€†HÀBš­‚¶ŽõMáukg˜¦¦éhšÀmÇí»ôºú‰óI¦N=ƒ¦–ÊcÍim¼¬ÿ$Ž‚€ÛáGwç8Ò^`u½ÎÑy—GÝœœ0˜Li(–Ü·K§½=HG[ˆXôÂiÂùlŠøØ0³£¤“ œUÛ‘Û–C±XF)—.𸴅oê” 6õAJ9Ëüx-€j=Àjì¿RŽSyL“’í[:Ù»k»¶nÁqœEW Z=èØ ¯2—ÎV“„–\¡îüâÿø­Ç.y‘k›p <ðo_çµÇïáÜx’²¹dû=-±.M®Ñ–@e‚@¾lŸÏcÙ•/»¦IZ£EÕ¼z“«ÞÉܺA8è#ôùñû\ìØÕJ4záÊÀé¬I¤i'ÑèÅ·ÙèÍpî¥çqÛK+ gC?Í{ºhðdÉšnÆò D"nhÕÖ%ŸÙ¬ÆDÆ×ëa*cÏTJ£Ï9¶– ­­A¢‘ “m[¤fgHL37=Af~nÅ]Ù²r¹…¢…&+B©i)b£â8K¥°]‚åÄ –½Î©¼Æ®<çõ¸¹qïnï»C×Èçód²Y†ÆÆyza¿ƒUzÀé|KÝ¡·ÊžµéÄêb ? ïô?Éôði|.ƒù|yñËiZóÙ ðº´K–¶24 ·’³_4m”R”L‹ ×`=¶m‡l¡Äì|–±é$ƒ£3¼tb‰ø<·A4XÓäl"Å—þô› c¸ êc,¹ »ñúý Ïà–³»µ5È–p —fSïI ÎD"G¢à&êw¯hÓçR4Mê<êƒ|ÉZ¼‹+ _2ÉL܆¾(æ]ð¹ |.ƒ’iS¶l Mõ è¹ ƒÆ¦zêêhl¬£±©Žú†Á t*‡£É,§zÆ8yv Ûr¨‹ù—ÀNŸ£o0N<>ÇË/Ÿæ©§_"›Í ú …kú¨oªãɧ^Â0t\Dk¿^­ŒWÍ1“L3›w ºÖP–KW\&^‘'-“+ :\ìk—ܼU5JLN¦8}>Å|ÆB×£¯Ñ —›P´ž¦Žnºv ±µ¯/P ÉWe¢Í´uïdëžiéì& #-β•‚Åù¿ð×â BÕB¨>¶œ –™ E±T¢§²e±½«x"¹žàF{îØ£ß¾àŪÔ¤Þ¾o›R²6^xîØ¿ñòSßææ;ÞÀ|b–/?O6“c.S$™-bÚK“ÎÐ$-±@E¸Z¦ÀrÅy¹5ºôX(¤«»}MÎö PÈVܱ–¢÷Vê‹&1«&òÇë8°û÷íbû¶N¤&éí¦ÿÜ+Ü|piÄñ©y|(¯4ʱñˆ,R8(%H¨6¶µÇÐ/QOàlÜÃgäË:íuдDÀk(ž<¯89Zç‚7ш—pÄM8ìÅç½p¤z9‘æÝÛ= Ñ;0ÌàØ©TzÙ² áo™PÕœêßË´{Yý{!¨¡.Æ Û»9~²gA\¡8šäÖ?¹ë·_¼èàßä¨Í\)Ô5ÊFJ\&ã8•庺zn{Ç<ýØ#ÔKA}ÈC®d‘.”ÉÊ”-‡‘™ Ñ€‹†Ð•íÇ—NgÈesø+…>M_{§•R®Ùxór'xäèÓ<|ôi M§¥µ‘úº(™ÔÝõÄg3<~¼—|Añ›Ÿý0ÀÒ:¿RŠÉx³˜¦^cltžhCaß…¿J»‹ì¨/r|ÄÏãýAúg*çÑD}ŸJ– P0ÉçËŒWˆÊ04‚a7ုOÇíÖAA©lÑh8¸Ý.¶woakW'–eŸM00› èó"(GáV@ ¤£øðö×õ!¼IP›.@}s‡_…w¦F{é=õºn‰Ujt]GJ™ø 0t‰ßc xûݸ Ór°lëÊ86ΆW”Ývl‡ô2Àãñðã?õc -ÜX @Ó%.CÃåÖñxt|^~¯ ÕÄU‰Ž›Oe˜œœa6™áéçû9qz”d*O.›çù_£±!Fss}å¼B øˆD¢LÏ•ÁÊa—æ±(Þ‹l&tFLnl+.éÌ „T–ýÿÿöÎ;¼­úÞÿ¯s$y[ž‰W¼G¦³HB²€+”–ÙB[Ú_{o´½´”ÒÒ–{{ÛKi e•Q ¡PBX²éìx¯ØŽ÷e­s~K–ä¥e["z=ž8òÑ9Ç’Îû|öW@% ¨D¥ 8.ZòÂrS"ˆ S¡×©ªí¤îBº¹xQG~r89Éý+áa¤$M`j~.3§L&>.ž=f³Å.[ã°úʲͭ‘imï$9>aà„0!ã²e+÷Üõ©{µâ~D€ @RÜX €d1ÓÒXCuù9â P¾t‚ PSU1`{QÓ¨‰ ר ~l£RJHh(’ÙìPè"I“‘ØØþ »!¡!´4·õ­sÑÚh¦Ï˜NxD85Õ5û UF\\ÑQ¡DF„®!ھΎ¾3úî>iiÉ$Nˆ·¿¹¹•êªzd`„ ¬^·Y–ùðý¸ØØ„ @¬6œ°p×–khìBo0¨]pN¥9×3ÄÆjY¼h6Ë®˜KrR¢Wï©Á,òQYgšÂí9P‰‰ÚcBˆ A£èè1qä|K¦Ä²lzœRèÓç¿K²Œ¹Ï‡·˜-6Þb±Øž7›Í4µ´r®¼’óUèõ=vñ€þâ!‹dÆbVÒµSÒ“‘Í&ºŒÚzÍûaí“=ü¡WoÆ8˜1€q 2*–Y—¯ÖÒÓÕJÌ„óˆ!—¶Ù! IDATñ”œªÎÁ]ûi‹òc¸¼ èn5ßÚ~-ö®€ds”GßÏ3¦¾çL&3åÕ5œ8W‚®[‡Ù"1yÒds¿ÅTÙ®‡´ 4—NWoÞ|kÀÍ È `x|BŒ,ˆÿ Þ;::xíµ×øè£8p൵µ "## smÝ;{"¢cIŸ<ŸœÂe$eÏ¥³SGsc=ºŽ6BÔ"bµ„…jhjï²½F"C5Ìf,’ŒÙ"Ñc0£7š$ ½ø¸¥z.<Œ‹[Ñéz !qB"¢(ÒÕÙIOO7Ýݽ\¼ØABB aa!$Nˆ£·×DG‡Î¥»¾‹,a‘•4™ZpïkÒÙ¥ãô™ v|VÄþ'hné@–ebã¢Q#°*A&'®‡nsÆP%+ r̨D• ÒÂH³›[8X)öÀ¿×íïµÈØM?ê{ALt™©©têzèìîf‚6Ù®ÀªMop}ÛÎGOŸ>p@` @ÜDŸ À–-[¨®®”;I[[eeeqöìY:;;Q«ÕhµZ·‡UjBBIÉšÂä¹+˜¼p-¢6…‹­44^¤«ÛÑïúDÀh¶ØJ%YFo4Ó£7`2ôF£¦««ƒÑÄÅú&&'I[[ ]HttöÐÑÑE\\ jµŠø8-²¬¤]E’e,²„€ŒZôÜSìêÒq®¤ŠÏ÷eë{»)>YÂ…úfººt¨Õ*BÃB¬.Q€´(=õ=‘˜dµíâE¡/K üœFj\¨í½sx/qîp|ôÿe«Â6O%V–4£Ñ€(Y¥þ›{›Þˆ³¼ä¦&ýò³Ï>jýx¿% c‚cCþ®©©‰¦¦&öíÛGxx8999äåå‘““CxøÈC0ìQ©ÔäN™Cî”9Êq/TræøNÛKmå9¬+þLÐFЮ3ЩïoÖMT\h¦§ÇHFf²íy‹$±óÓ]¬¹z5m-Íäåç}±ƒ–æJÎW“‘•LtT™Ituëho¿òu³ÙÌÙ³•œ9[ám %:&Y®ƒY$}Æ2f.'~RöS’•XÀ€•Ç  c, (¨s@P%ª”€¡JìÛND’Uˆ¢òûYS§pöÔI,v½²lø¤ ˆÎƒb<&55•sçF^êK¯×sêÔ)N:… Lš4‰¼¼J J÷`[Þ¶p†Ù"ÑÔÑ…¥ÜâðÕ³XÌس Q­6†ì¼¦Lï7kªë¨®*'1AKnNGŽœ·E° &&œØ˜0ºuF.6÷‹CÿœB%ö Õ†¢ ¡½Ã@W·Ñë·?3#…uë–Ñ«7ÐÞÞESKU•u4÷t`¶X(+ú€Òƒï•LÖ¬+Éšµ”¨øT[,`°%Õ2 ¨$ ˆvb ªTˆ}AQEQT¡edQTj5*§Y’m‹X.\HEL >I+Á÷À{ ##ƒºº::IÅ Ggg'•••9r„ââbZ[[­V;d îP„††“–™Ïì…+XºúF2²§‰±»¾G™=ˆÒt¤R‰ÃF%I¦GoÄl˜1{±±±ûŽ‰Ñ’6)ŠŠ*"ÂCèÕéé[S« %>6AµJ ½Ó®éE0ËBD¥¹Éd”Hž…6:”m˜Rï`ìoˆr—öŽnNœ8‡Ñl&=-‰Óó™5s2—]VHZZ*•ŠŽŽnzº:h,?ɹ}ïÑPz $31‰)¤%D3ÁiIôá\4Ùá'‡ÔˆÝ› `­”e™æÆFL¦þá)-ºÍAt$Æ>vú³Ï.ª^0+Mc‘kÁwY€žžÊÊÊ(--¥¼¼ƒaøU}‡BÒÒÒÈÏÏ'??ŸÄDÏ‹edY¦ªì ï½ó îÁ`0ªQ1h3‚Àüs™2uò€‹A–e@sC%²,sæL%±ñÑXÌÝ:==}ëÈ@k[/²€‡=&“³g«˜:5 •JdBb qQ4µµ# ’]_½’ˆ, X$HžAb|8u 4·*7K•FÂbô@\¨ÊL”•™†)P0pâ³µÂZ qº˜ Œ‚(ú¥Ø£V«ÉÎÎ&;;›+V8«ªª,†1íííQTTäU 1$4”Yó¯`Öü+e™ò’ÓÞ˱C{hl¨àëMªë:”¥Í¢B S¡Ñ¨Ÿ¼½›cÅåÌ™ƒ(ˆÄ'hiiëB–dQY¯A•A¨«ï$*2µJ 3-†˜èPªêº0£ ‘0Ý»~\-˶oVfy9ÉNÅA*Ù®HT!‰2No‹R6òÒWHDì‰z½žÊÊJ›u Ó¹^£oH|ÿý÷IJJ²¥Ý $ ‚@nÁtr ¦³ñK÷q±¡Žã‡öpìÐ^JΞpÈtMZÚz¤õ½+®¤pZ¦]QDDÅ_d”Ý`”,”Uµ“—‹( ÄjÈŒÐPVÓ‰Á¤G &ƒàra‘«m®K†­¢JF%‹"eƒõÚ€<騼9DÙrÆ7è |HŒŒŒ$;;›üü|rss ùEƒ ëîäÄÑ+Úˉ£”#C·kÔ*dYÉ÷[·Y´h.“ ²Ñë{©©màôéRš[Ú U“•CX¨âÆÈ’ÌÙŠVŒ¥†Àd¤þiIÖã9/»òjþë៻ü7 4hîZkv~ò ¶}­T>#û `H”:êåÿþoוÜOH @EsñÎFvìØÁùóçÑjµ¶H|JJŠÛÝžàHìèè ¼¼œÊÊJ·‰:ÎHT«Õ¤§§“••EAA .ï'2JËåKWsùÒÕ˜Í&Î:ÎÑ¢=-ÚCKÓÀæ)“É2 7 ¬¬šÜÜ RS“HMMbá‚™œ/©d×®Cœ)k!16œø¸0"Â4¤'k9WÙŒZ#£ “1„?^w?›Aã‚8 (‹ýñUŸ+àŠÐÛÓ7Ó€<éè‚y‰‚ÅÔÞ[Û¶mãøñûˆŒŒtèþó&-ç)Ö@bii)çÎs»_Áû@bff¦Ûý Vš/p´h/Çíå̉c˜-vsSy‚@ZêDòó²ÈÍË$F…Ñhfû;9{¶¢ïØîì*µò0̦þ}9[‹V^ËO~ú°[çîlH%ÂS„f³³ÅÌÇ|à`*¿à0µ%zóŸÿp+¦L™’ ˜BšÁ{xòÉ'é²Ëñ†(Šddd››K^^ž[wS_âM Ñžððp²²²lÖAd¤k€Îèº;9uü0GŠörøÀnô=Ý`߯€ ¡a¡$&Äa‘,ÔÕ]¤ïi‡:•ZF­Qvb±X]‚°dÕµ<ôc÷ÀaÅàA*ÍNb`­üðýíttô @Q™2~Ízñ‹‚€Ñ¡Ýòüï†ÿ"ù!ét«d|tCŽQ$I²ívìØA\\yyy¥å¼a°@¢Uz{]¯AÑëõœ9s†3gÎØ‰Ö¬BrròÈ;è#2JËÂ%+X¸d&“‰s§säàíÛEsÓÅÛ÷ö¨­mm°¢R« ¥× C­‘Q©@ “1Àlq¼WEº¹ÞômƒDéÚ§íç(–ÒÀ4`ßO€€DGêòf'“Q'k„VðÞhlläõ×_w«¤×ž[>//Ï㻩7øc ±¶º‚#÷räànÎ9©ŒÝ†a+çÏ›Îê«ÓÞÞÅž}‡8WRb “ŒÁöÿµ×ÞÀ·¿÷Gçæ´u šÍ ïm{—ŽövÛë”Ô²C0¢Wóê«Oz¼€âk[ï¤ååån¥åœIII±‰AJJŠ×çæ Ö@bII •••˜Íž·óòò˜ƒ¶ ;™þö.Á¶­[ioo³½~ÿùJÀ±H£¶Än~晎!ꧤÄfÍŽ•TRŒNÐß|moð·@¢ÁÐËÉc‡9t`‡ö玲­ÅÁ*ÐFGqóMkHNê³´wt²ýƒ]ÔÔ]@eÌ&¸rÕF¾ý=ÏF *s­?oyçßÀ¾³8 @Hˆ€±".g^ŒE0µÃè×xãkÛ#‚Ǿ¶/ijj¢´´”ÊÊJŸˆ[^^ùùùMP–$‰Ê²ØÍž];¨©ª”ŽÅU+.cîÜ©K­_ljå­;©o¸ÈÚk=·À1 (I}+1Jü·ß¢ÝNöœ)Ç*ÖL€(„ÇýûÅ?´}Dÿ$  >ï2­YÖwÀØù£¯í ===TUUù¸5Ö_ hÿnØÃÉãG˜ÇK柗‰Ø×Åh¶H¼ûÞNÒ² ùæwèÑq¬8Ï ª[ðí·Þ¢½­ßØ}º g @6«â·ýã/mCÍ? €ø›¯í ²,S[[Kii)^‰[LL 999deey,n];LѾݜ‹À |íÕWàÓâó ÷— ‚€Yc ÀX‘š:/¢;ܤƒÀgüÉ×ö{q+))¡¹¹Ùã}ùjœº;Ø»ý}¯¼ü²C!Ð'ÇÏ €P!dÂÖמñü'óÚ™´(\ªëh/9æUÛ®$I>SÙ>`—|ù¥—,€ÇÎÚ €"jIœ¸}ó M£rb£È%/Ÿ~ú)ûöísxN­V“‘‘aóµÇãn _,_Û›qêÎØSŸ4i’Oç6 üû‹/:ÀÇGÏ ¬ À˜‘•¦Uiõà½<õÔS­žƒ1qâDÛÅ“šš:&ƒBœù¢øÚÐ_Peµjkk=ÞWDD™™™äååQPPàõÜ瀠$I¼ð Y€Žœ@°«P™å¤ß~y` ¤Ÿ˜—ª•#zÁ{xþùçÝ ÄEDDØš}rrrÆ%ðè¾¶3ííí6·§ªªÊë•—¦M›Æ´iÓ=DÛ«2€÷PZZÊ›o¾éQž^¥R‘‘‘a³œWæ+ÍדÉDEE…M øì³Ï:ÀûE'q•YJÞ±%(cüym»²`»/Àû ÈÝ‘Ýöør!POñg_Ût:m ÷ŠŠŠã ÷ÜsW3¬ðÌ3Ï8”o?xè+²Š€:$å³Í/z^Ô1N¦\y¥Z[Ójß €=¾êþó— ¾žžÛT^^î“@¢'K—ùI’¨®®¦¬¬Œ’’Z[«pSSS¹ë®»¼únX­€§Ÿ~ÚAÞ;P 8 €,ªR?ë•z6N¦p‹J›{Î £+ÎØwÿyãkûC+°$IÔÕÕÙ,w–.sƉmmm67!!! øä}•$‰¿>ý´C`Û~¥Í~Ì8*uPÆŽñ{|åkÛWðWà § UWW{‰O×ǗȲÌ_ÿúW‡À»ûŽv•€Èi{¶üóÂx§§¨ jsgZ`üÀ_ ±¼¹³Ô—/ñ•¸Y]O–.ó'þüç?;¸[÷Aƒ0†ÚÜ™ø‡8ã+W!""¶RÑx¹ ¾7û¿g¼[ñgزç`/2ò¤}ïn®¯sôÿºrÜ@›;Sÿ{FÃU¯fP"ñååå”––º½t™=¢(’šš:®DWq€wv Œ%"öŒ†«0žÍ>Ö)HÖU޽ $Z]Ÿ±\lÅœËÅÿ½«ì¦ ‚€,Ié¶¿åyžuœŒ+gÜ ûËcd|5SÐrôà»qêþHt€·wÝ0AÌšŒ¢ÿY3ާé, ¸"{ÉÀ ` þ·&šÙlv(õ´ØÞ´vwU`_b§nµ<-¨ò‡ gx볃@¶X2Š>|'(cE_@tU¶Úý?Ȧ³€¸Ñ:I/°oö¦‚ÏŒú8ugø×§ú\»™€fuæá7WúÉø˜KRœIF± &y€ÿxŸ ¾ ¼ùÃ\èw}*++½ú{¬QëÊK£eíüéOr˜òüæ'ûíbôYš Œ%ÚÜ™f@å °'E¬îÂøÄÚ‡Æ~üøÙ³g=vü¡œÀ`0ØÄÍ_×et€Í;ö I­Ê:úÞ[U>;èÈ`Ô¾{`ŠÌèûÙŸÞ0Y–mbPZZêÕ\€¤¤$òòò˜5kÖ¸µ5˲L}}½-ØØèysÝâÅ‹¹òÊ+}r^ÎðÆÇ{² kÔ)þ sÏzvÝ<@Mßc;@´ÃGûF@222ÈÈÈ`åÊ•´µµ9”óº…oll¤±±‘°iÓ&233GñÌGRSSIMMeùòåtuu9tÿ™L&—÷µwï^fÏž=*b6XK²,Iþtop™@€1§ (ê{ˆ@ý±(r‹‹cáÂ…,\¸ÐfZ—””PVV†^¯wif³™Ý»w‹8ÍìÙ³™={6f³™êêj›µc_˜3ÝÝÝ>ç ^V–3¶C@’,AcFÝ (ï{$à_iÆÐÐP¦NÊÔ©SÝ!æiPn4Q«Õää䓓Ú5khnn¶‰AmmíkG«Õú4`ÏàCIòú÷ï©7Œ«8Ó‚Rk°ÿK3 ‚@zz:ééé¬X±bÄοÂÂÂq:S×ILL$11‘Ë/¿œÞÞ^[ ±¹¹­VËŠ+F­šP¹þ¬IH À(`Îõ=ÞB±¬DH3ÆÆÆ²`Á,X`s¬vòóó™1cÆ8Ÿ¡{„……ÙŽ\€A h’`gßÃßÒŒö®B×è;Zc‹`â£8Ú÷°¦­bM ÞG.-`lqŽÃ"öiÆ(`*þ“f 28ý `ýäÕO À‘nü;Íx©2r0{d䀕].Í8û¥KƒX‘e{‘ý²ÝÜW„ÑudC#Uÿz›šŸpñäy:+k1ÌȨ ›0‘ˆ”tâ g2aÖl’—¯$iòè䜭ا5@þ“f¼Ôp€¾ç‚À˜3* ë9ùð9ô§7èî¼ôÔØÑBgé>ÿ3}Ï…LšFæ†È¿uÙËg"Žâ×Á„§¿è €€¼öÀŸÓ{üŸlYûU{Ü~­±ö4%9MÉ_~&m6Ó¾ù…”™Ý%ûIDATß¼“¸øÑŸÎcŸf òQÄ`:3êG¿ô°Ådûç³ P]|ìÙó¿¼¼à+]üΘêŽqü¿îçÕä4>øþïik»ÒZpø'ð3à ` J,!àÓ&~‚,+"àð4A[Ÿ}ŸÍ[xcÕè5y6¾{(dS çÿ}þ‘šÇç|Ë_Ö4ãÇÀ€Ÿ/×Zƒ‚À`•€ò€‡ÿëŸp…ÝÐd3{VÞCW¯g9]Aê­áØÜÀ óo£®ÖóÞÒR€ô ðcQøE$‚¸Ž$IŠ€ŒdÀt.ù€nçŸnyC ?ò:ÿÎÛÃÂî`Á crÌ¡pN3Æ£M¦¡Ä‚ Î`…@J €OÞùÃw¿î‹Ý¸Œd¨eÿ3èøï÷Xõ½Uczìáheð4ãLq¸”Ìd› 0¦(õ^ai{ŸãÕnÎÔ’7~“Y÷ÜFÒÌ<4 }]M÷RµåMÊ>:„EáÄdg¾¿ƒþC®ýéjÏÿ€Q"˜f«‚ ü˜!€¯/èz÷q·’ ‚ZË‚7öqÙFǶӈ”4æ_Á”~„©ºˆcþ”ƒÏŒ4¾Ëÿk ïGdÝwxtþc…}š1(àÒN3ʲÜáÓ·"Ü<–¹î Gÿ=§_~›®N×\‰ð¼¹¤_u×\OÞúÅhF³{‰ÁÓŒ“BÀ3i?”‘€Ž_¿€¼ú¹„]Ùâ†ÿ?u7‡`ææŸ¸¥ë üžÏZħ^wùâЗáüÓOðñõWð·„\ÞàgT›¥í¬iÆ-À¯€_ÿê{Î·ÅØ¾aÐR`å‡` `ñê]T®¯9~™÷‹N†d>ÀœÌ‘Íîú‡¾†y¤:@6Ö±se>=ö*³ë+ †¥½‚’¿ü’­—eòÊʯpöãÓ^íÏ]¬iƧ€gP,×%zŒ±ë°Š€ëkù,^!¨]_ S“ëºX GácsGÜÆÒ±‡=ÇFXãOÒñùòyï¬óÉyÙÓöé«|´z:/.º•ò#®»I¾"ÒŒ2Ü ÀàÝ%„¦¢víÏ£}3€+ꚺ´]Ùÿ{oØß×üh9Ç÷{¾p¦+tíß̶“ØòÀïèì½F©‘*Íè}Ó¶ëØ›ø²ó…OÐ'¼mIц¸´¥lôÎĶ¢Š¿†„ȑŤçðO1 á˜Þ`ëÿñÉùŒˆd¢ê/òʤœÜY;6Çû4ãO¿4ã€" 1<¶¯ X|ð™gÆ»6xÛÒÔëí¡lLMŠqÙPÇ‘ªÁ{JïüþȽ>ÆÒvŒOWæòÁ#¯ùLƒ¡°¦·£Á/£„ëÕbá÷ÇÒä4 ×$] O¶¸ñtçˆÛ¸Jâ´(yeÛê-5\öÝéÏIúóìüä‚GÇ#’I]±”ø¼I¨CÀØÒHûéS4:É• ¢däü/nǸlV¦ ¾¹ “‹F5öׂýÊÍ£f”Á*‚€ Ë äõ¸ ×’sç\xòÔˆÛé÷W‹¼<šBha,¼[5âvÿ8Nг÷AŒ÷Ü!$…ÙO<É‚6:HÌC6¶raëœ~ö9J><<¢ua1 }|SÃs<3å÷¤]}-Ù6½~-Ú1˜‰8à<èïfÜ‚÷+7ÚÜwáÛDÀÛ“'.i lÆÏQ¹Pcºð¦·‡²¡NqÍí0Õ|8๖'ÜóýUQ³¸æôY®øÎMƒ^üBH4ds´Ñ¡Ä¼ÅV@0 ÐLûÝ’‘7’Íì?Úä“ãÉ=® ‰¤?; àVÙêú½K»á%fÍñ¬€)tÊjV¼š›ž{ˆÈßÿè-?ÂÙÿ{”í«ðŒ6ßz?Ç_ÞJg먇í|Šý…oMšŒY ÈàÙ^ÿ”K_òÚï Ÿ›wSµ‹CAe ½Ý”bÙÔ@·‹ÍKsŸÚàî© õÞÇùʉ·HK9sá.’®žšÍc××Ù\…}¿ûK[|~,oj*°S6 èŒ1>!4‹µ_›<âvú¢ïÐÐå}ϾáÈÈYÛ¶f»ƒë³{UÚENòMõbHÁuÜpî 3Fq2`Ÿ«pèÁûy=?‘ç®aÿ^¡Ãg$ H(,>#ù7Ï®Þ -:>úîG^«¦Äõ wûtšlq½ö-$ç[nÓHˆQÓXsø8Óç¹^>í ]G?¢è?ïàåÄd¶ÞûêΜ6ª”À`©¢/gÃOGžË×þ÷[8SáEM€¹Sõ®¯ n¹]O§…/Ësç¬\B™ÄŠ=G˜œîËÂds•/<Î[S'òö]ÓtÑwYnÇ0¸-ÌŒ1>^xâOß%kÄñ]zv.½“n£gýñ]îÜò,1dˆâ›Aëö¹¹‚šÎÔiã°±d¢ö¥Çx##=ñÞ ó5A `|ðé».¨X³ó¨G¨b3սëD¯Ùýßúê[.o«ŠYîx~¡“†Ìå;#Æù¦yÉß uy` ÿ¸ågè‡)H â:,>'tò}Üô?GÜN·ë÷¼²ä^šZ\O_évüˆ}ÇGhóµC“u­Ó3©1.ºÿ¿8’þç™}ÏFb&¸VeOË›¿äÕ%÷Óã£&-ŸÌŒ5¾[Ôž‰ßýWÝ=cÄíô_äÌìýË»˜Fèé=þ*o®ÿ_·Î#æ¾™žËMv-gªËfYψZwKŸ‹;;ùʾí,yèëLta`Š}Ñsüóê_ŒI'^ ›ø#À0zŸÊ´ç±øæ‘×î“t¥~`ϦÍⓇ~GÕîãí*õåÇ(~ø^š'n.>:óºŒÏ%Þ:ð¹Á0›µ}‚ &îòuÌ}ü¯lªhá–·ž$-3Ú¥—ê>y”­<1Ê'øÅ&€`Å_eÞëÇXrû,—677žàÔodËÒÙ<Æ3 x&:Œgsç°ó±ÝÙ¥™ø% 1c¾²Ö¥×ëïwëx~ƒ &yã·ÙXR¼5“\zIõƒWÓ:ŽKl]€/b8s_=ÊÕoT–~rÙŒ¡µC·çå­ézlÐçC2LTèÈU‹æú¿úMß¾'š$mÙëRÌC6ÔñÑÿœƒ³úbÈàòW<ÈÄ“ÑÍy¾Åïýx§y‹:i«oÌü—ªh®X’2â>¤Þ*Ž×¸¹è©Ÿ!„¦³âÑÙ.mÛúŽê¹cþˆuS€ï£L޹XŒ{‹ZƬû·ÕcáËܳÜE gñŽ¿2L*2ýÿ¾âÒ®N?:FcÃF‘è›nui;sóÛ>)ÓöuÐðwBP†BÜüeùªëP¦ÇŒôé©´S¹ìï;¹ëó×(Xžïû“¦?{YÓ‡/´ ›þ+r'ŽP°tüãkŸ+£æ»¼íÙFÿÏ|ø#+>(NVÿ2~ú`0Üå½dk?;ÏŸ¾ÆŒK\(2‚&žù¯cå=#§Adéß®q+I_Ê{ pߨâzÙu{ÙØ¸<_4o pÀÇE$0¸E ~\?ì½ò6V¼µ›û«qÕ?!cAžGîAüš¯qÙJÝ>0ï?ÑþNAÚÈ5ù o ÁÕ‚ÆýÁãGˆT+ÿåòþ$7вÜÅ¥@€fv&àh¢Šé}«QÖµ;‹2cî4ŽSgÕi3™öƒ™LûÁ¯07–P»c5;÷Ò|ü8-'Ï¢×9^€‚&íô¹Lºj5ùwÞGúÌd÷OPаü½‡)™ýа_N©·šmWÿ‚{vÿŠQ^úÏm.ÜsûV²m~`Öµk‰I ³ý^65qàöw\ÞŸ76AÚ/, 7õ[|õö[X4.q±î„ö\'%p¸eàd9Šœì—çP'å“u{>Y·Ãöœ¹³}S’ ¢ ‹&"%Ñ'cØÌ±îîØþÂÙa·ëÙûkÞzp7ÿîïêc¤žjþõ5ÿzŽ]‚š˜Â$NËE£2вk;M5Ý.ï+.tW;þ¢° ÀvY&ëã]{"?Þ¥ÌÏ‹ŽŒàŽ[oä¦k×R8u ¡¡¾¿+hP&ÌNF ¶ ˆÁIà ·Tkã‰ÖŽÎ0ܧw’ûQ.eµÃ_(õOld[Ô®ý™÷S‚F ÙLGñ>:Š÷¹ÿZ1ŒÙ“\«5Ôél  £¬ø‡j1<¸ eúso—®‡?¿ð WÝ|§/àšÛïåõw¶ÑpÑ7óü#Å2¸ø-ž¥=EÐLdÍÁ7ˆ ¹û¯üç×±ùÞßÑëåB¢þHä$&Ìw³ /%Öh-=Ð ¼¼”8yr´ÉvŒt#°힃‡Ùsð0q±1Üyël¼f …S P«}ÿ§[ÓŒÖX~=p ÅB(Á7ÓhQ§\ÍÍ»~ÏK‹¾‹q„‹»á…ùûÎ÷Yö·§™ºrR™ã€–ɪÝ9Þ§°¬àLó¹s]eÇ_ï,;±©³ìDœ€<_‡ÚÚ;øã3/på _"aÊ<®½ý«¼õÞ´´Þ¸)kšñ[À¯p-Íè áó¿Í—·ýÊ¥yÆòOùøª^]õeNoÝ;¡lå•þSa¨N^ÈU{“a< âm ƒÔQvâ0ÊÅÿHLAaŽl6 °Xhv<ÄHMNâžÛnfÚ•äå }¯‹Ö4ãK %np¨ÅûΦ¨5ñåÃxãêÒm¹9¦uÇ?رã|ŸCæúkH_¹œ‰³f›3‰0­"QÆæ tž?EÃÞÏ©Üò6•»O1i{9Yãäo‹Â’&?k>×obÆW7®ñ“{˜˜‹äI{ƒvÒôx!L¼J–… (q<w]EÖ­XÆ›ndÉ‚¹h£GÿËÞ…@<Õ÷¯7“ï²ué&.4x^'¨Õ`± šbL¿šÖ¦ú:Síó×t×–@Ï:pœYû¨Øº•òH·nø¹úbh*…¿yš¥ÿ±Þë/íã(‚ì*¿þõ¯m?K’Ì/¾1p#E¥Å׆é'ò9vtÖžjí(=±¹³¬øÎÎ²É ²,,•á·ÀyI’xoÇgÜvÿwHŸs3–¯ãO¿@Yeõ¨5…D Q\„_¡¸ «ðlQ˼õl,?Á‚[çx|>²Ù<ê 0ª¨426}导ËÝí¹îÙG™8ôt Épãÿ¹WoxØa\zï¸äÀ‘Í–®òã»»J?ÔYV<‘ËAþ%p„>«¼¦®žŸ?ñæ®Ú@”¹ÜýòÙžtë\ŸîëÖ4ãuÀOŸ£ô.ÌÀuM Ïáò×pË«¿&1ÁÿýcAKæWæÖêSÌZ1üðÓ¶wãëþ 7×HõW…088ð‘:KŠt–øYgYñ< –DAo•ž,‰·ßûëﺟ´Y‹Y¸n#{ùŸÔÔÕÚÓ>Íøë`9àÊÜßäÛÌmu¥,ûáí„ûp‰¯ÑB Ïfé‡ÅL)þ¯ëÞñk6wë•y™MP†Àê*t•ÿzgÙäINYà\i9?øÅãÌX¾Ž¤é ø?y„ý‡¢ïùõ!(ÖÁMÀ£ôw3NfèRMcÖï^垆“,{ð.bbü»dVPÇsågÏ2BF£é©^}Ç¥BP\b³¥£ìÄáÎÒâG:ËŠç[$)¸ „Í(1< F/½ñ6k7ÝMòŒË¸rãí¼ò¯w¸ÐÐ8jdƒ¥ƒŪâ¦0ë7/rgs×½øyWÍõI'ãh I¹‰«ïa&£láе÷ŒØP4f›.t'é+@"++,FŒ¾BÅUòõÈL8zâßzðgDE„s禛”åiS ñý]Øå4£:ŽÌ»~@æ]?ÀÒRJåÖíÔ~¶“º;i©t}lùh3é^!äù…Ã7™›¶±í/gØøíicxf_,Rµü§šƒe(–»‹Ìã¾;6±ì²$&Œâ¢›}¸šf4^¨ ­¼‚®ª*ºjê•@› "j‰ÌÌ!&/Øé“ Üpt' ˜{ª™k¦ ¿|yéõÙlßR9ì6bätîn-&rˆs wÒ€²,óøãÛþ/É2O¼00 (#-é*;¹×å“ð‚€é8¢ø#ðǤ™3#{zX‰,¬×©{‹³·¨¿Dù¾/oâºu«˜Z‡Zåû`5͸Å:¨¤ß:h°Û.$5›¤Ôl’®ðù)xDæ_­÷ ;úAÒâƒgÏqãSÇîÄ%8,ˆÅź®Òâ­J ±8]@ž/ÈòCÀú¬ò¶ö~÷Ô3\±áV&Ïå¦{¾ÉÖwÐÚîú*Âî ¢Œ@»ø ž¥Ç MÊ]\>}d ©áÇ÷a–ü$`øÛgþEƾ<ù·1“gfËfùZ®®Â>þ|/®X’¶åµW197qJ”­iÆÅ€¨@± Š6ŸÍ}f¼xûçÿ~Øm,{ølW=«®L£³úâ´Æ‰ŽsÅe'þÔYV|ugz|tE¢|ںͅ†F~õ‡§¸üêI˜2/}ý»lÿd']Ý®Êpû4ã/pL3ºâ˜ˆ1˘qÛ:¢|˜j Ÿ÷yFnŸ*¿ÿ)ŸóR" ý–/:1…9XX% ÂdVVÈÈHKá«·+±ƒìŒI£;®èAik¶?v\§¤§i×TnÝJÅ»ïÒxþâ€M\ Zéxã:^Ú4ráϪún¦º°~b0ØOPüœÔÔy]¦«…õ _#À€5³T*‘ëÖ®âžÛnfþìB"#|Ýp숌’Z´ŠAÃw3êϤ¢O ªwÇ,Én æV^M¦u„†¡˜›·rçæõ#îÎ$™ßü&(Aü„¨¼YÓU’´^„ À"qã r³¹ÿ+·±vå2ÒSSFÝ:°O3žôÃl+uÖPóÞ6ô+ïdŠ ëX¹øð\^ìè°Ûš ÜÑY?ât ·@–ù`‘$þûÅͶ“yqWé æ™/A`âsg¤[P]##_ƒÌU¿×áá|éÆë¸iýZæÍœAXèÈëíyƒ}šñPã«ýêŽñlì¼ZM}ê47tÏøÍo~cûP‚ø)·¨brÏÎFî‹(ýŸïœÂéܵé&®^¹Œä‰Fý¬ì‡¦žC™ªì)e7æðÞÛÃn£Š_Ç7š·;yy4 Pçà JTÞœ *ÌWö >Y Xs,*"œM¯ã+7]GáÔ)h4£›¶ŽT÷4Íhn|•¿¦Ü1bçå¬CY6ohq¹¼³¤ø€‹»õ‚pI X}Y…õÀ\ùìçÍœÁ7ïþ2+¯XDBüðkú‚”µN¥ ©>G—ç°{×ðV@ø¬ßñµcC—$ Ÿ \‚DåΜ(*““׃¼šAÆ ÄÅÆðµÛoåÆk×R—3*%Êö¸“fì9w@É*lÝJõîXœ«뛺Ébʨ€$\ÖYqü ‹»õ‚pÉãšu°jébîùÒÍ,Y8ÔV`²âNšÑÒ^MÍ6E *·JwßZˆq_û„¯ümÅ ¯ @?Aâ@döŒ$•(®í³Ö0È'©IIÜ}ÛMÜpõjòr²Feв=Ý(k2Ž˜f”zhúì}*¶n¥ê£\{ä ƒt ŽŠÈâÂÎòcE.îÖo @¡¹òJutuÛ刬dyƒX*•Èš+—rϦ›Y¼p.ÑQ#¯Zì î¤%™A³Aè'Ø dh>ûÌÜ»QÄfÍÎ’U–52â*Ö‚ µX$¶ïØÉö;Ș”Ê7îü2Ö¬`RjŠÏ˜¬ÝŒ9}ÿ·¦[¹y, æ¨â Ä3Zóœ7Q©Dn^5wßv3§M%*rtK”]M3ކ Ïïëö (‚@Ïp²b&ÏÌÆ,¯V¬ym±H¼þÎ6^g3¦pß—7±réâQ)Q¶_¹ù&øt|º €Ô¤‰Ü{û-\¿v9Y™¨Õc¸ ªÙ´‚+"³¦'«Tª5Cõ,XK”¿ú¥[¸lÞl´ÑÑCìix\µT’4«­âd±GG‚@€DWyªëúŒƒt4Z,’`_¢œžšÂ×ï¼ k®"=-Õ(·7 A ÈލܙU‚¼|¨iHj•ЛםãîÛnfÆÔ‚a˜\µ,²}7v—\ÅÏ @K1&·pNŸu° XŽÒS€ ,˜=“¢cŃ"xWFþu Ž·€ AúˆÌšž,ªÄuÂ:V#3ØÒÄfß’‘ÿˆ+9€ A† ¦ 0G6 XL®€ü´E^DS(þ?· ›ßXJIEND®B`‚gImageReader-3.4.0/data/icons/48x48/000077500000000000000000000000001417507262200166635ustar00rootroot00000000000000gImageReader-3.4.0/data/icons/48x48/gimagereader.png000066400000000000000000000066671417507262200220240ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ lIDAThÕ™}t”ÕÇ?Ï3ï“—Éd&™0 $“Ì$$ä… AP)hŪxvk«®Öv B]=v‹Z»xJ×SeOYuëÖº[¨/ˆŠbYb”‘ ˜&™¼’7’L&É$™ÌÛ3wÿb((Úî÷œçœ™ûÜû»¿ÏýÝß}ž{‰Z°ì¶+¾5ÞÖÁ¡HgÿÀvIð–18X¹mÛ6%VÛoBR¬ o¾mí¡]o<;66†ÇÓ»±‘•Ÿ„»ûj}#/ë ò››ó›ß„³çRL€²ëo]sdÏÎçÎ.‹F£ ù|tuuñIU µ žá@è­h”×ãÕû·­_úú\ž¬˜Å×|gMMÅ;ϯN ¤··‡†Æ&ŽÖ|9BÚ¬ª]O¯ÿ—ŽKçîTÅȽòú5õí™ÐÒÑÏèh× dy² !>Ÿ¶'¨­«§®©µ;*±S­Ó½9è۷jÕªð7 ]víýMGÞþì²w?øœ/V Óª)3“…ó,(ÍÂjŽŸÒ> ÑØÜD}½›æŽŽÑ`8òοÅMؽvíí#)€:V…pôÏX0ápU ‡«ZÈLOfá< KÌÉ$IètZòrs±Ûí”xâš›[nîèê¼Ù;æ«}þù—­YsçÀ× „ÅtµuziëôòÚ®c$%(+Îdá<—ebÐ뉋‹#=ÝÎÈØ6›vNmSû„·J’4í>. ŒL1>¦¨È¼|>cƒ vuòûÏÜ”ƒ¾1ö¬cïÁ:T*™üó 3˜•„99™4K2}ž[žþÏß?üêbbæ€uö¼÷}yì…³Ëvî«§ª$%B8"H1Œ‘žnA’%öí¡ö£#pž1ÍÍJàŸt * ^Ùµ'¤Òjæ¯[ýÚ‹/¦‘V¤Êƒx::¨|ïí«eïîOq{õèmRÎó¶÷ Œ©©©\YR  ¶¼ð š¯ zޱŒ(ÐÐA›`Æ–iÇj‰ÇéJAê‚éùy{ yes±¦Ï˜bÓœaG¥R¡Óé(,ÈÇ’WtÒyäbbæ€N)‹K4°rYÝ'}´XõŒ†d¼A¤'=;f|0•€F<ÞÁ™ø|c4VG$ÆßÛ…J%£R©HLLäÛW/äåïþ|ý¦ßîXÿO«¿¸¤ç’*¾lð’acaij•L0¤ÐÕ3ÌèX¾ž²¤1#žÔ~¡§±GÐÝÒŽ¬5`ÔzÐh´ã¨ÕØívæçk?>^÷œâÚ Y•¦0ŘV«aNÒfzÙø:d¤j¹j®•Ô5x5s\fú½côö890Llj&Tñf–¬øƒ/Jo jµ Y–1 Ì›[BM{ÉÏžþ÷UÀo§ pQILx˜O?ñázJS{I ÔÒS¹ƒÎ#ÿKKÃIÞ­èæ³º¼ƒaâtŸ›ŠÕÁ×ÖLWsrx •JuÆ YÆl6sÃâ«„‚O?¾acút]™ÆƒLLI_g5µïoa(·”M/ÊŒ9˜õ ôù \™êff¼Ö+ûÚ3ii•Œ_æ$èó£ÕôÑ^œ-o—“•žÆ¬©ä92Ðiµd;Ìž•žP×Öý ð½Kp.I(ŒÃt5Õà&ª ;ÝŠËi’„ݪan-=r"¹Ù<~Š™ôÜ L–Åô´7ÓRYM(– Æl61kF…ùùÔŸè¼ãá_üÛ–O<¶;¶/1”]ô_Óñ—Î.«>ôz•–ÖLF ‘(hµZ2fÚijlC§UŒ òs …BÌ.È!%-{š‘ý­&NãH1iòô¥ï㋺úú½ƒ!ì)IœùªŠ­_¿~ê2x–Tç»  3ÛJ}ðþ[Oÿ¤eä`µ¦b‰W“ž–B‚)‰Î®“¨Õ*LI&A£–i;ÑEsk7ÇŽ}I[k'QE!;=‰Ë3ƒˆ¨ Ã«!-ÙÄÍWæ1'×EZŠ…H$ÂÉ^RTIQäÊ#>l<Ÿ<…¶mÛÆèè(.—‹‚Eß'##ƒîv7Éö”—ïBV‚äåºÕ*ú0è4ø"¼^Ýú.¯m}³ÅLaQ!£"Q| Z­ £ÑÀ¬ ;½›%‰Ž# (i±ü‰ M^Fï¾ûn†††hnn¦ªªŠ;wb³ÙÈÊ*âgO݆$Â|þéÇt¶Õ’—%àF–eT*¨ww‘7'ŸOŽgÏŸ>À`4ÐÝÚÄí×=V«Åh0’˜”€QG"1Ý»àtwwc6›)--¥´´”H$B{{;¼úê«È²ŒËåbÁuw’šbåËÏŽòi徬9J$¥¡¾‰d“ž@ ÀèˆË©áѨÕ z‚!F£EQboÞ¦0ù©X]]M]]©©©8NœN'‡‡ÃÁÒ¥KÄívsøðaº»»ÉÈÈ lñ-|ÿG3èíãðÁ¨úäctCaLI*tò™‚£Á@D‰ _€Éºé¦›¸ñÆéééÁívóÖ[o1<<ŒÃáÀår‘““CYYeeeŒÑÚÚJkk+ >>‡ÃÁꇗ"åøÑýø†G'l«d½^Á` ¢(„BÁ˜«dLé+¯uuu$''“––FZZ‹-šÈ‰ºº:öìÙƒÍfÃét’——G~~>ùùù“ ÷îÝ;]\v9Á`N€V£A¯×¡(Q¡¯!^¯—ýû÷‡'¦Pffæ9sbóæÍ9qºÞih¯×‹Ûí¦ªªŠ÷Þ{»îº‹ÔÔT$IB«ÑUÂÓ˜B1C”è,¹{È]½ù«å£££477ÓØØHKK V«—ËEnn.‹e¢^__¸Ýn¼^/™™™8N\.z½€H$‚J¥B’ÆÝéééå¡Çÿ•Ž>ï¾ýúK_íûlM;}À1`ÄÅÅQTTDQQÑŸ]‰NzJJ .Äï÷ÓÖÖ†Ûí¦¼¼‹Å‚ËåÂáp–vfÉ—$P”(¡Pä/ÏÓò»O]F ïÔU$ªÕ+Ñu×]Gww7n·›ŠŠ B¡«V­B–eŒFãDN„ÃaZ[[illdûöí¬X±›Í6Ñßt§ÐEíÙïóñiF²,“qŒC’°ÛíØív/^L8F–§¾µk4\..—kj’D$zé&ɽu+{ï½% Înç²uë<@;P$³OÁÌ š‹Ú«_ÂD£“"pèÑGQ–ïÞÚ`àåËéèàª_í Ÿœºd ‹q˜9ÀÔíý¹%q:”K—§åkmEk2‘yÓM®^MÕ3ÏÏ=$ …àà z‹…f x°pfªÍŽÑy4%¬ÄŽÀt¶”“" 3™ÎšÓÖ’D4JãoÐQQÁïív~gµòbJ úSýýô‡€ÿÖÏç:U¢QÂáØ.xO<ãê«  0Ò1~ì/«ÇÇq¸­ €×®e¬·—6ð÷ûö¡ƒ”ßwá‘6çä°ÿÁi//'¨(ÔoO÷éN$‰h4Šržƒå‹({üqTZ-5›6p²²£Í†PP”=öÉ,~öYJ~ò†š›ù⥗8´nÈÉ¡iûv¢@+Ð~ÚÆ¿3„§‘Ó˜ü6š¶`Ëvì á•WØZVÆñgŸE¥Õâºã$• ½Å‚¬V#Ä™f3—.ø­·XøîÑ£d-[Æî•+éÜ·ï<}_Â)4¸(ò—-ãš›™ÿÄ,Ú¸‘;ª«±0ë†ù|xª«Ïkϱ|9AýÿxŽ»1~B±Udéø»v7_Uv™c¾-UºBߢuhµÔ/_Îç@ g2ýŠ'Ÿ¤õw8úÔS\¿e *½Ί† 2ÚÕ…÷‹ñDé9iúþ_ˆVª²K®~è‰_lýðàÇ#>ß°8­a!ħBˆÍBˆG„ß«®I.—°‹¢5kDÁ}÷‰ÕÃÃ*­VhM&“Ó)V>,B< „xÿ”½>G\»|…0åýøkA0åe_¾ôÖÇ^|ùµÖ–¶v¡(ŠBEÑ$„Ø©(âž;Ä܇ßÚ´i !3S¬ …DÑš5ÂRX(þÑã™àù&&ÁÌ*2›œE+ï䉊‰ŒŒŽNDÇ#„øHñb$"–üú×"ï®»ÄBˆûý~?s¦È»óο>À$eeé%7,ºå»ÿ½åõ7}íÑ !ê„o!~.„X¶}»Ð''‹Û++ÿ†¾¢8G¡-­hÁ½6þGÕ‘cUʨß?):åá°ØÐÑ!šÐ  dÕ_ÛÿÉZ²D]rõßýàþ—^ßùŽ·«û¤ˆF£B!†„}§úûÿV¾"S^±cæÜ+×<½é…šêÏj£~ÿØÿ/€³eξÌdr¯xdý/÷=÷»ÿñ§]q(ÞU˜«Ýÿ?ÞrtXrrIEND®B`‚gImageReader-3.4.0/data/icons/angle.png000066400000000000000000000013241417507262200176600ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“‰IDAT8RMKQ½oÞ›—Q3ik-IЊ 1ŠY„P®E]T²nºi þ‡6 WîºèA7E\#d!t‘ÑT ¶¤†´éP“4$“÷n7&´V[ïî~œË¹ç€[F<ç×ÕÉÿ€Édò¾”ò"&¥”Ó4ï+7çææX"‘x!¥ü¨ëºÛãñ¬BÖod°µµUCD X,B.—ƒ¡¡!‡Ã000ívvvv Àðððùòòò ë.@DRZÚßß×[­[XX(ƒÁSÎù7ÆX‘1ö¥R©ôíîî®ú|¾Ñ.Ž] t'›ÍÂÙÙ™/6"‘H™sÞ”RªBNqQJ]‹‹‹Ÿöööóù|obF¨¿¿ÿÀ0Œv8n_jÃQ.!„†ˆÚÒÒÒÛ|>†ax»"z(¥Z,·Û B©‚I)U)%GD"jRʾX,VJi €Z–U˜™™‰ !###H)„¡(JGQ” BÈ´(¥ JiCÓ´z­VKyƒÁà{ Ùl¾ÌårP­V‰‚^epy††ˆ}¥RéÞññ1€¦(ŠÞ{c*•ÂF£!çççÛªª¶8çuUU«ªªþPUõ;¥ôëöööèÁÁÁã±±±»'''LÓ´{Fš˜˜Û¶±P(P!ít:=–eù×ÖÖžX–õpzzúi(Ó4í?|Àû999©§Óiðù|îN§ã.—ËÞt: ¶mÃÔÔøý~/¼#„œÿåÄn¾²²òavvö‘ã8õl6« !Þ8Žózss³~åÙ•Çy–Éd2œó´ã8Ï766>_ügÄãñÁÛÎþ¼&+ôŒ‚1cIEND®B`‚gImageReader-3.4.0/data/icons/angle.svg000066400000000000000000000115471417507262200177030ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/autolayout.png000066400000000000000000000021351417507262200210010ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“IDATH‰••]hUÇ÷ÎìÎî&Ùhš¦mšjkú±¢F…D¤ ä把-JILó X1PT¢¡‚‚/¾XkÞlÅ'?`I+ ´¨PJ*6% ‘|µ›ÝMvgwgîø°»ÉfwðÀpgæÎýsþçž;‚íÍ”ûP¬óÀ`n`¸›™s²@Š(å”àU ¬UˆM@è†y/õΞ߮;Èíµ‘L倆^;ʃŸN²$z°²@ë§§#°Î¤T $ÍB cŒß¹ÆÝ¿®òï©NÄ"ùÕŸ }ñS ýÄA\_¶°;PÁQNˆÏ¹²)ƒ|ÂA8¶eâX&ÊN"Å\Ìã`|PÆãï5ˆ¦°ªü¸<p1N Åh.«À” …BY ìT 3b-¼€iFHZ6q åõ!½õèÞUô‡%@ Ã~æ<³›x›#M‚ áX$Ì0¡¥ –fGˆ®,€JN’BeB«vdîãJ±p vZQšLg KV"JxyŠ•åi±ÖOSQ‚_š{ià–ìzå Ï¥4 ¤–5—†a¸ÜnÜ/¾?½OŒðÉs3¸Њ:¨ß“—^盞cÔ®«[lSGA*ñY>«íããGû‡œ´žŒ23j9σ$Ô8£R£QôÓT0àÏ/v61Àh®ãØt”“ÉAÞÜëÁ£tð5’n; j”SĤ‰$‰!%~LÀM±8ßÄ[Íü"%M8x»ál#ø^"Ý×ÜÇâ £¸˜=¨ì¢}o]-œ÷¸yþÀn<ËQøg Âaß‚¿YÅæíÜæÊ—`[ël¥C“|zd¥.¸t­’ze¶!I)ŠÛ¢—î-SßÞÞÄ ._ìÃçu§ß-†QË•âg.‹Ë‡{97ÙͰ¹¿0r)"v0P¾¥ƒö&êt›uÕøË¼éw‘Ü›#ü#ÁòîŽ ¡è™­~îÂô?&dÁW@g;ukµ•”dáñŒÍw/G©)ñF£j9Ôï¶aE°ÊÏŽÊòt,Ffˆ9Ðuñ*7òפOß <Ó°[9k6—Ê=ªÙ‰  O³f;|ýý~(Ï=ò3Ø´M»Zèñ¸i~d%ÙâŒÏOX/öóQ.lså‘Å$êlá´&y¿®šR™¡O.‘ˆÆQIN“óÌ…ç^Åj t´ò´€ u5”èýîG°#„$m}˜E¥)yÑ „â)MndÃĦ£hî`~+i "Ï©Åz ë5qJH¾Û[‰wf™„R¼Ú÷;Á¢ðãCQ¥œÒbsYÓ¤XµƒÍ't{3õgZ™<ÓÂÙíÿûómn’O?hâIEND®B`‚gImageReader-3.4.0/data/icons/autolayout.svg000066400000000000000000000224471417507262200210240ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/brightness.png000066400000000000000000000007751417507262200207530ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“²IDAT8…ÓOKÔaðÏoWÈab¿@oFxÛ× à%\!ƒèôz¢{·N :¸E™–J=lõ–Ø!©Õý­ÖÁu:ì©m``fžïÌ33Ï÷aˆD¦™•a˜~àû8”ÄDˆØ®4>D£U8׎§šæä”Š·µ“¼.õCYfV´pE窚 ÎTâ«)pÔVÄSS¾«Èdª»’q MEM;šfœy~{ç—5P÷\fFfÇOÅdZF:í%“j±k^ÞKœB²àVßø§6ä-%wÕþ¿Ø}‹Qñ%–íÅC ÿÂåâD)2uÇ"êÝg{‚iÜhÛâR<ñJÄg™•œ0:xu×ÏõE[vr{Ñÿ˱lØÉ@Ò®Tâ²ä¦;g•0f½ä~o‰Ý6ãPê’²¼YZ$‰×Jñ¦»“ÔUs®(Çjl9ˆš)9# òªò-’¸ì¶QKàš¢1Uã ®÷‘ âÄz‰øf»ŸÊ±%b«÷bUŸlÇžˆc{#„SyÎÍ'“}$™hkga jÆÌ·)i‘m¨DÝZÔ½†ùäÙÄb·îÚÏIEND®B`‚gImageReader-3.4.0/data/icons/brightness.svg000066400000000000000000000226051417507262200207620ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/collapse.png000066400000000000000000000003641417507262200203770ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“©IDATH‰íÔ½ Aà1ìÁÄÄÐØ&ÔD ­ãÚ°«ÄÀÀÄØÄ #3 nƒóðüc7Pn`XX;oÞc‡]4%@#œclÐI%}ì0O%-,°D;†@Õ܇rGS¬ÃÝ ð]¬A†ë^Ð{QSÅì™8ûBGŸà®¾Ü]´”—|Æ #œbG´Å‡—‘ì'ÿê°{K€:ìê°û¿v7ÉN1UfôBIEND®B`‚gImageReader-3.4.0/data/icons/collapse.svg000066400000000000000000000144711417507262200204160ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/contrast.png000066400000000000000000000012011417507262200204210ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“6IDAT8’ÏkÓ`ÆŸ7oJ’.»6®0ZGŠÓB@¼¶^„ž&Š;‰¢=ÏûzQ†žŠxt€ÖK/"ö"ñÇAO…5n£¦°ÃhmóŽ$íÚ&ñbGm;ñ Ïá…çûáù>¼sfmmíœëº›®ë®,--Õ%Iú> Þ•ËekÚK'ù|~U’¤/†al^ît:(¥tqqñ¼ã8ÏUU]‘eùs»Ýîw¸‰å[ÕjugooOcŒÁqœçyÜÁÁÁûR©tm4% !¥ôÛòòò¥¿blll蚦y±XÌF£ÁXªªñxüñ¤W×õ»‰D”eY=I°»»[î÷û DEŒÅóüL?µZí%€7”Ò'À …”a)Qéäòi „<pÀž1v_„‘(Š3nß÷1gÍf³«(ÊGWyÛ¶W9ŽãDQœ1ƒ¹ ‚+<ð¿Úh4Þš¦™ŠD"£ããc~aaák*•ê0Æ2GGG¯»Ýîƒz½þë¤Ìy7®¯¯Ÿµ,k³×ë]ŒF£F8þÄ«T*gÚû2Úðœ'IEND®B`‚gImageReader-3.4.0/data/icons/contrast.svg000066400000000000000000000077711417507262200204560ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/controls.png000066400000000000000000000015361417507262200204420ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“IDAT8µÓÏoTUÆñϽm‡I;#-¥#tZBÔ@1±š(Ø€@c‹npA…btUؘþ̨k&n@â„!¸n˜°‰H­M]8Š•¡3Ó†ëtŽ‹òK‹ñINrß÷ÜóÍ›ç9‡ÿ °hOX´ç¡?MLLlÚ¾}û¥åÁÁÁÆò;wîühhh¨÷6¨ìh(;~—Pr=”T!ÌÉ„EgBÅQˆáðáÃc“““ßÏÎÎ>S©T⥥¥¨ÑhŒFQÔEÑ7«W¯~²ÅÞ­nŸ`*ÌÉÈKÉK‡ÏeÌ›R´»!ÊårñéÓ§o‹ÅD!†‚«W¯F0444Q(&J¥Ò‹á7½"Sþ4¬îk?Ø„`Æœ¬­².Ë‹6[ˆ¯]»ön­VKtuuÅ©TJ*•ú›E333'‘ÄŽ¨ßÆÕ]¤t9ä†Cº\qÁ¼ñh³ˆËåòx{{{¸½Œ€©—F¼•­Rð˜z½'å”E§\qLÁF …PR e£íÐÑÑ¥ÓéÛ¤ùùù{ÂÛÄè‘Ä­|š›ÚhU ‘¶¸§§g²^¯{ÈÄƾ:ïTÔ-åe³äÔÔí õr2f-ÉDk¤¢nSq__ß'KÕjµ‘N§Ý99lÙ²ånâ|¨Z‹I¶ jjNètB솬­7~´â\.×Ù[(B>Ÿ_n4`ÿþýûvíúG–——ßDœÔaX´Èk²ºeõè³×zÓú ësòö=>~üøÔèèèÓÉdrúâÅ‹d2â8þ2„P!¼P©T~ ç´;+2=¥`ƒš ®Go+ȳÆYÁ¹{Z©BÑžPü‡'}½‚o[küŽþø¯>Ê0¸¢y‡Cë»ëðK«WÆ¡âôŸEïõ<‡çÑ×êuãõ•NÜŸ‰×µ ùVoï¬LÓãK­u·Çï{DÿW½…ïð™fÛð¦·1² þYÓË*^nÕ |OQÔ ó¾j¸Úßį(`.k¸M3Ôk=ŽaG«N`ðßþ P“æH%|¤IEND®B`‚gImageReader-3.4.0/data/icons/controls.svg000066400000000000000000000425511417507262200204570ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/expand.png000066400000000000000000000003261417507262200200520ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“‹IDATH‰íÔÍ Â@†áGðn iCÚE˜bRÈzÐ2b ÐË !’l4‘}ácw˜e~öðñ4xdÔ,i°A;Q¼7_±Šs‡„õ ßa+¡¹¤Ð‹Úûô§L~Ju1ýÛˆ/1qñâ  Â=T}Pl”áŸßpìÝ …¡˜ÝI1»9³Ëòøl`«ú·<ÐIEND®B`‚gImageReader-3.4.0/data/icons/expand.svg000066400000000000000000000144631417507262200200740ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/filtering.png000066400000000000000000000005501417507262200205550ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“IDAT8ÓMJAàob¼IvºÔhÝ›Ü{‡¸\™K¸SüÁƒøsŒìB•I\Lw¦3$š‚MM½Çëªé5d8Ç&^UX™Ï1½DùÑ~ù 4°V",°j’ð­ mD>Ã).1ÄQ²ê=îÂYø6 ÚnÂϰWÒ•6ïÖ›– éà%ÔÉ_ÍÑÕ¥¨GÕWÅXx†èêM­9Ã#’Uã$µ\ùoOp• Îñ*} ×A;F¯©2뉰ÀO8§oá=h§˜Äøº¸UE¹ÿ »a\ÆÛE¶IEND®B`‚gImageReader-3.4.0/data/icons/filtering.svg000066400000000000000000000106351417507262200205750ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/gimagereader.svg000066400000000000000000000755241417507262200212360ustar00rootroot00000000000000 image/svg+xml OCR gImageReader-3.4.0/data/icons/ins_append.png000066400000000000000000000006741417507262200207210ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“qIDAT8­“¿JAÆwÔâRl,lL%bá ‚­­ø'´ðÔ¼),l´4&Q c#%·»—ËÝå,r1gLîBðƒe˜ùvf>f០ììn7ÚAÛˆOÔ¬³ÓBúù)€ZíÍÈ展¶m”²CÛñmeS)W ÙìBÃoû±‰º¦[ÕêóÐŽ´¿”D -N£P›i`n@x>´ï?åò9¤XB -!$¥Ç’´ `¦ï¡À5Šh³ \™HØÖ»AÜ8ŸŽN>pÞ Œ´G‘Ê÷À,ð,…]õöèàp%RÊŽU %%R*ÊOån(Ç¡5u”´G&k`hŽ(ÉPLô_h{ÅL#Høk1°N6êéÀçKËØÜÊãz-¯‰ë9áiâú®Û¤å‡~4æ9Ôl@øzõÆl¦ÇÕVÖ¦¾Œ5š®Öí•“NÎß<:ÒlÄ$7<IEND®B`‚gImageReader-3.4.0/data/icons/ins_append.svg000066400000000000000000000341771417507262200207410ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/ins_cursor.png000066400000000000000000000012261417507262200207610ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“KIDAT8­“?LSQÆ÷ùik[I¨2‚”ÄÅhX –I‹qÑÄø‘„EW£6jÄ͸ $2:°¹9 Rÿ`¼…wK_ûJ¯ƒ}õ_ ~ÉInrîù¾óœÿ àfßfI—BÕ>89Gii½=444V-ŸJ¥¦šššº €ÕÕ•ÐÙsgè9Õ͉öã´µµÒØxˆp8D:F"‘p2™ÜBð{ôöö"„¨0ÖRiûþÝU;B£ü~ÿÇŽŽŽ€ÖšÉÉÉB"‘¨›`}}ýÓ^íÀ~ uddäÞôôt6ëååå °*ÝzÕ°©kÌ@— —)‘1¦(ê.d!»ö²þ‹åöó ßÂ&€üP]¼>ˆ[ÌS(:¸Å|9Üí<ù|ùUÚ:ˆa˜>‹Ì¢òÚ&³XÜ«ÍàÕš›+Ûö“KOk[ÓP,hŽ Òsµ€ó½È»gLKÛ¢·¯sá]„÷‘+çO_®³|€ÀáHtaæÓ¨ Qµ…{lôÅn˜ðs!ûúo e)%RJæfæjZ­I´–JÛÿ(4„a{OÀ\×µ¼¼ÖZ ¸&Àüüû,øF º±±q L@™´¹,ô¹æŒ<89G5G[î LLL¤”Äb±¨Ö:émeFƒd•ÂVЬ­PJ¡T–¥Å¥àÉ®î`2™Üêìì uBâñ8ããã{?Ú`0¸äíßðŽVì0F¹ «üþ%Û@pBóJƦšIEND®B`‚gImageReader-3.4.0/data/icons/ins_cursor.svg000066400000000000000000000311001417507262200207660ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/ins_hocr_append.png000066400000000000000000000006071417507262200217300ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“ÚhŒ6hm0Z£ÁhC†Ó9à8³²:€,âÑ­•¶UìÆßذ1‘ à_¯iVìÑ<8 ÎwÞª€ç‘·»×"‡Äãˆ8‰f|1Êyhs³üûƒx.ÀçK\Zßô®°¹½$IVJšëfêî&ZÞGþkûÐè§½˜IEND®B`‚gImageReader-3.4.0/data/icons/ins_hocr_append.svg000066400000000000000000000342311417507262200217430ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/ins_hocr_before.png000066400000000000000000000005541417507262200217240ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“!IDAT8í“¿KÃ@Ç?wd)¦³«£ÝwWqqÔZtýtìæ¦' Ž.â_PQ N Þ“$M.q0Õ@¬IÅÑ/<Þq÷~|¿wðGP›k&I·r’RÒ9>©çï€oà¶¶›ˆ¼!FÉ̾ï õï½BSÐhÌkmeFZkéõnêå‘å¨3F­ói“¤ãg¤Pr´ü4bÐv€3à`ã<ßÝ•Õ-¢8 ŠC"~ã«î¥ ÌíÌOû™ ^î¢u”½J›_¬kÓ±Ò´F®/‚¼´]à4Ïè·ø~ØëíÔ¤),$ÒÙSÅ…¼â.-@Aø óC[,Ô÷ŠM€GA»Õi…TÿŸ¶ï·ÍŸQù¼œsIEND®B`‚gImageReader-3.4.0/data/icons/ins_hocr_before.svg000066400000000000000000000330631417507262200217400ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/ins_hocr_replace.png000066400000000000000000000003201417507262200220640ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“…IDAT8c` `d```Hß þùßÿ image/svg+xml gImageReader-3.4.0/data/icons/ins_replace.png000066400000000000000000000004451417507262200210610ustar00rootroot00000000000000‰PNG  IHDRVÎŽWbKGDÿÿÿ ½§“ÚIDAT8Í“A ‚@†¥M ]v”ŽÐ„jWm¢º“wèÝ Uµ¬”Phé̼1[èˆJ£Býð~æ=hIÌ×=?Iž–ælà:ž­L®Ga¦KÉ (‚±ÒKÙ‡¥Å&ÜNRû”êŒýA×e¢uši&ÁvÃíï¿Rj%ZJ9µádNp ÁE˜¾ª þ¼»¿]¨MíS¯6µÿ§¥Ô$kJëxvNm<[$‡ $yV ó4gqæ‹’Ã;DÐ kJj¶vÖ”Z§ø»ö¸cù77-IEND®B`‚gImageReader-3.4.0/data/icons/ins_replace.svg000066400000000000000000000423351417507262200211000ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_block.png000066400000000000000000000003651417507262200207060ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ªIDATH‰í”Ñ ƒ0 Dï¬nCç`nкë0G™~hã–Ø±%úS°„ˆž”;sqÎúûâ{Õ?ç]•Ç+à¢ÙãÖ¹{D!Àõ-Rg÷a*{¢ ‘룄,öÑTTüÕ©°[,e@*©WXØ€ß":‡¥ j™Kƒ… Z1x¬i GOÇË5ÈŒ£ÍLƒì8Zç`d2§Ãì/HŒã&ãüügwÖj¨ò ú„\lüIEND®B`‚gImageReader-3.4.0/data/icons/item_block.svg000066400000000000000000000142271417507262200207230ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_halftone.png000066400000000000000000000007111417507262200214070ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“~IDATH‰í”½KBQÆW¯×k•¨!‡Ô \[š²!šú‚&·–  µ ¡Qú Ü%$›‚ ¡¡¥Aû RDAÉ«×Ópýº)ê KùLïyÏÃó¼çœ÷=0ß‡Ô …˜°´ ÷¦b±ÉHG£ÝØ6Œèp€Ü*aaü~°Û­ç…pøçe †<(érA$^¯¹n6ÁÖ*%“TªËÝÞÞBÓ^ ….‰ÇÓ㨪ù"…‚Y±Û N§¹—ËY¹BHý£ ŠEH$~eÓÔ0¬ùdòš@àŠ÷÷Ѻ¨òV»'S»%]Kò¡?Ó]EERXwﳩ Ù—(•Vyz:èpêâP;kK›ÊÇüŠ› ³BPm°¢€ÒÃ(pSvòPµ±6·Ç†vHÙÈ“ÕÉêwdõ¾YŒÓ:í6µÎÁ‘DlyàI-hÝW‹²ŠOiàSªø8Ïg‚s0.4;ìÎרЇr‡ÎÁ$0uƒ¾+Š~NÖ`êŸÝ ÿ? ÷pÛdµIEND®B`‚gImageReader-3.4.0/data/icons/item_halftone.svg000066400000000000000000000162141417507262200214270ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_line.png000066400000000000000000000001541417507262200205370ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“!IDATH‰c`£`Œ‚Œ8ÄÿSÙ¼Q0 FÁ(À¨¼;`üIEND®B`‚gImageReader-3.4.0/data/icons/item_line.svg000066400000000000000000000124641417507262200205610ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_page.png000066400000000000000000000003461417507262200205270ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“›IDAT8Í’Í !…Ÿ1°*¶‹œÒ†Ex² ±=RØcFrJ`G…u/Ƀ¹È|Ÿü:®·˜s~xÖZ’°UJùr×|÷Þo!„e]WˆDª AJi×ßœs¯­‹Hîú/V ªCø€äžôàÂ<}[ªz^ð9Õ)ÁÔ7Z}›fH"ÆØŒ¯Ýùò®»ÓAMiHIEND®B`‚gImageReader-3.4.0/data/icons/item_page.svg000066400000000000000000000072301417507262200205410ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_par.png000066400000000000000000000004561417507262200203770ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ãIDATH‰íT» Â@ õ³² ÌÁ H¬ÀH© EÄTÔH(sÀ:rð9÷KJ“×ÄyJlßóó-˜è£ÍÃý4s·Q¥¹z¿ÊþÇLÄø<¡bÍšç÷û1MI"0à'לFJThnŽPTàâVy7œðY‰z)´ œæŠ À&ÑÝ&¸¼DgpîÜ@¢è Jìâì ‚•Ú1&W²€¸Aw˜âØKÍ@ÜpÜ–Í ½¿ˆžE“‹&Ýœ®.«9Øì„:eT¢1vHS²¡­œÂyM÷ÑŸ®ëóã ßgò1ß—IEND®B`‚gImageReader-3.4.0/data/icons/item_par.svg000066400000000000000000000155771417507262200204240ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/item_word.png000066400000000000000000000004761417507262200205720ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“óIDATH‰íÓ±.QÆñQ<€R¼F6•ŽVÇ+l)^@t¢Ýr·Rk•4" ÕIHŒÂg'w’±3•Ì—ÜäÞïžùþgNfhÕ 3" «×$`¿žáóM @†£&—ñBÂþ¦ ÀI|Çv8c¥.à6^a /ÁëÖ _5:óÜ?ÞcÀib:÷;ðú8á“x!—…»8¦‹q›ÒŸfj½ùýK;MéðÍ,`·ìr"áÍâsùù÷‰º-,æû>öªvt`t%ug¡æKU×áÁ'é·„µB#ÇU­þ™~¿3W^5eÑÚIEND®B`‚gImageReader-3.4.0/data/icons/item_word.svg000066400000000000000000000135751417507262200206110ustar00rootroot00000000000000 image/svg+xml A gImageReader-3.4.0/data/icons/landscape.png000066400000000000000000000003761417507262200205320ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“³IDAT8Ý’1 1EÿÈ€6^ ×±ñ{‚T{„Ý2ÙN°ñ\²Å™L¢UBŒiu`Ègà½I ÀϽœsÇ”Àº®¨Ï:/Ër®áišÎ"r%¢GD„˜Þ{äÙ¶m‡¼¼æy>1óe†½1ª UEŒ±äÜÖÚ²´ˆèÖ«*D¤v9¤”ºàé‚cŒmÁ7¸yƒ¸ë -XU_þ ׂq!"ÍþÃzˆã# \ê{—IEND®B`‚gImageReader-3.4.0/data/icons/landscape.svg000066400000000000000000000072331417507262200205440ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/page.png000066400000000000000000000005261417507262200175110ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ IDAT8­“1j…@†EyB`çÄ2ÒØÛ[yµµ°O¯"‚–» 㮦É}»ûšdà‡m¾™aøc9êQUÕ;€¯ó<œs¨0ÆÀ9G]׎IàýÀ®ë~&Iòð}ëºÞÒuÝëêºfq¿Ap—eÁ0 R‚ˆ´4Mãxp‡ÏóŒišç9Â0„”Bˆß”e p€s®µ=Ž#²,3ÂBÑkQa5’U°mˆÈ ïû~0Æn0çDd…­(x]WMp…µ<Ãjl\âsJ`‚¯Oí m[\O8MS+¬ ú¾×N,¥¼ÿSŠ¢0žð¿Ö7ÖŸ"ùòGIEND®B`‚gImageReader-3.4.0/data/icons/page.svg000066400000000000000000000114701417507262200175240ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/portrait.png000066400000000000000000000003461417507262200204410ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“›IDAT8Í’Í !…Ÿ1°*¶‹œÒ†Ex² ±=RØcFrJ`G…u/Ƀ¹È|Ÿü:®·˜s~xÖZ’°UJùr×|÷Þo!„e]WˆDª AJi×ßœs¯­‹Hîú/V ªCø€äžôàÂ<}[ªz^ð9Õ)ÁÔ7Z}›fH"ÆØŒ¯Ýùò®»ÓAMiHIEND®B`‚gImageReader-3.4.0/data/icons/portrait.svg000066400000000000000000000072601417507262200204560ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/proofread.png000066400000000000000000000004371417507262200205570ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ÔIDAT8íѱJ‚aà'm ” %\¢BÜ»Œ†0pQ÷¦Úº¨¡ñ:¼Zâ'hji DšjÕ†ÿûáåÇKð,ïwÞ/çœ5ª%ÞBs,KZÝ4‹åFš5LÐÀ7ö1ÄsÒOp‹7ìà}ü‡1À N±‹ [ØNïfpÓÃ]´—¥‹gawO|àrEüØLd)¾J™¯ä]¬8P‰äç·B„^±ô‹"B,q,Ï;Ã!FxJú1ðŽº¼ÄžPb&ŽÊö‚åŽüÖø7/#¸"JNIEND®B`‚gImageReader-3.4.0/data/icons/proofread.svg000066400000000000000000000117531417507262200205750ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/resolution.png000066400000000000000000000005011417507262200207710ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“öIDAT8½Ò½JQàÏ/+7ˆO  VVv±ÓÞF; y3ŸÀR­µ›%þ%)„¬ÅNØ› ÄÃ…3sçÎ9s[jä8à ¼[Wâ+bˆ‹¹š]ÐÎpØ0ÕZ’;Ak.·Žn–‹P&gSÍR yÔ´›$L›\F“qD“‰á^˜˜Ž•«5ßâ¹iä?EêìΑáeÕF=ÕÅyü)Ýà¶ÑÇVÚ u¸TãAÂÁ½©Œ~ã.C¹€›¨¤Ïäzª½ÿ¨V8•p/8 ®ƒl2»Æ}ìá.âð ÏÅM‰ˆ=ߨIEND®B`‚gImageReader-3.4.0/data/icons/resolution.svg000066400000000000000000000077051417507262200210210ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/rotate_page.png000066400000000000000000000011041417507262200210600ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ùIDAT8Å’1h"Q†¿'îîÜÀ’ gLÄ€¬B›#ePP.X§»úÚ믴Ià ˜ÊÖ,˜"J° [„¼&xr ¹ì\s.’ìÕ÷àñæÍ›ÿ›7ÌÀÿ^ àòòò'Š ‚ àþþÏó~Õjµ÷«ïÉ¿gÊu]LÓdmm-ÚZkšÍ&"B.—c0¼{ ¹z ‚a±X0 ‚€B¡ÀÞÞJ)úý>õz]\×Yoa¢µ¦×ë±»»K¹\Ʋ,LÓÄ4M*• WWW8Ž“zóƒñxŒïû8ŽCµZessÃ0Ã0 òù<ív›Éd%MŒF#|ß§P(pxxÈúú:"‚ˆD€%¤T*1©V«vp]———lÛŽ­úÒé4™LÃ0¾F˲ØÚÚâîî.V´ô-íýý}”RŸŽ³‰e-žçZëXÑ*øáá¥Ôoù¸ÌžžžØÞÞ¦Óéü³„ÇÇGNOOiµZÌçó“F£ñM­¶ñââB®¯¯ñ<¨}J)nnnèt:‹EÊå²z3J©Y6›Mù¾mÛ†Áx<¦Ûíâ8$ ”R³Hóz4jµZsccãÃt:u‹…‘“³³³Û¸Ødœóùùù³ÖúG†_ÎÏÏ¿ðÖG+(U›:IEND®B`‚gImageReader-3.4.0/data/icons/rotate_page.svg000066400000000000000000000143331417507262200211030ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/rotate_pages.png000066400000000000000000000012651417507262200212530ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“jIDAT8u“±KaÆßåî†ËE ^›A\ä"‘ †& ââÒA°ÁhCf·n…]ú´K&é ^‡•8¸G!UAI‰˜!z”‚©I¸¯SBZ¯ïô}Ïû=ÏËû=‚ÿ—ØØØÈªªú®Ýn¿vç‡Iõs¹\RQ0 ÃýY«Õ>˾*»»»MÀlµZ\^^R¯×I§ÓÌÎÎP(PU•t:ý˜ÏçƒÏH)M×u9==ejjеµ5LÓäöö–½½= ƒ\\\Ïd³ÙåR$azz)%ýNR©333!ØÚÚ"322ò°ººPu]ÿ277‡mÛÜÜÜÐuÇÉd2„B!t]G×u²Ù,ûûûX–eöFRªCCCT«UÊå2–e±¾¾N$AÓ4<ÏÃó<¤”$ Êå2×××½‰D"Úh4^V«UR©óóó†A   ( Š¢ôîccc”J%lÛþ|~~þ[ét:šÍ&N‡p8Œ”²§ÚUîÇ¢Ñ(hšö@qç—mÛ¨ªÊÙÙ™oSëžB¼Éår1`||]ש×븮ëÛÔÿp£Ñ@Ñ‘R¾R„“““f³Ù¤R©°²²â;ÂÝÝ\]]ñôô´é8NQôŠb±(I&“ضÝ[Ÿ‚ããc*• KKKd2ñ, BˆÇX,f‡Ñ4Z­ÆÉÉ –e±¸¸ˆ¢(!þÊ¿•ÏçKÃÃÃ/îïï­V«åJ)7···¿ûq}ÓØn·ßº®ûÍó¼÷;;;_éÇø¼œ>f‚PÍsIEND®B`‚gImageReader-3.4.0/data/icons/rotate_pages.svg000066400000000000000000000164001417507262200212630ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/select.png000066400000000000000000000004761417507262200200600ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“óIDATH‰c`Ã0ÂYže~3²QÅTÖÿ¿¶ë?AXà~M’‘áÿcnæo$»SìË÷¿\ÿevj=ga`````f`ãdaú^¦Î‹Ï &&(†²q‰UμñåËïÿl Lĺn#„O ´€‘É&,c#ÖFtC‚ŸÑ>€iB1„3ÌÑň²€`0à#hLz0\È‘€aÌËØ‚kp¡[†Ï¤&G\ñ€ÓRœ2€ää¿ ¿¾ÿýÇÙ¹âægtaŒ T¹/ßÿq100þBUB£ÂnŒdÑ+¸­7IEND®B`‚gImageReader-3.4.0/data/icons/select.svg000066400000000000000000000140211417507262200200620ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/stripcrlf.png000066400000000000000000000007421417507262200206050ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“—IDAT8µÒ=hSaà'M¢bC\,êP„ Ý"V«"H'E‚ m‹PtPź uÐIq\Ć+'#U¤DÄÁâO¦ÅÜô:$ëM¼Ë{Î{8ßáã1ʶ>®¯H^$¿Ÿáµ<éIòØSc&"èçr—A‘KADpŸcqn‚‘%J_y7O¥Àt—Á9†:= 0ßÞ¥ Mc†Óe–ãqƒ]xÖ$ºËÕÕüIwæ%·†¨#7è image/svg+xml ↵ ✘ gImageReader-3.4.0/data/icons/thumbnail.png000066400000000000000000000007241417507262200205600ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞbKGDÿÿÿ ½§“‰IDATxœí›=ªÂ@Eï ¯1Iéz,,\€¥ë°´Je¥­¤³²pZ¹»`! ŸÕ°s„áúsHà3dŽÇ¦ ð㸄s-›Ežúm>åŠföX.—OýaI¾` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶` °Q¶Ƚ@ß÷Øï÷8Nó®ë°^¯±ÙlÐuÝÃw‡ÃÛí·Û-·^ö «ÕÊBV–¥Ïç8ošÆŠ¢°¢(¬iš8?V–¥ «ëú¥5ØÛ¼/ж-ú¾\¯×8‡ðÞÃ{ªªâÜ9ÞçBÿr/°X,BÀh4Âd2‰óÙl†œs˜N§q>±Ûíp¹\0ŸÏsë%ñÒíÈïô¼; À`£l6 À`óó’v‚ÿÛÔo"%€{vwõIÜ{ºï…͉IEND®B`‚gImageReader-3.4.0/data/icons/thumbnail.svg000066400000000000000000000064511417507262200205760ustar00rootroot00000000000000 image/svg+xml gImageReader-3.4.0/data/icons/wconf.png000066400000000000000000000010321417507262200177020ustar00rootroot00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ÏIDATH‰íÔ¿KUqðzM(Š ¬V‡(´!úa¶EC`´ÔDKCcKA$Qkýý M. RHšý23"Zš BË¥ºæõ6¼ïá†RÝ-/8߇ó}žïyž÷ý²VMÔ Ô1Š–ÄÎ`‹èNl=>¡†cÍ’·âa’íÆĤXÛƒÍø†'ežâ+6b/ÚpïPM1èMÁ,”XÀtF'vaÏS¬}¹gRØÔ´À2&rÝ',Y‡±Ä»ò9 ²o–¼ ‘Ã~ÅL%Yg±]„þ¸Œ@QÛD5ÌãUï¡Îåf/ýsxë-Âç%Ñ–o°UtU—¨áQ¾×…e>ù ^Êÿÿ¶ÎãƒÈlä_“W0+ô8vC¿ýï"ÔKùñ)Ñ5Õ<ÑÍÜPÅ Ü7‹1¨S"«â¹Ý†—â"»ŽûIЂ{bÄ5rNtXhß»I~›0ˆ÷bŽ:ÄìŒH¥¿z-ñ+¹îCöY´étÚ±3ñ¢#ÛñVÌN6­ÿÙÚUõE„¸”{[÷aEXrQøYÍ Ã¸Š yêþüvHdSªNâY’Ïãrâ§Å•±ˆ¸¥òXžºkÅz•Ekõ×ú é"’~ŽÉIEND®B`‚gImageReader-3.4.0/data/icons/wconf.svg000066400000000000000000000166201417507262200177260ustar00rootroot00000000000000 image/svg+xml conf W gImageReader-3.4.0/data/manual-cs.html.in000066400000000000000000000516201417507262200201300ustar00rootroot00000000000000 PříruÄka k aplikaci @PACKAGE_NAME@ @PACKAGE_VERSION@

PříruÄka k aplikaci @PACKAGE_NAME@ @PACKAGE_VERSION@

Obsah

O aplikaci

gImageReader je grafická nadstavba pro engine tesseract-ocr.

Funkce

  • Možnost ruÄnÄ› oznaÄit Äásti obrázku, které mají být rozpoznány, případnÄ› nechat rozpoznat celou plochu obrázku.
  • SamoÄinné rozpoznání rozvržení strany.
  • Otevírání obrázků a PDF dokumentů, dále import obrázků ze skenovacích zařízení, ze schránky a zachycených snímků obrazovky.
  • Rozpoznaný text je možné nechat zobrazit hned vedle zdrojového obrázku, případnÄ› nasmÄ›rovat do schránky.
  • Rozpoznání vícejazyÄného textu.
  • Základní úpravy výstupního textu, vÄetnÄ› funkce vyhledání/nahrazení a odebrání konců řádků.
  • Kontrola výstupního textu na pÅ™eklepy ve zvoleném jazyce, pokud je nainstalován přísluÅ¡ný slovník.
  • UpozornÄ›ní uživatele na chybÄ›jící slovníky a navržení jejich instalace.

Novinky

Podrobný seznam změn je k dispozici v protokolu úprav: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.2 (30. Äerven 2015):

  • Opravuje nesprávné chování funkce „PÅ™ipojit ke stávajícímu textu“ v případech, kdy je rozpoznáváno z vícero oblastí textu
  • Podrobnosti viz protokol úprav: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.1 (11. Äerven 2015):

  • Opraveno zobrazování titulku maximalizovaného okna aplikace v prostÅ™edí Gnome 3
  • PÅ™idány nové pÅ™eklady: ÄínÅ¡tina – honkongský a taiwanský dialekt
  • Aktualizovány pÅ™eklady: ruský a portugalský

gImageReader 3.1 (1. květen 2015):

  • PÅ™idána volba zvýrazňování prázdných míst
  • Umožňuje omezit oblast nahrazování textu pouze na oznaÄenou Äást výstupního textu
  • Do následného zpracování pÅ™idána volba pro zachování odstavců
  • Soubory je nyní možné otevírat i jejich pÅ™etažením do okna aplikace
  • ZlepÅ¡eno vykreslování nÄ›kterých PDF souborů v Qt variantÄ› uživatelského rozhraní
  • V systému MS Windows opraveno nefunkÄní skenování s nÄ›kterými modely skenerů
  • V systému MS Windows již podporována automatická instalace slovíků pro kontrolu pÅ™eklepů
  • Naskenované obrázky je možné ukládat i v jiných datových formátech, než png
  • Opraveno vícero dalších chyb

gImageReader 3.0.1 (4. leden 2015):

  • Opravena chyba v Qt variantÄ› uživatelského rozhraní, projevující se pÅ™i naÄítání souboru se seznamem pro nahrazování textu
  • ZlepÅ¡eno chování funkce odebírání konců řádků v případÄ› vícero po sobÄ› jdoucích konců řádků
  • Provedena drobná vylepÅ¡ení uživatelského rozhraní
  • Podrobnosti viz protokol úprav: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.0 (12. prosinec 2014):

  • gImageReader 3.0 koneÄné
  • PÅ™idáno nové, alternativní uživatelské rozhraní, založené na jiných softwarových knihovnách – Qt4/5, namísto Gtk
  • Opravaveno skenování pÅ™i provozování v operaÄním systému Microsoft Windows
  • PÅ™i pÅ™epínání mezi obrázky si aplikace již pamatuje nastavení obrazu pro konkrétní obrázek (svÄ›tlost, kontrast, atd)
  • Vyhledávání textu je nyní možné smÄ›rem ke konci i zaÄátku, lze nahrazovat vÅ¡echny výskyty vyhledaného, pÅ™i vyhledávání (volitelnÄ›) rozliÅ¡ovat mezi malými a velkými písmeny
  • Opraveno mnoho dalších chyb
  • Zaktualizovány pÅ™eklady textů rozhraní aplikace do ostatních jazyků
  • Podrobnosti viz protokol úprav: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.93 (30. duben 2014):

  • gImageReader 3.0 test 4
  • PÅ™idána možnost rozpoznávání ve vícero jazycích naráz
  • PÅ™idáno tlaÄítko pro zobrazení/skrytí podokna s výstupním textem
  • Zapínání / vypínání kontroly pÅ™eklepů je nyní možné z kontextové nabídky
  • Opraven pád pÅ™i naÄítání naskenovaného dokumentu

gImageReader 2.92 (19. březen 2014):

  • gImageReader 3.0 test 3
  • PÅ™idána funkce seznamu nahrazování, umožňující uživatelům vytvářet seznamy nahrazení, která mají být provedena v rozpoznaném textu
  • Opravena chyba v ukládání, mající za následek prázdné soubory
  • Opraveny pády aplikace pÅ™i vykreslování obsahu PDF souborů
  • Konce řádků, kterým pÅ™edchází konec řádku, jsou nyní zachovávány
  • Ve verzi pro systém Microsoft Windows opraveno zobrazení textů rozhraní v pÅ™ekladech do ostatních jazyků

gImageReader 2.91 (20. únor 2014):

  • gImageReader 3.0 test 2
  • ZlepÅ¡eno samoÄinné rozpoznávání rozvržení strany díky spojení pÅ™ekrývajících se oblastí
  • Proveden pÅ™echod na standardní dialog pro otevírání souborů z daného desktopového prostÅ™edí / operaÄního systému (Gnome/KDE / Microsoft Windows)
  • ZprovoznÄ›no rozpoznávání více stran i se samoÄinným rozpoznáváním rozvržením strany
  • Opravena funkce vyhledávání/nahrazování, která dříve způsobovala pády aplikace
  • PÅ™idána verze pro 64bit verzi systému Windows

gImageReader 2.90 (11. únor 2014):

  • gImageReader 3.0 test 1
  • PÅ™idána možnost vytvoÅ™it výbÄ›ry vícero oblastí k rozpoznání (druhý a další výbÄ›ry pÅ™idržením klávesy CTRL). Dále pÅ™ibyla kontextová nabídka, vyvolávaná kliknutím pravým tlaÄítkem myÅ¡i na výbÄ›ru. Z této nabídky lze:
    • Mazat a pÅ™euspořádávat jednotlivé výbÄ›ry
    • Nechat rozpoznat text v oznaÄené oblasti – buÄ do schránky, nebo do podokna s výstupním textem
  • PÅ™idáno základní samoÄinné rozpoznávání rozvržení strany
  • V podoknÄ› s výstupním textem pÅ™ibyla funkce ZpÄ›t a Znovu
  • Nastavení nyní probíhá samoÄinnÄ›
  • NatáÄení obrázků o libovolný úhel nyní funguje tak, jak má
  • PÅ™idáno zjišťování (externÄ›) smazaných/pÅ™ejmenovaných souborů
  • ZpÅ™ehlednÄ›no uživatelské rozhraní
  • Rozhraní aplikace pÅ™eneseno na knihovny Gtk+ verze 3, a její zdrojové kódy pÅ™epsány do jazyka C++ s použitím můstků Gtkmm

Jak s aplikací pracovat

Otevírání a import obrázků

  • Obrázky lze otevírat/importovat prostÅ™ednictvím podokna Zdroje, na které se dostanete kliknutím na tlaÄítko vlevo nahoÅ™e na hlavní liÅ¡tÄ›.
  • Obrázek Äi PDF dokument otevÅ™ete kliknutím na tlaÄítko Otevřít na panelu Obrázky.
  • K zachycení snímku obrazovky, vložení obrázku ze schránky, Äi otevÅ™ení nedávno používaného souboru, slouží Å¡ipka vedle tlaÄítka otevřít.
  • Seznam otevÅ™ených obrázků je možné spravovat pomocí tlaÄítek, následujících za tím pro otevírání souborů. DoÄasné soubory (jako jsou snímky obrazovky a data ze schránky) jsou pÅ™i ukonÄení aplikace samoÄinnÄ› smazány.
  • Přímo ze skenovacího zařízení získáte obrázek kliknutím na panel Získat v podoknÄ› Zdroje.

Prohlížení obrázků a úprava jejich parametrů

  • TlaÄítka na hlavní liÅ¡tÄ› slouží k pÅ™ibližování a oddalování, dále k pootoÄení obrázku o libovolný úhel. ZmÄ›ny pÅ™iblížení je možné dosáhnout též umístÄ›ním ukazatele na obrázek, stisknutím klávesy CTRL a otáÄením koleÄkem myÅ¡i.
  • Nástroje pro základní úpravy obrázku se nacházejí na liÅ¡tÄ› Úpravy obrázku, která se zapíná klikutím na tlaÄítko Úpravy obrázku, nacházejícím se na hlavní liÅ¡tÄ›. Mezi nástroje, které jsou zde v souÄasnosti k dispozici, patří úprava jasu a kontrastu a zmÄ›na rozliÅ¡ení (pomocí interpolace).

Rozpoznávání textu

  • Oblasti, ve kterých má být rozpoznán text, lze oznaÄit natažením (kliknutí levým tlaÄítkem + pohyb myší) obdélníku nad přísluÅ¡nou Äástí obrázku. Takových výbÄ›rů je možné vytvoÅ™it více, jen je tÅ™eba pÅ™i vytváření dalších pÅ™idržet klávesu CTRL.
  • AlternativnÄ› je možné použít tlaÄítko SamoÄinné rozpoznání rozvržení strany, které se nachází na hlavní liÅ¡tÄ›. Aplikace se tak pokusí samoÄinnÄ› urÄit pÅ™isluÅ¡né oblasti k rozpoznání a případnÄ› srovnat řádky pootoÄením obrázku.
  • VýbÄ›ry mohou být mazány a pÅ™euspořádávány prostÅ™ednictvím kontextové nabídky, která se objeví poté, co na nÄ› kliknete pravým tlaÄítkem. Je též možné zmÄ›nit velikost výbÄ›ru tažením za rohy obdélníku, který jej oznaÄuje.
  • Jazyk rozpoznávaného textu se vybírá z rozbalovací nabídky tlaÄítka Rozpoznat, nacházejícího se na hlavní liÅ¡tÄ›. Je-li nainstalován přísluÅ¡ný slovník pro kontrolu pÅ™eklepů, je též možné volit mezi dostupnými místními variantami daného jazyka. Toto ovlivňuje pouze kontrolu pÅ™eklepů v rozpoznaném textu. Nerozpoznané jazykové definice pro tesseract se objeví pod pÅ™edponou názvu souboru, uživatelsky je ale možné nauÄit aplikaci tyto soubory rozpoznávat urÄením přísluÅ¡ných pravidel v nastavení aplikace (viz níže). Rozpoznávání ve vícero jazycích naráz je možné urÄit v podnabídce VícejazyÄné rozbalovací nabídky.
  • Rozpoznávání oznaÄených Äásti obrázku (nebo celého obrázku, pokud nebyl proveden výbÄ›r oblastí) zahájíte kliknutím na tlaÄítko Rozpoznat na hlavní liÅ¡tÄ›. PřípadnÄ›, jednotlivé oblasti mohou být rozpoznány též kliknutím pravého tlaÄítka myÅ¡i na požadovaný výbÄ›r. Z této kontextové nabídky je též možné rozpoznaný text nasmÄ›rovat do schránky, namísto do podokna výstupu.

Následné zpracování rozpoznaného textu

  • Jakmile je rozpoznán, text se objeví v podoknÄ› výstupního textu (pokud nebyl pÅ™esmÄ›rován do schránky).
  • Je-li k dispozici slovník pro kontrolu pÅ™eklepů pro rozpoznávaný jazyk, bude rozpoznaný text takto zkontrolován. Jaký slovník bude ve výsledku použit, je možné zmÄ›nit buÄ z nabídky jazyka vedle tlaÄítka Rozpoznat, nebo z nabídky, která se objeví po kliknutí pravým tlaÄítkem myÅ¡i na oblasti textu.
  • PÅ™i rozpoznávání dalšího textu, může tento být buÄ pÅ™ipojen, vložen na pozici kurzoru, nebo může zcela nahradit stávající rozpoznaný text. Záleží dle režimu, zvoleného v nabídce Režim pÅ™ipojování, která se nachází na liÅ¡tÄ› podokna výstupního textu.
  • Mezi další nástroje pro následné zpracování textu patří odebírání konců řádků, ruÅ¡ení prázdného místa a další (dostupné od druhého tlaÄítka dále na liÅ¡tÄ› podokna výstupního textu). Dále lze v textu vyhledávat a nahrazovat. Seznam pravidel nahrazování lze vytvoÅ™it kliknutím na tlaÄítko Najít a nahradit na liÅ¡tÄ› podokna výstupního textu a poté kliknutím na tlaÄtko Dosazování.
  • ZmÄ›ny, provedené na rozpoznaném textu, mohou být brány zpÄ›t a též opakovány, pomocí přísluÅ¡ných tlaÄítek na liÅ¡tÄ› podokna výstupního textu.
  • Rozpoznaný text je možné uložit do souboru kliknutím na tlaÄítko Uložit na liÅ¡tÄ› podoka výstupního textu.
  • Podokno výstupu lze skrýt klikutím na tlaÄítko úplnÄ› vpravo na liÅ¡tÄ› podokna výstupu. Pozor, tato operace též vymaže dosavadní rozpoznaný text, takže o nÄ›j pÅ™ijdete, pokud jste ho mezitím napÅ™. neuložili do souboru.

Nastavení aplikace

  • Nastavení jsou dostupná z nabídky Aplikace, dostupné jako tlaÄítko úplnÄ› vpravo na hlavní liÅ¡tÄ›. Pokud je aplikace provozována v prostÅ™edí Gnome 3, nabídka Aplikace je souÄástí horní liÅ¡ty tohoto prostÅ™edí.
  • Co je možné nastavit: písmo v podoknÄ› výstupního textu, zda má aplikace hlásit chybÄ›jící slovníky pro kontrolu pÅ™eklepů, hlášení vydání nových verzí aplikace.
  • V případÄ› Gtk+ varianty uživatelského rozhraní aplikace, je souÄástí nastavení též orientace podokna výstupního textu (svislá zabere pravou stranu okna aplikace, vodorovná spodní). U Qt varianty rozhraní může být pozice podokna výstupu libovolná, staÄí pÅ™etáhnout jeho titulní liÅ¡tu.
  • Dále, je možné vytvoÅ™it vlastní pravidla pro párování jazykových definic engine tesseract a jazyka (data pro tesseract tuto informaci žel neobsahují). Seznam pÅ™edurÄených pravidel se nachází v sekci PÅ™edurÄené jazykové definice. Další definice lze pÅ™idat kliknutím na tlaÄítko PÅ™idat, které se nachází níže. Pravidla pro urÄení jazyka se sestávají z tÄ›chto tří polí:
    • PÅ™edpona názvu souboru: Název souboru s jazykovými daty pro tesseract má podobu <predpona>.traineddata, tj. pro ÄeÅ¡tinu, je soubor nazýván cs.traineddata a pÅ™edpona je cs.
    • Kód dle normy ISO: Jedná se o kombinaci kódu jazyka dle normy ISO 639-1 a kódu zemÄ› dle normy ISO 3166-2, oddÄ›lené podtržítkem (tj. cs_CZ). Tato informace je nezbytná pro urÄení slovníku pro kontrolu pÅ™eklepů v daném jazyce. Volba zemÄ› má význam pro samoÄinnou instalaci slovníků pro kontrolu pÅ™eklepů, kde je nutná nalezení přísluÅ¡ného balíÄku se slovníky. V případÄ›, že žádná z kombinací v normách nevyhovuje, lze použít kód smyÅ¡lený, jen pak nebude možné urÄit odpovídající slovník pro kontrolu pÅ™eklepů.
    • Obecný název jazyka: ÄŒlovÄ›kem používaný název jazyka, který slouží jako oznaÄení položky pro daný jazyk v nabídce Jazyk.

Instalace jazykových definic rozpoznávacího engine tesseract

  • V systému GNU/Linux staÄí spustit správce balíÄků a nainstalovat ty, které obsahují požadované jazykové definice (balíÄky nejspíš budou nazvány ve stylu tesseract-langpack-<jazyk>).
  • V systému Microsoft Windows je tÅ™eba si stáhnout definice požadovaných jazyků ze stránek projektu, jejich soubory (<jazyk>.traineddata) pak umístit tam, kam odkazuje (nabídka) Start→VÅ¡echny programy→gImageReader→Jazykové definice pro Tesseract.
  • Aby se instalace nových jazykových definic projevila, je tÅ™eba buÄ aplikaci ukonÄit a spustit znovu, nebo použít v nabídce aplikace kliknout na Znovu zkontrolovat přítomnost jazykových dat.

Instalace slovníků pro kontrolu překlepů

  • V systému GNU/Linux, pokud daná distribuce podporuje technologii PackageKit, aplikace v případÄ› potÅ™eby nabídne samoÄinnou instalaci nezbytných slovníků. A pokud snad samoÄinná instalace z nÄ›jakého důvodu nefunguje, můžete slovníky nainstalovat pomocí správce balíÄků v systému (balíÄky budou nazvané nÄ›co jako hunspell-<jazyk> nebo aspell-<jazyk>).
  • V systému MS Windows, se aplikace pokusí automaticky stáhnout přísluÅ¡ný slovník pro kontrolu pÅ™eklepů z http://cgit.freedesktop.org/libreoffice/dictionaries/tree. Slovníky též mohou být nainstalovány ruÄnÄ›: pro přísluÅ¡ný jazyk (tj. napÅ™. cs_CZ), stáhnÄ›te soubory s příponami .dic a .aff a umístÄ›te je tam, kam odkazuje (nabídka) Start→VÅ¡echny programy→gImageReader→Slovníky pro kontrolu pÅ™eklepů.

Jak se zapojit do vývoje

Pro své návrhy a příspÄ›vky vÅ¡eho druhu, vyplňte formulář a nebo požadavek na zaÄlenÄ›ní na stránce projektu na portálu GitHub, nebo napiÅ¡te na manisandro@gmail.com. ZvláštÄ› cenÄ›ny jsou pÅ™eklady textů uživatelského rozhraní aplikace. Jak takový pÅ™eklad vytvoÅ™it (v bodech):

  1. Stáhněte si nejnovější zdrojové kódy.
  2. Přejděte do složky po.
  3. Pokud pÅ™eklad do přísluÅ¡ného jazyka jeÅ¡tÄ› nebyl založen, vytvoÅ™te kopii souboru gimagereader.pot a nazvÄ›te ji <standardni_zkratka_jazyka>.po (tj. napÅ™. de.po pro nÄ›mÄinu). V již existujícím pÅ™ekladu pokraÄujte upravováním přísluÅ¡ného souboru.
  4. Doplňte překlad řetězců v <jazyk>.po.
  5. Výsledný po soubor pošlete na manisandro@gmail.com. Díky!

Ladění a podpora

Pokud narazíte na problém Äi máte nÄ›jaký nápad na zleÅ¡ení aplikace, vyplňte prosím formulář v systému správy hlášení chyb pro gImageReader, nebo napiÅ¡te přímo na manisandro@gmail.com. Pokud se setkáváte s pády aplikace Äi tím, že pÅ™estává reagovat, pokuste se do svého hlášení zahrnout též následující údaje:

  • Pokud se objeví komponenta pro obsluhu chyby, pÅ™ipojte do své zprávy též ladicí informace, které vypíše. Aby tyto informace byly úplné, je v případÄ› provozování pod systémem GNU/Linux tÅ™eba, aby byl nainstalován ladicí nástroj gdb a přísluÅ¡né ladicí symboly. BalíÄek, obsahující ladicí symboly bývá obvykle nazván <nazevbalicku>-debuginfo nebo <nazevbalicku>-dbg. V případÄ› verze pro systém Microsoft Windows jsou ladicí symboly přítomny již ve výchozí instalaci.
  • Pokud aplikaci provozujete v systému Microsoft Windows, pÅ™ipojte ke zprávÄ› soubory protokolů %ProgramFiles%\gImageReader\gimagereader.log a %ProgramFiles%\gImageReader\twain.log.
  • Pokud aplikaci provozujete v systému GNU/Linux, spusÅ¥te ji z emulátoru terminálu a ke zprávÄ› pÅ™ipojte cokoli, co se v terminálu objevilo.
  • Pokuste se co možná nejlépe popsat, co jste s aplikací dÄ›lali a zda se daří situaci navodit opakovanÄ›.

Copyright ©2009-2015 Sandro Mani, revize: pondÄ›lí, 20. duben 2015

gImageReader-3.4.0/data/manual-ru.html.in000066400000000000000000001611101417507262200201450ustar00rootroot00000000000000 РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ @PACKAGE_NAME@ @PACKAGE_VERSION@

РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ @PACKAGE_NAME@ @PACKAGE_VERSION@

Содержание

О программе

gImageReader — графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr, напиÑанный на C++.

ВозможноÑти

  • Импорт документов PDF и изображений Ñ Ð´Ð¸Ñка и Ñканирующих уÑтройÑтв, из буфера обмена и Ñнимков Ñкрана
  • Обработка неÑкольких изображений и документов за один раз
  • Ручное или автоматичеÑкое определение облаÑти раÑпознаваниÑ
  • РаÑпознавание Ñ Ð¿Ð¾Ñледующим Ñозданием проÑтого текÑтового документа или документа hOCR
  • Отображение раÑпознанного текÑта непоÑредÑтвенно Ñ€Ñдом Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼
  • ПоÑтобработка раÑпознанного текÑта, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ орфографии
  • Создание документов PDF из документов hOCR

ОбновлениÑ

Подробный ÑпиÑок изменений доÑтупен в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.3.1 (28 Ð¸ÑŽÐ»Ñ 2019 г.):
* hOCR: раÑпроÑтранение атрибутов на добавленные вручную Ñлементы (@foghawk)
* hOCR: улучшение напиÑÐ°Ð½Ð¸Ñ Ñлов, пишущихÑÑ Ñ‡ÐµÑ€ÐµÐ· Ð´ÐµÑ„Ð¸Ñ (@foghawk)
* hOCR: улучшение напиÑÐ°Ð½Ð¸Ñ Ñлов Ñо Ñпециальными Ñимволами (@foghawk)
* hOCR: возможноÑть указывать количеÑтво точек на дюйм Ð´Ð»Ñ Ð¸Ñточников изображений при ÑкÑпорте в PDF (@foghawk)
* hOCR: возможноÑть выбирать, Ñледует ли очищать знаки переноÑа при ÑкÑпорте в PDF
* hOCR: ÑопоÑтавление кодов Ñзыков 639-2 и ISO 639-1 Ð´Ð»Ñ ÑƒÑтановки Ñзыка проверки орфографии
* ВозможноÑть указывать запрещённые / разрешённые Ñимволы Ð´Ð»Ñ Ñ€Ð°ÑпознаваниÑ
* Различные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
* ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð°
* ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.3.0 (26 ÑентÑÐ±Ñ€Ñ 2018 г.):
* Поддержка tesseract-4.0.0
* ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð°
* ОпиÑание вÑех прочих изменений возможноÑтей программы Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° выхода предыдущей Ñтабильной верÑии доÑтупно в журналах изменений 3.2.9x
* ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.2.99 (24 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2018 г.):
* gImageReader 3.3 beta
* Добавление поддержки Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² DJVU
* Добавление поддержки зашифрованных файлов PDF
* Редактор hOCR перепиÑан; его функциональноÑть значительно раÑширена
  - ВозможноÑть Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ð¾ÑтноÑтей в дереве hOCR
  - ВозможноÑть иÑпользовать щелчок по холÑту Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к ÑоответÑтвующему Ñлементу в дереве hOCR
  - Поддержка маÑÑового Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² дочернего Ñлемента hOCR из родительÑкого Ñлемента
  - Применение атрибутов ÑемейÑтва шрифтов, еÑли Ñто возможно
  - Применение и возможноÑть Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² полужирного и курÑивного начертаниÑ
  - Корректное применение направлÑющей
  - Добавление поддержки поиÑка / замены и ÑпиÑка замен
  - Добавление режима предварительного проÑмотра при редактировании
  - ВозможноÑть вручную добавлÑть линии, Ñлова и абзацы
  - ВозможноÑть обмена Ñлементов
  - ÐвтоматичеÑÐºÐ°Ñ Ð½Ð°Ñтройка родительÑких ограничительных рамок при изменении размера и удалении дочерних Ñлементов
  - Добавление панели инÑтрументов навигации Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ð¸ по дереву hOCR
  - ИÑпользование отноÑительных путей к иÑходным файлам в документе hOCR HTML, еÑли иÑходные файлы находÑÑ‚ÑÑ Ð½Ð° том же уровне или ниже файла hOCR
  - Добавление ÑкÑпорта в текÑÑ‚
  - Добавление ÑкÑпорта в ODT
  - ВозможноÑть выбора формата бумаги при ÑкÑпорте в PDF
  - ВозможноÑть наÑтройки метаданных документа при ÑкÑпорте в PDF
  - ВозможноÑть уÑтановки ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ ÑкÑпорте в PDF
  - [Qt] ВозможноÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ QPrinter в качеÑтве метода ÑкÑпорта в PDF (обеÑпечивает улучшенную поддержку Ñложных начертаний шрифтов)

gImageReader 3.2.3 (1 Ð¸ÑŽÐ»Ñ 2017 г.):
* ИÑправление неработающего ÑкÑпорта в hOCR
* Добавление параметра Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ иÑходного файла / Ñтраницы к результатам раÑпознаваниÑ

gImageReader 3.2.2 (30 Ð¸ÑŽÐ½Ñ 2017 г.):
* ИÑпользование иÑходного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° в формате PDF
* ВозможноÑть ÑÐ²Ð¾Ñ€Ð°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ / Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð²ÐµÑ‚Ð²ÐµÐ¹ дерева hOCR Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ контекÑтного меню
* РаÑпознавание угловых кавычек как Ñимволов кавычек
* ИÑправление аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при добавлении иÑточников без Ñтраниц
* ИÑправление возможного аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при быÑтром переключении документов
* [Gtk] ИÑправление воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ результатов
* [Gtk] ИÑправление аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при ошибке отриÑовки изображениÑ
* [Gtk] ИÑправление отÑутÑÑ‚Ð²Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð² при иÑпользовании поÑледних верÑий Gtk
* [Qt] УÑтранение Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑƒÑтого Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² Ñлучае, еÑли не удаётÑÑ Ð¾Ñ‚Ñ€Ð¸Ñовать уменьшенное изображение

gImageReader 3.2.1 (10 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2017 г.):
* Добавление возможноÑти поворота отдельных Ñтраниц многоÑтраничных документов
* ОбеÑпечение загрузки ÑовмеÑтимых определений Ñзыков tesseract менеджером tessdata
* Добавление параметра ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¿Ð¾ алгоритму CCITT Group4 Ð´Ð»Ñ ÑкÑпорта в монохромный PDF 
* ВозможноÑть выбора между диффузным и пороговым алгоритмами ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑкÑпорта в монохромный PDF
* Предварительный проÑмотр качеÑтва ÑÐ¶Ð°Ñ‚Ð¸Ñ JPEG в предварительном проÑмотре вывода в формате PDF
* Изменение ÑркоÑти / контраÑтноÑти / Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð²Ð»Ð¸Ñет на вÑе выбранные иÑточники
* [Qt] Поддержка многоÑтраничных изображений Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ QImageReader (Qt5.9+ будет поддерживать многоÑтраничные документы TIFF)
* [Gtk] ИÑправление завиÑÐ°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при Ñохранении выделенного фрагмента
* [Qt] ИÑправление возможной взаимоблокировки при быÑтром переключении иÑточников
* Обновлённые переводы

gImageReader 3.2.0 (23 ноÑÐ±Ñ€Ñ 2016 г.):
 * Ð¡Ñ‚Ð°Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ gImageReader 3.2.0
 * Добавление горÑчих клавиш PageUp / PageDown Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра многоÑтраничных документов
 * ОпиÑание вÑех прочих изменений возможноÑтей программы Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° выхода предыдущей Ñтабильной верÑии доÑтупно в журналах изменений 3.1.9x
 * МногочиÑленные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° выхода верÑии 3.1.99 — оÑÐ¾Ð±Ð°Ñ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ð½Ð¾Ñть Daniel Plakhotich
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.99 (13 октÑÐ±Ñ€Ñ 2016 г.):
 * ВерÑиÑ-кандидат gImageReader 3.2
 * Общие улучшениÑ:
   - Ðахождение критичеÑких ошибок tesseract, которые в противном Ñлучае приводÑÑ‚ к аварийному завершению программы
   - Улучшение логики автоматичеÑкой уÑтановки орфографичеÑких Ñловарей
   - ВозможноÑть выбора между хранением Ñзыковых файлов (Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков, орфографичеÑкие Ñловари) в ÑиÑтемных или пользовательÑких локальных каталогах
 * Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° проÑтого текÑта:
   - ВозможноÑть раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ñ… пользователем облаÑтей на неÑкольких Ñтраницах
   - Также обрабатывать Ñимвол «\u2014» как дефиÑ
   - ÐšÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° конечных пробелов функцией «Ð¡Ð¾Ñ…ранÑть абзацы»
 * Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° hOCR:
   - Добавление дейÑтвий «Ð”обавить в Ñловарь» и «Ð˜Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñлово» в меню проверки орфографии редактора hOCR
   - ИÑключение Ñимволов, которые не образуют Ñлова, из проверки орфографии
   - ВозможноÑть Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑоÑедних Ñлементов Ñлов
   - ВозможноÑть наÑтройки ограничительных рамок Ñлементов документа путем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° холÑте
   - ВозможноÑть ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ñ… Ñлементов из дерева документов
   - ВозможноÑть Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких графичеÑких облаÑтей Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ контекÑтного меню ÑоответÑтвующей Ñтраницы
 * Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ ÑкÑпорта в PDF:
   - Добавление возможноÑти предварительного проÑмотра
   - ПринÑтие во внимание информации о направлÑющей Ð´Ð»Ñ Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñлов в Ñгенерированном PDF
   - Добавление параметров Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° цветового формата и ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹, запиÑываемых в PDF (позволÑет значительно уменьшить размер PDF)
   - ÐšÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° параметров размера Ñтраницы и количеÑтва точек на дюйм
   - Улучшение логики Ð´Ð»Ñ ÑƒÑ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¾Ð² между Ñтроками и Ñловами
   - ОбеÑпечение иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñимвола дефиÑа (позволÑет приложениÑм Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ PDF правильно находить Ñлова, которые пишутÑÑ Ñ‡ÐµÑ€ÐµÐ· дефиÑ)
 * Ðовые и обновлённые переводы
 * Различные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.91 (3 Ð¼Ð°Ñ 2016 г.):
 * gImageReader 3.2 beta 2
 * ИÑправление аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при редактировании Ñлементов в редакторе hOCR
 * ИÑправление Ñборки в Ubuntu 14.04
 * Обновлённый перевод на чешÑкий Ñзык
 * ИÑправление неÑкольких опечаток
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.90 (28 Ð°Ð¿Ñ€ÐµÐ»Ñ 2016 г.):
 * gImageReader 3.2 beta 1
 * Добавление начальной реализации редактора hOCR, Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтью ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð² формате hOCR HTML, PDF Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ‹Ð¼ наложенным текÑтом или PDF, воÑÑтановленного из извлеченного текÑта и графики
 * ВозможноÑть выбора и работы Ñ Ð½ÐµÑколькими иÑточниками одновременно
 * Добавление менеджера tessdata Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ñтва ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñми Ñзыков tesseract непоÑредÑтвенно из программы
 * Отображение индикатора хода Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ раÑпознавании, добавление кнопки отмены
 * Модернизированный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Gtk
 * Поддержка Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ и Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð°
 * ВозможноÑть Ð¿Ð°Ð½Ð¾Ñ€Ð°Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ перетаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ Ñредней кнопкой мыши
 * УÑтранение необходимоÑти указывать код Ñзыка и региональных параметров в пользовательÑких определениÑÑ… Ñзыков и иÑпользование вÑтроенного ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñзыка и региональных параметров Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка орфографичеÑких Ñловарей
 * Различные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.2 (30 Ð¸ÑŽÐ½Ñ 2015 г.):
 * ИÑправление некорректного Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ «Ð”обавить к текущему текÑту» при работе Ñ Ð½ÐµÑколькими облаÑÑ‚Ñми раÑпознаваниÑ
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.1 (11 Ð¸ÑŽÐ½Ñ 2015 г.):
 * ИÑправление отÑутÑÑ‚Ð²Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° при развёртывании окна в Gnome 3
 * Ðовые переводы: китайÑкий (Гонконг), китайÑкий (Тайвань)
 * Обновлённые переводы: руÑÑкий, португальÑкий

gImageReader 3.1 (1 Ð¼Ð°Ñ 2015 г.):
 * Добавление возможноÑти отображать пробелы
 * ВозможноÑть поиÑка и замены только в выделенной чаÑти выходного текÑта
 * Добавление функции поÑтобработки «Ð¡Ð¾Ñ…ранÑть абзацы»
 * ВозможноÑть открывать файлы Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ перетаÑкиваниÑ
 * Улучшение отриÑовки некоторых файлов PDF в интерфейÑе Qt
 * ИÑправление неработающего ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ иÑпользовании некоторых Ñканеров в Windows
 * Поддержка автоматичеÑкой уÑтановки орфографичеÑких Ñловарей в Windows
 * ВозможноÑть ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð² ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² форматах, отличных от PNG
 * ИÑправление неÑкольких ошибок
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.0.1 (4 ÑÐ½Ð²Ð°Ñ€Ñ 2015 г.):
 * ИÑправление ошибки в интерфейÑе Qt при загрузке ÑпиÑка замен из файла
 * Улучшение Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ñ‹Ð²Ð¾Ð² Ñтрок при наличии неÑкольких разрывов Ñтрок
 * Ðебольшие ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа пользователÑ
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.0 (12 Ð´ÐµÐºÐ°Ð±Ñ€Ñ 2014 г.):
 * Ð¡Ñ‚Ð°Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ gImageReader 3.0
 * Ðовый Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Qt4/5 в качеÑтве альтернативы интерфейÑу Gtk
 * ИÑправление ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Windows
 * Запоминание параметров Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (ÑркоÑть, контраÑтноÑть и так далее) при переключении изображений
 * ПоиÑк вперёд и назад, Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ «Ð—аменить вÑÑ‘», чувÑтвительный к региÑтру поиÑк
 * МногочиÑленные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
 * ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð°
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.93 (30 Ð°Ð¿Ñ€ÐµÐ»Ñ 2014 г.):
 * gImageReader 3.0 beta 4
 * Добавление возможноÑти выбора неÑкольких Ñзыков раÑпознаваниÑ
 * Добавление кнопки Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° / ÑÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ результатов
 * ИÑправление аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при загрузке отÑканированного документа
 * ВозможноÑть Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ орфографии Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ контекÑтного меню
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.92 (19 марта 2014 г.):
 * gImageReader 3.0 beta 3
 * Добавление функции ÑпиÑка замен, позволÑющей пользователю указать ÑпиÑок замен Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² раÑпознанном текÑте
 * ИÑправление ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð², приводившего к Ñозданию пуÑтых файлов
 * ИÑправление аварийного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ при отриÑовке файлов PDF
 * Сохранение разрывов Ñтрок, еÑли им предшеÑтвует разрыв Ñтроки
 * ИÑправление неработающей локализации в Windows
 * ПодробноÑти в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.91 (20 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2014 г.):
 * gImageReader 3.0 beta 2
 * Улучшение Ð°Ð²Ñ‚Ð¾Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñтруктуры Ñтраницы путем ÑлиÑÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð¸Ñ…ÑÑ Ð¾Ð±Ð»Ð°Ñтей
 * ИÑпользование ÑобÑтвенных диалогов выбора файлов в Gnome / KDE / Windows
 * ВозможноÑть Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ñтраничного раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ Ð°Ð²Ñ‚Ð¾Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ñтруктуры Ñтраницы
 * ИÑправление ошибки поиÑка / замены, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ‹Ð·Ð²Ð°Ð»Ð° аварийное завершение программы
 * Добавление пакетов Win64
 * ИÑправление некоторых других ошибок, подробноÑти доÑтупны в журнале фикÑации: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.90 (11 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2014 г.):
 * ÐŸÐµÑ€Ð²Ð°Ñ Ð±ÐµÑ‚Ð°-верÑÐ¸Ñ Ð¼Ð°Ñштабно изменившейÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ gImageReader:
   - Поддержка множеÑтвенного выбора (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиши CTRL). Щелчок правой кнопкой мыши по выделению открывает контекÑтное меню, которое позволÑет:
     - УдалÑть и изменÑть порÑдок отдельных выделений.
     - РаÑпознавать выделенный текÑÑ‚ (в буфер обмена или в панель результатов).
   - Базовое автоматичеÑкое определение Ñтруктуры Ñтраницы.
   - Панель результатов теперь поддерживает отмену и повтор.
   - ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ‚ÐµÐ¿ÐµÑ€ÑŒ автоматичеÑкаÑ.
   - Корректное произвольное вращение изображений.
   - Обнаружение удалённых / переименованных файлов.
   - Более проÑтой Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ.
   - Портирование на Gtk+3, перепиÑывание на C++ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ привÑзок Gtkmm.

ИÑпользование

Открытие и импорт изображений

  • Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ открывать / импортировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ панели иÑточников, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€ÑƒÐµÑ‚ÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ верхней левой кнопки на главной панели инÑтрументов.
  • Чтобы открыть ÑущеÑтвующее изображение или документ PDF, нажмите кнопку «ÐžÑ‚крыть» на вкладке «Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ».
  • Чтобы Ñделать Ñнимок Ñкрана, вÑтавить данные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· буфера обмена или открыть недавно открытый файл, щёлкните по Ñтрелке Ñ€Ñдом Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ «ÐžÑ‚крыть».
  • СпиÑком открытых изображений можно управлÑть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопок Ñ€Ñдом Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ «ÐžÑ‚крыть». Временные файлы (например, Ñнимки Ñкрана и данные буфера обмена) автоматичеÑки удалÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ выходе из программы.
  • Чтобы получить изображение Ñ ÑƒÑтройÑтва ÑканированиÑ, выберите на панели «Ð˜Ñточники» вкладку «Ð¡ÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ».

ПроÑмотр и наÑтройка изображений

  • ИÑпользуйте кнопки на главной панели инÑтрументов Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð¼Ð°Ñштаба, а также поворота Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° произвольный угол. МаÑштабирование также можно выполнить путём Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора на изображение и прокрутки колеÑа мыши Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей CTRL.
  • ОÑновные инÑтрументы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñми доÑтупны на панели «Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ изображением», ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€ÑƒÐµÑ‚ÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ кнопки «Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ изображением» на главной панели инÑтрументов. ПредоÑтавлÑемые инÑтрументы в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑŽÑ‚ регулировать ÑркоÑть и контраÑтноÑть, а также наÑтраивать разрешение Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ интерполÑции).
  • Можно выбрать неÑколько изображений, чтобы обработать их за один раз (Ñм. ниже).

Подготовка к раÑпознаванию

  • Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ необходимо указать:
    • Входные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°ÑпознаваниÑ).
    • Режим раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ (проÑтой текÑÑ‚ или hOCR, PDF).
    • Язык(и) раÑпознаваниÑ.
  • Входные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑоответÑтвуют выбранным запиÑÑм на вкладке «Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ» на панели «Ð˜Ñточники». ЕÑли выбрано неÑколько изображений, программа будет раÑÑматривать набор изображений как многоÑтраничный документ и предлагать пользователю выбрать, какие Ñтраницы Ñледует обработать при запуÑке раÑпознаваниÑ.
  • Режим раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выбрать в поле Ñо ÑпиÑком «Ð ÐµÐ¶Ð¸Ð¼ раÑпознаваниѻ на главной панели инÑтрументов:
    • Ð’ режиме проÑтого текÑта модуль раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта извлекает только проÑтой текÑÑ‚, без Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ информации о Ñтруктуре.
    • Режим hOCR, PDF позволÑет модулю раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта возвращать раÑпознанный текÑÑ‚ в виде документа hOCR html, который включает информацию о форматировании и Ñтруктуре раÑпознанной Ñтраницы. hOCR ÑвлÑетÑÑ Ñтандартным форматом Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð² раÑпознаваниÑ; документы в Ñтом формате можно иÑпользовать в других приложениÑÑ…, поддерживающих Ñтот Ñтандарт. gImageReader может выполнить дальнейшую обработку документов hOCR, чтобы Ñоздать документ PDF Ð´Ð»Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð² раÑпознаваниÑ.
  • Язык раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выбрать в раÑкрывающемÑÑ Ð¼ÐµÐ½ÑŽ кнопки «Ð Ð°Ñпознать» на главной панели инÑтрументов. ЕÑли Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыка tesseract уÑтановлен орфографичеÑкий Ñловарь, можно выбрать один из доÑтупных региональных вариантов Ñзыка. Это повлиÑет только на Ñзык проверки орфографии раÑпознанного текÑта. ÐераÑпознанные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков tesseract будут отображатьÑÑ Ð¿Ð¾ их файловому префикÑу, однако можно обучить программу раÑпознавать такие файлы, определив ÑоответÑтвующие правила в конфигурации программы (Ñм. ниже). Чтобы указать Ñразу неÑколько Ñзыков раÑпознаваниÑ, выберите в раÑкрывающемÑÑ Ð¼ÐµÐ½ÑŽ подменю «ÐеÑколько Ñзыков». УÑтановленными определениÑми Ñзыков tesseract можно управлÑть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пункта «Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ñзыками...» в раÑкрывающемÑÑ Ð¼ÐµÐ½ÑŽ кнопки «Ð Ð°Ñпознать» (Ñм. также ниже).

РаÑпознавание и поÑтобработка в режиме «ÐŸÑ€Ð¾Ñтой текÑÑ‚»

  • ОблаÑти Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выбрать путём перетаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (щелчок левой кнопкой мыши + перемещение мыши) прÑмоугольной облаÑти вокруг чаÑтей изображениÑ. Чтобы выбрать неÑколько облаÑтей, удерживайте клавишу CTRL во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°.
  • Также можно воÑпользоватьÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ автоматичеÑкого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñтруктуры, доÑтупной на главной панели инÑтрументов; при нажатии Ñтой кнопки будет выполнена попытка автоматичеÑки определить ÑоответÑтвующие облаÑти раÑпознаваниÑ, а также при необходимоÑти наÑтроить поворот изображениÑ.
  • Чтобы удалить выделенную облаÑть или изменить порÑдок её раÑпознаваниÑ, воÑпользуйтеÑÑŒ контекÑтным меню (Ð´Ð»Ñ ÐµÐ³Ð¾ вызова щёлкните по выделенной облаÑти правой кнопкой мыши). Также можно изменить размер ÑущеÑтвующих выделенных облаÑтей, перетаÑÐºÐ¸Ð²Ð°Ñ ÑƒÐ³Ð»Ñ‹ прÑмоугольника выделениÑ.
  • Выделенные чаÑти Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (или вÑÑ‘ изображение, еÑли облаÑти не выбраны) можно раÑпознать, нажав кнопку «Ð Ð°Ñпознать» на главной панели инÑтрументов. Кроме того, можно раÑпознавать облаÑти по отдельноÑти, Ñ‰Ñ‘Ð»ÐºÐ°Ñ Ð¿Ð¾ ним правой кнопкой мыши и Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð² поÑвившемÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтном меню ÑоответÑтвующую команду. КонтекÑтное меню выделенной облаÑти также позволÑет перенаправить раÑпознанный текÑÑ‚ в буфер обмена, а не на панель результатов.
  • ЕÑли Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð¾ неÑколько Ñтраниц, программа позволÑет пользователю выбрать один из двух вариантов раÑпознаваниÑ: раÑпознать выделенные вручную облаÑти Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ отдельной Ñтраницы или выполнить на каждой Ñтранице анализ Ñтруктуры Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ ÑоответÑтвующих облаÑтей раÑпознаваниÑ.
  • РаÑпознанный текÑÑ‚ поÑвитÑÑ Ð½Ð° панели результатов (еÑли только текÑÑ‚ не был перенаправлен в буфер обмена), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки отображаетÑÑ Ð¿Ð¾ завершении раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта.
  • ЕÑли Ð´Ð»Ñ Ñзыка раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ñтупен орфографичеÑкий Ñловарь, Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ текÑта будет включена автоматичеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° орфографии. ИÑпользуемый орфографичеÑкий Ñловарь можно изменить либо Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ меню Ñзыка Ñ€Ñдом Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ «Ð Ð°Ñпознать», либо Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ контекÑтного меню, которое поÑвлÑетÑÑ Ð¿Ñ€Ð¸ щелчке правой кнопкой мыши в текÑтовой облаÑти.
  • При раÑпознавании дополнительного текÑта он либо добавлÑетÑÑ Ðº уже имеющемуÑÑ Ñ‚ÐµÐºÑту, либо вÑтавлÑетÑÑ Ð² позиции курÑора, либо заменÑет предыдущее Ñодержимое текÑтового буфера в завиÑимоÑти от режима, выбранного в меню режима добавлениÑ, которое доÑтупно на панели инÑтрументов панели результатов.
  • Прочие инÑтрументы поÑтобработки позволÑÑŽÑ‚ удалÑть разрывы Ñтрок, Ñжимать пробелы и выполнÑть многие другие дейÑÑ‚Ð²Ð¸Ñ (доÑтупны по нажатию второй кнопки на панели инÑтрументов панели результатов), а также поиÑк и замену текÑта. СпиÑок правил поиÑка и замены можно определить, нажав Ñначала кнопку «Ðайти и заменить» на панели инÑтрументов панели результатов, а затем — кнопку «Ð—амены».
  • Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² текÑтовом буфере можно отменить или вернуть, нажав ÑоответÑтвующие кнопки на панели инÑтрументов панели результатов.
  • Чтобы Ñохранить Ñодержимое текÑтового буфера в файл, нажмите кнопку «Ð¡Ð¾Ñ…ранить результаты» на панели инÑтрументов панели результатов.

РаÑпознавание и поÑтобработка в режиме «hOCR, PDF»

  • Ð’ режиме hOCR Ñтраница выбранного иÑточника (иÑточников) вÑегда раÑпознаётÑÑ Ñ†ÐµÐ»Ð¸ÐºÐ¾Ð¼.
  • Результат раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлен на панели результатов в виде древовидной Ñтруктуры, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð´ÐµÐ»ÑетÑÑ Ð½Ð° Ñтраницы, абзацы, текÑтовые Ñтроки, Ñлова и графику.
  • При выборе Ñлемента в древовидной Ñтруктуре на изображении выделÑетÑÑ ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¾Ð±Ð»Ð°Ñть. Кроме того, на вкладке «Ð¡Ð²Ð¾Ð¹Ñтва» под деревом документа будут показаны ÑвойÑтва Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñтруктуры Ñтого Ñлемента. Ðеобработанный иÑточник hOCR отображаетÑÑ Ð½Ð° вкладке «Ð˜Ñточник» под деревом документа.
  • Чтобы изменить текÑÑ‚ в дереве документа, Ñделайте двойной щелчок по ÑоответÑтвующему Ñлову. ЕÑли Ñлово напиÑано Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹, оно будет выделено краÑным цветом. При щелчке правой кнопкой мыши по Ñлову в дереве документа отобразитÑÑ Ð¼ÐµÐ½ÑŽ Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð°Ð¼Ð¸ напиÑаниÑ.
  • Чтобы изменить ÑвойÑтва выбранного Ñлемента, Ñделайте двойной щелчок по нужному значению ÑоответÑтвующего ÑвойÑтва на вкладке «Ð¡Ð²Ð¾Ð¹Ñтва». Ð”Ð»Ñ Ñ‚ÐµÐºÑта доÑтупны такие дейÑтвиÑ, как наÑтройка ограничивающей облаÑти, изменение Ñзыка и размера шрифта. Выбранный на Ñтой вкладке Ñзык также определÑет и Ñзык, иÑпользуемый Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ правопиÑÐ°Ð½Ð¸Ñ ÑоответÑтвующего Ñлова. ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¾Ð±Ð»Ð°Ñть также может быть изменена путём Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° прÑмоугольника Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° холÑте.
  • СоÑедние Ñлова можно объединить, щёлкнув правой кнопкой мыши по ÑоответÑтвующим выбранным Ñлементам.
  • Чтобы удалить из документа произвольный Ñлемент, щёлкните по нему правой кнопкой мыши.
  • Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… графичеÑких облаÑтей Ñледует выбрать в контекÑтном меню Ñтраницы пункт «Ð”обавить графичеÑкую облаÑть» и начертить на холÑте прÑмоугольник.
  • Дерево документа можно Ñохранить как документ hOCR HTML Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «Ð¡Ð¾Ñ…ранить как текÑÑ‚ hOCR» на панели инÑтрументов панели результатов. СущеÑтвующие документы можно импортировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «ÐžÑ‚крыть файл hOCR» на панели инÑтрументов панели результатов.
  • Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² PDF Ñледует иÑпользовать меню «Ð­ÐºÑпорт в PDF» на панели инÑтрументов панели результатов. ДоÑтупны два режима:
    • Ð’ режиме «PDF» будет Ñоздан реконÑтруированный документ PDF Ñ Ñ‚Ð¾Ð¹ же Ñтруктурой и графикой, что и у иÑходного документа.
    • Ð’ режиме «PDF Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ‹Ð¼ наложенным текÑтом» будет Ñоздан документ PDF Ñ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ñ‘Ð½Ð½Ñ‹Ð¼ иÑходным изображением в качеÑтве фона и невидимым (но доÑтупным Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°) текÑтом, наложенным поверх ÑоответÑтвующего иÑходного текÑта изображениÑ. Этот режим ÑкÑпорта полезен Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°, который визуально идентичен входному, но поддерживает поиÑк и выбор текÑта.
  • При ÑкÑпорте в PDF пользователю будет предложено выбрать ÑемейÑтво шрифтов Ð´Ð»Ñ Ð¸ÑпользованиÑ, а также то, Ñледует ли Ñохранить размеры шрифтов, определённые модулем раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта, и Ñледует ли уравнÑть интервалы между Ñтроками текÑта. Кроме того, пользователь может выбрать цветовой формат, разрешение и метод ÑжатиÑ, которые будут иÑпользованы Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ при Ñоздании документа PDF (Ñти параметры позволÑÑŽÑ‚ регулировать размер Ñоздаваемого файла).

Параметры программы

  • Параметры программы доÑтупны в меню программы, которое открываетÑÑ Ð¿Ñ€Ð¸ нажатии Ñамой правой кнопки на главной панели инÑтрументов. При запуÑке программы в Ñреде рабочего Ñтола Gnome 3 меню программы ÑвлÑетÑÑ Ñ‡Ð°Ñтью верхней панели оболочки рабочего Ñтола.
  • Параметры наÑтройки позволÑÑŽÑ‚ задать шрифт панели результатов, а также определить, будет ли программа уведомлÑть о недоÑтающих орфографичеÑких ÑловарÑÑ… и наличии новых верÑий программы.
  • При иÑпользовании интерфейÑа Gtk+ параметры также позволÑÑŽÑ‚ уÑтановить раÑположение панели результатов (еÑли выбрано вертикальное раÑположение, она будет занимать правую чаÑть окна программы, еÑли горизонтальное — нижнюю чаÑть). При иÑпользовании интерфейÑа Qt положение панели результатов можно изменÑть, перетаÑÐºÐ¸Ð²Ð°Ñ ÐµÑ‘ за заголовок.
  • Параметр «Ð Ð°Ñположение Ñзыковых данных» предоÑтавлÑет выбор между хранением определений Ñзыков tesseract и орфографичеÑких Ñловарей в общеÑиÑтемных (например, %ProgramFiles% в Windows или раÑположенный ниже /usr каталог в Linux) или локальных (раÑположенных ниже домашнего каталога текущего пользователÑ) каталогах. Это полезно, еÑли пользователь не имеет прав на запиÑÑŒ в ÑиÑтемных раÑположениÑÑ….
  • Кроме того, можно определить новые правила Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ð¹ Ñзыков tesseract Ñ Ñзыком (к Ñожалению, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков tesseract не включают Ñту информацию). СпиÑок предопределённых правил можно проÑмотреть в разделе «Ð—аданные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков». Дополнительные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавить, нажав раÑположенную ниже кнопку «Ð”обавить». Правила Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыка, ÑоÑтоÑщего из трех полей, таковы:
    • Файловый префикÑ: Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ñзыковых данных tesseract имеет формат <префикÑ>.traineddata; например, Ð´Ð»Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого Ñзыка файл будет называтьÑÑ eng.traineddata (префикÑом ÑвлÑетÑÑ eng).
    • Код ISO: Ñто код Ñзыка ISO 639-1 (например, en), опционально объединённый Ñ ÐºÐ¾Ð´Ð¾Ð¼ Ñтраны ISO 3166-2 Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¿Ð¾Ð´Ñ‡Ñ‘Ñ€ÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (например, en_US). Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð° Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑких Ñловарей Ñ Ñзыком. Выбор фактичеÑкого кода Ñтраны не ÑвлÑетÑÑ Ð¾Ð±Ñзательным уÑловием работы программы, но Ñто необходимо Ñделать Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы при автоматичеÑкой уÑтановке орфографичеÑких Ñловарей был найден ÑоответÑтвующий пакет Ñловарей. ЕÑли в ÑпиÑке нет подходÑщего варианта, код можно придумать. Это не окажет влиÑÐ½Ð¸Ñ Ð½Ð° работу программы (за иÑключением того, что указанному Ñзыку не будут ÑопоÑтавлены ÑоответÑтвующие орфографичеÑкие Ñловари).
    • Самоназвание Ñзыка: Самоназвание Ñзыка проÑто определÑет название запиÑи Ñзыка в Ñзыковом меню.

УÑтановка определений Ñзыков tesseract

  • Менеджер tessdata, доÑтуп к которому можно получить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ раÑкрывающегоÑÑ Ð¼ÐµÐ½ÑŽ кнопки «Ð Ð°Ñпознать» на главной панели инÑтрументов, позволÑет пользователю управлÑть доÑтупными Ñзыками раÑпознаваниÑ.
  • УÑтановка Ñзыков вручную:
    • Ð’ Linux доÑтаточно уÑтановить пакет, ÑоответÑтвующий определению нужного Ñзыка, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ (пакеты могут называтьÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð½Ð¾ так: tesseract-langpack-<Ñзык>).
    • Ð’ Windows Ñледует Ñначала проверить в диалоговом окне gImageReader «Ðž программе», ÐºÐ°ÐºÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ tesseract иÑпользуетÑÑ.
      • ЕÑли иÑпользуетÑÑ tesseract 4.x, перейдите на веб-Ñайт https://github.com/tesseract-ocr/tessdata_fast.
      • ЕÑли иÑпользуетÑÑ tesseract 3.x или более раннÑÑ Ð²ÐµÑ€ÑиÑ, перейдите на веб-Ñайт https://github.com/tesseract-ocr/tessdata.
      Затем нажмите кнопку выбора ветви и по тегам выберите верÑию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ð¸Ð¶Ðµ или равна иÑпользуемой верÑии tesseract. Далее загрузите нужные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков (*.traineddata вмеÑте Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼Ð¸ файлами, которые требуютÑÑ Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ñ… Ñзыков) и Ñохраните их: ПуÑк→ВÑе программы→gImageReaderâ†’ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков tesseract.
  • Чтобы повторно определить доÑтупные Ñзыки, можно перезапуÑтить программу или выбрать в меню программы пункт «ÐŸÐ¾Ð²Ñ‚орить обнаружение Ñзыков».

УÑтановка орфографичеÑких Ñловарей

  • При работе в Linux, еÑли ваш диÑтрибутив поддерживает PackageKit, программа при необходимоÑти предложит автоматичеÑки уÑтановить отÑутÑтвующие Ñловари. ЕÑли автоматичеÑÐºÐ°Ñ ÑƒÑтановка по какой-либо причине не работает, вы можете уÑтановить орфографичеÑкие Ñловари Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ (пакеты могут называтьÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð½Ð¾ так: hunspell-<Ñзык>).
  • При работе в Windows программа попытаетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки загрузить нужный орфографичеÑкий Ñловарь Ñ Ð²ÐµÐ±-Ñайта http://cgit.freedesktop.org/libreoffice/dictionaries/tree. Словари также могут быть уÑтановлены вручную: загрузите файлы *.dic и *.aff Ð´Ð»Ñ Ð½ÑƒÐ¶Ð½Ð¾Ð³Ð¾ Ñзыка (например, it_IT) и Ñохраните их: ПуÑк→ВÑе программы→gImageReader→ОрфографичеÑкие Ñловари.

УчаÑтие

Чтобы принÑть учаÑтие в развитии программы, пожалуйÑта, размеÑтите ваше обращение и/или Ñоздайте Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° включение внеÑённых вами изменений на Ñтранице проекта на Ñайте GitHub или ÑвÑжитеÑÑŒ Ñо мной по адреÑу manisandro@gmail.com. Я был бы оÑобенно рад переводам — вот оÑновные шаги Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð°:

  1. Загрузите поÑледний архив Ñ Ð¸Ñходными файлами.
  2. Откройте папку po.
  3. Чтобы Ñоздать новый перевод, Ñкопируйте файл gimagereader.pot в файл <Ñзык>.po (например, файл de.po Ð´Ð»Ñ Ð½ÐµÐ¼ÐµÑ†ÐºÐ¾Ð³Ð¾ Ñзыка). Чтобы отредактировать ÑущеÑтвующий перевод, проÑто выберите ÑоответÑтвующий файл.
  4. Переведите Ñтроки в файле <Ñзык>.po.
  5. Отправьте файл .po по адреÑу manisandro@gmail.com. СпаÑибо!

Отладка и поддержка

ЕÑли вы нашли ошибку или у Ð²Ð°Ñ ÐµÑть предложение, пожалуйÑта, размеÑтите ваше обращение в ÑиÑтеме отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº gImageReader или ÑвÑжитеÑÑŒ Ñо мной напрÑмую по адреÑу manisandro@gmail.com. Ðе забудьте также ознакомитьÑÑ Ñ FAQ. ЕÑли программа аварийно завершаетÑÑ Ð¸Ð»Ð¸ завиÑает, пожалуйÑта, также попробуйте включить в ваше обращение или пиÑьмо Ñледующую информацию:

  • ЕÑли поÑвлÑетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно обработчика ошибок, включите показанную в нём отладочную информацию (Ñтек вызовов функций). Чтобы обеÑпечить полноту Ñтой информации в Ñлучае работы в Linux, убедитеÑÑŒ, что уÑтановлен отладчик gdb и ÑоответÑтвующие отладочные Ñимволы. Пакет, Ñодержащий отладочные Ñимволы, обычно называетÑÑ <имÑ_пакета>-debuginfo или <имÑ_пакета>-dbg. ЕÑли вы иÑпользуете программу в Windows, некоторые Ñимволы отладки будут уже уÑтановлены по умолчанию.
  • При работе в Windows Ñледует включить файлы журнала %ProgramFiles%\gImageReader\gimagereader.log и %ProgramFiles%\gImageReader\twain.log.
  • При работе в Linux Ñледует запуÑтить программу Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð° и включить вывод, который поÑвлÑетÑÑ Ð² нём.
  • ПоÑтарайтеÑÑŒ как можно лучше опиÑать, что вы делали и воÑпроизводима ли проблема.

ÐвторÑкое право © Sandro Mani, 2009—2019, редакциÑ: чт., 25 Ð¸ÑŽÐ»Ñ 2019 г.

gImageReader-3.4.0/data/manual.html.in000066400000000000000000000772041417507262200175330ustar00rootroot00000000000000 @PACKAGE_NAME@ @PACKAGE_VERSION@ Manual

@PACKAGE_NAME@ @PACKAGE_VERSION@ Manual

Contents

About

gImageReader is a frontend to tesseract-ocr written in C++.

Features

  • Import PDF documents and images from disk, scanning devices, clipboard and screenshots
  • Process multiple images and documents in one go
  • Manual or automatic recognition area definition
  • Recognize to plain text or to hOCR documents
  • Recognized text displayed directly next to the image
  • Post-process the recognized text, including spellchecking
  • Generate PDF documents from hOCR documents

News

A detailed list of changes can be found in the commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.4.0 (Jan 28 2022):
* Add support for tesseract 5.0
* Add Qt6 support
* Add thumbail view for source documents
* Add batch mode for recognizing multiple documents
* Display sources in a tree
* Allow opening output files directly from the source tree if they exist next to the source with the same basename
* Allow moving image selection boxes
* Text: Add multi-tab support
* HOCR: Allow specifying whether new output is inserted/appended
* HOCR: Allow opening multiple files at once, also from command line
* HOCR: Add proof-reading widget (Qt interface only)
* HOCR: New batch export dialog
* HOCR: Add quick navigation for low confidence words

gImageReader 3.3.1 (Jul 28 2019):
* HOCR: propagate attributes to manually added elements (@foghawk)
* HOCR: improve spelling of hyphenated words (@foghawk)
* HOCR: improve spelling of words with special characters (@foghawk)
* HOCR: allow specifying a DPI to assume for image sources when exporting to PDF (@foghawk)
* HOCR: allow use to choose whether to sanitize hyphens when exporting to PDF
* HOCR: Attempt to map 639-2 language codes to ISO 639-1 to set spelling language
* Allow specifying character whitelist / blacklist for recognition
* Various bugfixes
* Translation updates
* Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.3.0 (Sep 26 2018):
* Support tesseract-4.0.0
* Translation updates
* See 3.2.9x changelogs for all other feature changes since previous stable
* Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.2.99 (Feb 24 2018):
* gImageReader 3.3 beta
* Add support for reading DJVU documents
* Add support for encrypted PDF files
* Rewrite HOCR editor and greatly expand its functionality:
  - Allow displaying confidence values in HOCR tree
  - Allow clicking in the canvas to jump to the corresponding item in the HOCR tree
  - Support mass-editing of HOCR child item attributes from parent
  - Honour font family attributes if possible
  - Honour and allow toggling bold and italic attributes
  - Correctly honour the baseline
  - Add search/replace and substitution list support
  - Add preview mode while editing
  - Allow manually adding lines, words and paragraphs
  - Allow swapping items
  - Automatically adjust parent bounding boxes when resizing and removing children
  - Add navigation toolbar to facilitate navigating through the HOCR tree
  - Use relative paths to source files in HOCR HTML document if source files are on same level or below the HOCR file
  - Add export to text
  - Add export to ODT
  - Allow choosing paper size in PDF export
  - Allow setting document metadata in PDF export
  - Allow setting encryption in PDF export
  - [Qt] Allow using QPrinter as PDF export backend, which has better support for complex scripts

gImageReader 3.2.3 (Jul 01 2017):
* Fix broken hOCR export
* Add option to prepend source filename / page to plain text output

gImageReader 3.2.2 (Jun 30 2017):
* Attempt to use original source image for PDF output
* Allow collapsing/expanding branches of hOCR tree via context menu
* Recognize guillemets as quote characters
* Fix crash when adding zero-page sources
* Fix possible crash when rapidly switching documents
* [Gtk] Fix output pane orientation not properly restored
* [Gtk] Don't crash when rendering of image fails
* [Gtk] Fix icons not appearing with recent Gtk versions
* [Qt] Don't display empty image if rendering of downscaled image fails

gImageReader 3.2.1 (Feb 10 2017):
* Add possibility to rotate individual pages of multipage documents
* Ensure the tessdata manager downloads compatible tesseract language definitions
* Add CCITT Group4 compression option for monochrome PDF export
* Allow choosing between diffuse and threshold dithering for monochrome PDF export
* Preview JPEG compression quality in PDF output preview
* Make brightness/contrast/resolution changes affect all selected sources
* [Qt] Support multipage images through QImageReader (Qt5.9+ will support multipage TIFFs)
* [Gtk] Fix hang when saving selection image
* [Qt] Fix possible deadlock when rapidly switching sources
* Updated translations

gImageReader 3.2.0 (Nov 23 2016):
 * gImageReader 3.2.0 stable
 * Add PageUp / PageDown keyboard accelerators for browsing multipage documents
 * See 3.1.9x changelogs for all other feature changes since previous stable
 * Many bug fixes since 3.1.99 - special thanks to Daniel Plakhotich
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.99 (Oct 13 2016):
 * gImageReader 3.2 release candidate
 * General improvements:
   - Catch critical tesseract errors which otherwise result in the application crashing
   - Improve spelling dictionary auto-installation logic
   - Allow choosing whether to store language files (language definitions, spelling dictionaries) in system-wide or user-local directories
 * Plain text mode improvements:
   - Allow recognizing user-defined regions on multiple pages
   - Also treat \u2014 character as a hyphen
   - Make preserve paragraphs option correctly deal with trailing whitespace
 * hOCR editor improvements:
   - Add "Add to dictionary" and "Ignore word" actions to spell-checking menu in hOCR editor
   - Exclude non-word characters from spell-checking
   - Allow merging adjacent word items
   - Allow adjusting bounding boxes of document elements by resizing the selection in the canvas
   - Allow removing arbitrary items from the document tree
   - Allow defining custom graphic regions from context-menu of the respective page item
 * PDF export improvements:
   - Add previewing capability
   - Take into account baseline information to better position the words in the generated PDF
   - Add options to choose color format and compression of images written to PDF, allowing to greatly reduce the size of PDF
   - Correctly handle paper size and DPI
   - Improve logic for uniformizing word and line spacing
   - Make sure correct hyphen character is used, allowing PDF applications to correctly find hyphenated words
 * New and updated translations
 * Various bug fixes
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.91 (May 03 2016):
 * gImageReader 3.2 beta 2
 * Fix crash when editing items in the hOCR editor
 * Fix build with Ubuntu 14.04
 * Updated czech translation
 * Fix some string typos
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.90 (Apr 28 2016):
 * gImageReader 3.2 beta 1
 * Add an initial hOCR editor implementation, with possibility to save as hOCR HTML, PDF with invisible text overlay, or a PDF reconstructed from the extracted text and graphics
 * Allow selecting and working on multiple sources at once
 * Add a tessdata manager, to conveniently manage tesseract language definitions directly from the application
 * Show a progress bar when recognizing, add a cancel button
 * Modernized Gtk UI
 * Expose script and orientation detection support
 * Possibility to pan via middle button drag
 * Remove the need to specify the culture code in custom language definitions, and use a built-in language-culture mapping instead to search for spelling dictionaries
 * Various bug fixes
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.2 (Jun 30 2015):
 * Fix incorrect behavior of "Append to current text" with multiple recognition areas
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.1.1 (Jun 11 2015):
 * Fix titlebar now shown when window maximized in Gnome 3
 * New translations: Chinese (Hong Kong), Chinese (Taiwan)
 * Updated translations: Russian, Portoguese

gImageReader 3.1 (May 1 2015):
 * Add option to draw whitespace
 * Allow searching and replacing only in selected portion of output text
 * Add "preserve paragraphs" postprocessing option
 * Allow to open files via drag and drop
 * Improve rendering of certain PDF files with the Qt interface
 * Fix scanning broken with certain scanners under Windows
 * Support automatic spelling dictionary installation under Windows
 * Allow saving scans in other formats than png
 * Handful of bugs fixed
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.0.1 (Jan 4 2015):
 * Fix a bug in the Qt interface when loading substitutions list from file
 * Improve behaviour of strip line breaks functionality with multiple line breaks
 * Small UI improvements
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 3.0 (Dec 12 2014):
 * gImageReader 3.0 stable
 * New Qt4/5 interface, as alternative to the Gtk interface
 * Fixed scanning on Windows
 * Memorize image settings (brightness, contrast, etc) when switching images
 * Search forward and backward, replace all, case sensitive search
 * Many bug fixes
 * Translation updates
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.93 (Apr 30 2014):
 * gImageReader 3.0 beta 4
 * Add possibility to choose multiple recognition languages
 * Add button to show/hide output pane
 * Fix a crash when loading a scanned document
 * Allow toggling spell checking from context menu
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.92 (Mar 19 2014):
 * gImageReader 3.0 beta 3
 * Add replacement-list feature, allowing the user to specify a list of replacements to perform on the recognized text
 * Fix saving output resulting in empty files
 * Fix crashes when rendering PDF files
 * Keep line-breaks if preeded by line-break
 * Fix localization not working on Windows
 * Full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.91 (Feb 20 2014):
 * gImageReader 3.0 beta 2
 * Improve page-layout autodetection by merging overlapping regions
 * Use native file-chooser dialogs on Gnome/KDE/Windows
 * Allow performing multipage-recognition with page-layout autodetection
 * Fix broken search/replace which caused the application to crash
 * Add Win64 packages
 * Fix some other bugs, full details in commit log: https://github.com/manisandro/gImageReader/commits/master

gImageReader 2.90 (Feb 11 2014):
 * First beta of the grand new gImageReader:
   - Support multiple selections (via CTRL-key). Rightclicking a selection opens a context menu which allows to:
     - Deleted and reordered individual selections.
     - Recognize the selected text, either to clipboard or to the output pane.
   - Basic automatic page layout detection.
   - The output pane now supports undo and redo.
   - Configuration is now automatic.
   - Proper arbitrary rotation of images.
   - Detect deleted/renamed files.
   - Cleaner UI.
   - Port to Gtk+3, rewrite in C++ using the Gtkmm bindings.

Usage

Opening and importing images

  • Images can be opened/imported from the sources pane, which is activated by clicking on the top-left button in the main toolbar.
  • To open an existing image or PDF document, click on the open button in the images tab.
  • To capture a screenshot, paste image data from the clipboard, or open a recently opened file, click on the arrow next to the open button.
  • You can manage the list of opened images with the buttons next to the open button. Temporary files (such as screenshots and clipboard data) are automatically deleted when the program exists.
  • To acquire an image from a scanning device, click on the acquire tab in the sources pane.
  • If an existing output text/html document exists next to a source document, an icon is displayed next to that document in the source tree allowing to open the existing output directly.
  • The Thumbnails section in the lower part of the source tree will display the thumbnails of the selected documents in the source tree.

Viewing and adjusting images

  • Use the buttons in the main toolbar to zoom in and out as well as rotate the image by an arbitrary angle. Zooming can also be performed by scrolling on the image with the CTRL key pressed.
  • Basic image manipulation tools are provided in the image controls toolbar, which is activated by clicking on the image controls button in the main toolbar. The provided tools currently allow brightness and contrast adjustments as well as adjusting the image resolution (through interpolation).
  • Multiple images can be selected, which allowes the user to process multiple images in one go (see below).

Preparing for recognition

  • To perform OCR on an image, the user needs to specify:
    • The input images (e.g. images to recognize),
    • The recognition mode (e.g. plain text vs hOCR, PDF)
    • The recognition language(s).
  • The input images correspond to the selected entries in the images tab in the sources pane. If multiple images are selected, the program will treat the set of images as multipage document and ask the user which pages to process when recognition is started.
  • The recognition mode can be selected in the OCR mode combobox in the main toolbar:
    • The plain text mode makes the OCR engine extract only the plain text, without formatting and layout information.
    • The hOCR, PDF mode makes the OCR engine return the recognized text as a hOCR html document, which includes formatting and layout information for the recognized page. hOCR is a standard format for storing recognition results and can be used to interoperate with other application supporting this standard. gImageReader can process hOCR documents further to generate a PDF document for the recognition result.
  • The recognition language can be selected from the drop-down menu of the recognize button in the main toolbar. If a spelling dictionary is installed for a tesseract language definition, it is possible to choose between available regional flavors of the language. This will only affect the language for spell-checking the recognized text. Unrecognized tesseract language definitions will appear by their filename prefix, one can however teach the program to recognize such files by defining appropriate rules in the program configuration (see below). Multiple recognition languages can be specified at once from the Multilingual submenu of the drop-down menu. The installed tesseract language definitions can be managed from the Manage languages... menu entry in the drop-down menu of the recognize button, see also below.
  • When selecting multiple documents in the source pane, the Batch mode option appears when pressing the recognize button. This mode processes all selected documents and writes the output next to the source file.

Recognizing and post-processing in plain text mode

  • Areas to be recognized can be selected by dragging (left click + mouse move) a rectangular area around portions of the image. Multiple selections are possible by pressing the CTRL key while selecting.
  • Alternatively, the automatic layout detection button, accessible from the main toolbar will attempt to automatically define appropriate recognition areas, as well as adjust the rotation of the image if necessary.
  • Selections can be deleted and reordered via the context menu which appears when right-clicking on them. It is also possible to resize existing selections by dragging the corners of the selection rectangle.
  • The selected portions of the image (or the entire image, if no selections are defined) can be recognized by pressing on the recognize button in the main toolbar. Alternatively, individual areas can be recognized by right-clicking a selection. From the selection context menu, it is also possible to redirect the recognized text to the clipboard, instead of the output pane.
  • If multiple pages are selected for recognition, the program allows the user to choose between either recognizing the full resp. manually selected area for each individual page, or performing a page-layout analysis on each page to automatically detect appropriate recognition areas.
  • Recognized text will appear in the output pane (unless the text was redirected to the clipboard), which is shown automatically as soon as some text was recognized.
  • If a spelling dictionary for the recognition language is available, automatic spell-checking will be enabled for the outputted text. The used spelling dictionary can be changed either from the language menu next to the recognize button, or from the menu which appears when right-clicking in the text area.
  • When additional text is recognized, it will either get appended, inserted at cursor position, or replace the previous content of the text buffer, depending on the mode selected in the append mode menu, which can be found in the output pane toolbar.
  • Other post-processing tools include stripping line breaks, collapsing spaces and more (available from the second button in the output pane toolbar), as well as searching and replacing text. A list of search and replace rules can be defined by clicking on the Find and replace button in the output pane toolbar and then clicking on the Substitutions button.
  • Changes to the text buffer can be undone and redone by clicking on the appropriate buttons in the output pane toolbar.
  • The contents of the text buffer can be saved to a file by clicking on the save button in the output pane toolbar.

Recognizing and post-processing in hOCR, PDF mode

  • In hOCR mode, always the entire page of the selected source(s) is recognized.
  • The recognition result is presented in the output pane as a tree-structure, divided in pages, paragraphs, textlines, words and graphics.
  • When an entry in the tree-structure is selected, the corresponding area is highlighted in the image. Additionally, formatting and layout properties of the entry are shown in the Properties tab below the document tree. The raw hOCR source is visible in the Source tab below the document tree.
  • The word text in the document tree can be edited by double-clicking the respective word entry. If a word is mis-spelled, it will be rendered red. Right-clicking a word in the document tree will show a menu with spelling suggestions.
  • Properties for a selected entry can be modified by double clicking the desired property value in the Properties tab. Interesting actions for text entries are tweaking the bounding area, changing the language and modifying the font size. The language property also definies the spelling language used to check the respective word. The bounding area can also be edited by resizing the selection rectangle in the canvas.
  • Adjacent word items can be merged by rightclicking the respective selected items.
  • Arbitrary items can be removed from the document via right-click on the respective item.
  • New graphic areas can be defined by selecting the Add graphic region entry of the context menu of the respective page item and drawing a rectangle on the canvas.
  • The document tree can be saved as a hOCR HTML document via the Save as hOCR text button in the output pane toolbar. Existing documents can be imported via the Open hOCR file button in the output pane toolbar.
  • PDF files can be generated from the PDF export menu in the output pane toolbar. Two modes are available:
    • PDF will generate a reconstructed PDF the same layout and graphics/pictures as the source document.
    • PDF with invisible text overlay will generate a PDF with the unmodified source image as background and invisible (but selectable) text overlaid above the respective source text in the image. This export mode is useful for generating a document which is visually identical to the input, but with searchable and selectable text.
  • When exporting to PDF, the user is prompted for the font family to use, whether to honour the font sizes detected by the OCR engine, and whether to attempt to homogenize the text line spacing. Also, the user can select the color format, resolution and compression method to use for images in the PDF document to control the size of the generated output.
  • Besides PDF, the hOCR document can also be exported to plain text and ODT.
  • The HOCR Batch Export button in the main toolbar allows batch-exporting a collection of hOCR HTML files to PDF/ODT/Text. All hOCR HTML files below the selected source folder are processed and corresponding PDF/ODT/Text files are written next to the HTML files. The Group outputs of N lowest levels option allows specifing that the HTML files of the N lowest hierarchy levels of the source tree are stored into a single exported PDF/ODT/Text file N folder levels above the lowest level.

Program options

  • The program options can be accessed from the application menu, which opens when clicking the right-most button of the main toolbar. When running the application within the Gnome 3 desktop environment, the application menu is part of the top bar of the desktop shell.
  • Options allow setting the font of the output pane, as well as determining whether the application will notify about missing spelling dictionaries and new program versions.
  • When running the Gtk+ interface, the options also allow setting the orientation of the output pane (if vertical, it will occupy the right portion of the application, if horizontal, it will occupy the lower portion). When running the Qt interface, the position of the output pane can be freely moved around by dragging on the title bar of the output pane.
  • The language data location setting allows to control whether tesseract language definitions and spelling dictionaries are saved in system-wide (i.e. %ProgramFiles% under Windows or typically below /usr on Linux) or user-local (i.e. below the current user's home directory) directories. This is useful if the user does not have writing privileges in system-wide locations.
  • Additionally, one can define new rules to match tesseract language definitions to a language (unfortunately, the tesseract language definitions do not include this information). The list of predefined rules can be seen in the Predefined language definitions section. Additional definitions can be added clicking on the Add button below. The rules for a language definition, which consists of three fields, are as follows:
    • Filename prefix: The filename of tesseract language data files is of the format <prefix>.traineddata, i.e. for English, the file is called eng.traineddata and the prefix is eng.
    • ISO code: This is the ISO 639-1 language code (i.e. en), optionally combined by an underscore with the ISO 3166-2 country code (i.e. en_US). This information is necessary to match spelling dictionaries to the language. The choice of the actual country code is not strictly relevant, but it is necessary for the automatic installation of spelling dictionaries to find a relevant package of dictionaries. This code can also be made up if no appropriate choices exist, the only result being that no relevant spelling-dictionaries will be matched with the language.
    • Native name: The native name of the language simply determines the label of the entry for the language in the language menu.

Installation of tesseract language definitions

  • The Tessdata manager, available from the drop-down menu of the recognize button in the main toolbar allows the user to manage the available recognition languages.
  • To install the languages manually:
    • On Linux, it's sufficient to install the package corresponding to the language definition one wants to install via the package management application (the packages may be called something like tesseract-langpack-<lang>).
    • On Windows, first, in the gImageReader about dialog, check which version of tesseract is used. Then, in the branch selection button, under tags, select the version which is less or equal the tesseract version in use. Then download the desired language definitions (*.traineddata along with any supplementary files which certain languages need) and save them to Start→All Programs→gImageReader→Tesseract language definitions.
  • To re-detect the available languages, one can restart the program, or select Redetect Languages from the application menu.

Installation of spelling dictionaries

  • On Linux, if your distribution supports PackageKit, the program will offer to automatically install missing dictionaries when necessary. If automatic installation does not work for some reason, you can install the spelling dictionaries from the package management application (the packages may be called something like hunspell-<lang>).
  • On Windows, the program will attempt to automatically download the desired spelling dictionary from http://cgit.freedesktop.org/libreoffice/dictionaries/tree. Dictionaries can also be installed manually: for a desired language (i.e. it_IT), download the *.dic and *.aff files and place them in Start→All Programs→gImageReader→Spelling dictionaries.

Contributing

For suggestions and contributions of any kind, please file tickets and/or pull-requests on the GitHub project page, or contact me at manisandro@gmail.com. I'd especially appreciate translations - here are the main steps for creating a translation:

  1. Download the latest source archive.
  2. Enter the po folder.
  3. To create a new translation, copy the gimagereader.pot file to <language>.po (i.e. de.po for German). To edit an existing translation, simply pick the corresponding file.
  4. Translate the strings in <language>.po.
  5. Send the po file to manisandro@gmail.com. Thanks!

Debugging and support

If you find an issue or have a suggestion, please file a ticket to the gImageReader issue tracker, or contact me directly at manisandro@gmail.com. Be sure to also consult the FAQ. If you are experiencing crashes or hangs, please also try to include the following information in the ticket/email:

  • If the crash handler appears, include the backtrace which is shown there. To make sure that the backtrace is complete, if you are running the application under Linux, make sure that the gdb debugger as well as the debugging symbols are installed if your distribution provides them. The package containing the debugging symbols is usually called <packagename>-debuginfo or <packagename>-dbg. If you are running the application under Windows, some debugging symbols are installed by default.
  • If you are running under Windows, include the %ProgramFiles%\gImageReader\gimagereader.log and %ProgramFiles%\gImageReader\twain.log log files.
  • If you are running under Linux, run the application from a terminal and include any output which appears on the terminal.
  • Try to describe as best as you can what you were doing and whether the problem is reproducible.

Copyright ©2009-2022 Sandro Mani, revision: Frid, Jan 28 2022

gImageReader-3.4.0/docs/000077500000000000000000000000001417507262200147705ustar00rootroot00000000000000gImageReader-3.4.0/docs/1_Installation.he.md000066400000000000000000000032051417507262200205660ustar00rootroot00000000000000# התקנה ## עבור מערכות הפעלה - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/windows.png) **Windows**: הורד מ- [×תר שחרורי×](https://github.com/manisandro/gImageReader/releases) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/fedora.png) **Fedora**: זמין ב×תר [מ××’×¨×™× ×¨×©×ž×™×™×](https://apps.fedoraproject.org/packages/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/debian.png) **Debian**: זמין ב×תר [מ××’×¨×™× ×¨×©×ž×™×™×](https://packages.debian.org/unstable/main/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/ubuntu.png) **Ubuntu**: זמין ב×תר [ppa:sandromani/gimagereader](https://launchpad.net/~sandromani/+archive/ubuntu/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/opensuse.png) **OpenSUSE**: זמין ב×תר [OpenSUSE Build Service](https://build.opensuse.org/project/show/home:sandromani) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/arch.png) **ArchLinux**: זמין ב×תר [מ××’×¨×™× ×§×”×™×œ×ª×™×™×](https://www.archlinux.org/packages/community/x86_64/gimagereader/) ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/source.png) **Source**: הורד מ- [×תר שחרורי×](https://github.com/manisandro/gImageReader/releases) ## הידור ×× ×ª×¨×¦×” להדר ×ת gImageReader מהמקור, [בצע ×ת הפעולות הב×ות](https://github.com/manisandro/gImageReader/wiki/Compiling-gImageReader). gImageReader-3.4.0/docs/1_Installation.md000066400000000000000000000030761417507262200202010ustar00rootroot00000000000000# Installation ## For OS - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/windows.png) **Windows**: Download from the [releases page](https://github.com/manisandro/gImageReader/releases) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/fedora.png) **Fedora**: Available from the [official repositories](https://apps.fedoraproject.org/packages/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/debian.png) **Debian**: Available from the [official repositories](https://packages.debian.org/unstable/main/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/ubuntu.png) **Ubuntu**: Available from [ppa:sandromani/gimagereader](https://launchpad.net/~sandromani/+archive/ubuntu/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/opensuse.png) **OpenSUSE**: Available from [OpenSUSE Build Service](https://build.opensuse.org/project/show/home:sandromani) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/arch.png) **ArchLinux**: Available from the [community repositories](https://www.archlinux.org/packages/community/x86_64/gimagereader/) ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/source.png) **Source**: Download from the [releases page](https://github.com/manisandro/gImageReader/releases) ## Compile If you would like to compile gImageReader from source, [follow these steps](https://github.com/manisandro/gImageReader/wiki/Compiling-gImageReader).gImageReader-3.4.0/docs/1_Installation.sl.md000066400000000000000000000031171417507262200206120ustar00rootroot00000000000000# Namestitev ## Za operacijski sistem - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/windows.png) **Windows**: Prenesi si iz [releases](https://github.com/manisandro/gImageReader/releases) (**Assets**-> **gImageReader\_*.exe** ali *.zip ) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/fedora.png) **Fedora**: Navoljo v [uradnih repozitorijih](https://apps.fedoraproject.org/packages/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/debian.png) **Debian**: Navoljo v [uradnih repozitorijih](https://packages.debian.org/unstable/main/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/ubuntu.png) **Ubuntu**: Navoljo v [uradnih repozitorijih](https://launchpad.net/~sandromani/+archive/ubuntu/gimagereader) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/opensuse.png) **OpenSUSE**: Navoljo v [uradnih repozitorijih](https://build.opensuse.org/project/show/home:sandromani) - ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/arch.png) **ArchLinux**: Navoljo v [uradnih repozitorijih](https://www.archlinux.org/packages/community/x86_64/gimagereader/) ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/icons/source.png) **Izvorna koda**: Prenesi si iz [releases](https://github.com/manisandro/gImageReader/releases) ## Compile izvorne kode ÄŒe želite Compilat gImageReader iz izvorne kode, [sledite tem korakom](https://github.com/manisandro/gImageReader/wiki/Compiling-gImageReader).gImageReader-3.4.0/docs/2_Usage.he.md000066400000000000000000000375111417507262200172010ustar00rootroot00000000000000# שימוש ## ×™×™×‘×•× ×•×¤×ª×™×—×ª תמונות - ניתן לפתוח / ×œ×™×™×‘× ×ª×ž×•× ×•×ª מהחלונית *תמונות*, שמופעלת ×¢"×™ לחיצה על הכפתור הימני העליון ב*סרגל ×”×›×œ×™× ×”×¨×שי*. ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/document-new-symbolic.symbolic.png) - לפתיחת תמונה ×ו מסמך PDF ×§×™×™×, לחץ על כפתור הפתיחה בחלונית *תמונות* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/document-open-symbolic.symbolic.png). - כדי לפתוח ×ת כל התמונות בתיקייה, לחץ על כפתור בחירת תקייה בחלונית *תמונות* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status/folder-open-symbolic.symbolic.png). - ללכידת ×¦×™×œ×•× ×ž×¡×š ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/devices/camera-photo-symbolic.symbolic.png). - להדבקת נתוני תמונה מלוח ההעתקה ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/edit-paste-symbolic.symbolic.png). - לפתיחת קובץ שנפתח ל×חרונה, לחץ על ×”×—×¥ לצד כפתור הפתיחה![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png). - ב×פשרותך לנהל ×ת רשימת התמונות שנפתחו ב×מצעות ×”×›×¤×ª×•×¨×™× ×©×œ×¦×“ כפתור הפתיחה ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/list-remove-symbolic.symbolic.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/places/user-trash-symbolic.symbolic.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/edit-clear-symbolic.symbolic.png). ×§×‘×¦×™× ×–×ž× ×™×™× (כגון צילומי מסך ונתוני לוח ההעתקה) × ×ž×—×§×™× ×וטומטית ×›×שר התוכנית מופעלת. - לסריקת תמונה ממכשיר סריקה, לחץ על הכרטיסייה *סריקה* בחלונית *מקור* ו××– ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/devices/scanner-symbolic.symbolic.png). ## צפייה והת×מת תמונות - השתמש ×‘×›×¤×ª×•×¨×™× ×‘*סרגל ×”×›×œ×™× ×”×¨×שי* כדי להתקרב ולהתרחק ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/zoom-in-symbolic.symbolic.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/zoom-out-symbolic.symbolic.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/zoom-original-symbolic.symbolic.png) כמו ×’× ×œ×¡×•×‘×‘ ×ת התמונה בזווית שרירותית ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/object-rotate-left-symbolic.symbolic.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/object-rotate-right-symbolic.symbolic.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/rotate_page.svg). ניתן ×’× ×œ×‘×¦×¢ ×–×•× ×¢"×™ גלילה על התמונה בזמן שמקש ×”- CTRL לחוץ. - ×›×œ×™× ×‘×¡×™×¡×™×™× ×œ×ž× ×™×¤×•×œ×¦×™×•×ª של התמונה × ×™×ª× ×™× ×‘×¡×¨×’×œ ×”×›×œ×™× *בקרות תמונה*, המופעל ×¢"×™ לחיצה על הכפתור *בקרות תמונה* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/controls.png) ב*סרגל ×”×›×œ×™× ×”×¨×שי*, ×”×›×œ×™× ×”×ž×¡×•×¤×§×™× ×›×¨×’×¢ ×”× ×‘×”×™×¨×•×ª![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/brightness.png) וניגודיות ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/contrast.png) והת×מות, כמו ×’× ×”×ª×מת רזולוציית התמונה ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/resolution.png) (through interpolation). - ניתן לבחור מספר תמונות, כך שמת×פשר למשתמש לעבד מספר תמונות בבת ×חת (ר××” להלן). ## הכנות לקר×ת זיהוי - כדי לבצע OCR (זיהוי ×ª×•×•×™× ×ופטי) בתמונה, המשתמש צריך לציין: - תמונות הקלט (כגון תמונות לזיהוי), - מצב הזיהוי (*טקסט פשוט* ×ו *hOCR, PDF*), - השפה(ות) לזיהוי ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png). - **תמונות הקלט** שנבחרו תו×מות ×œ×¢×¨×›×™× ×©× ×‘×—×¨×• בחלונית *תמונות* בכרטיסייה *מקורות*. ×× × ×‘×—×¨×• מספר תמונות, התוכנית תתייחס לקבוצת התמונות ×›×ל מסמך מרובה עמודי×, ותש×ל ×ת המשתמש ×ילו ×¢×ž×•×“×™× ×™×¢×‘×“×• בתחילת הזיהוי. - ניתן לבחור ×ת מצב הזיהוי בתיבת הבחירה של מצב ×”-OCR בסרגל ×”×›×œ×™× ×”×¨×שי: - המצב *טקסט פשוט* ×’×•×¨× ×œ×ž× ×•×¢ ×”-OCR לחלץ רק ×ת הטקסט הרגיל ×œ×œ× ×ž×™×“×¢ על עיצוב ופריסה. - המצב *hOCR, PDF* ×’×•×¨× ×œ×ž× ×•×¢ ×”-OCR להחזיר ×ת הטקסט שזוהה כמסמך *hOCR* HTML, הכולל מידע על העיצוב והפריסה של הדף שזוהה. *hOCR* ×”×•× ×¤×•×¨×ž×˜ סטנדרטי ל×חסון תוצ×ות זיהוי, וניתן להשתמש בו לשיתוף פעולה ×¢× ×™×™×©×•×ž×™× ××—×¨×™× ×”×ª×•×ž×›×™× ×‘×ª×§×Ÿ ×–×”. gImageReader עובד ×¢× ×ž×¡×ž×›×™ *hOCR* ויכול ×’× ×œ×™×¦×•×¨ מסמך PDF לתוצ×ות הזיהוי. - ניתן לבחור ×ת **שפת הזיהוי** מהתפריט הנפתח ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png) של *לחצן הזיהוי* ב*סרגל ×”×›×œ×™× ×”×¨×שי*. ×× ×ž×•×ª×§×Ÿ מילון ×יות להגדרת שפת ×”-tesseract, ניתן לבחור בין די××œ×§×˜×™× ××–×•×¨×™×™× ×–×ž×™× ×™× ×©×œ השפה. ×–×” ישפיע רק על בדיקת ×”×יות של שפת הטקסט שזוהה. הגדרות שפות tesseract ×œ× ×ž×–×•×”×•×ª יופיעו לפי קידומת ×©× ×”×§×•×‘×¥ שלהן, ×¢× ×–×ת, ניתן ללמד ×ת התוכנית לזהות ×§×‘×¦×™× ×›×לה ×¢"×™ קביעת ×›×œ×œ×™× ×ž×ª××™×ž×™× ×‘×ª×¦×•×¨×ª התוכנית (ר××” להלן). ניתן להגדיר שפות מרובות לזיהוי ×‘×¤×¢× ×חת מתפריט המשנה *רב לשוני* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png) של התפריט הנפתח. ניתן לנהל ×ת הגדרות שפות ×”- tesseract המותקנות בתפריט *נהל שפות...* בתפריט הנפתח של הלחצן *זיהוי*, ר××” ×’× ***הגדרות התקנת שפת ×”- tesseract***. ## זיהוי ול×חמ"×› עיבוד - טקסט פשוט - ניתן לבחור ×©×˜×—×™× ×œ×–×™×”×•×™ ×¢"×™ גרירה (לחצן שמ×לי + העברת העכבר) סביב חלקי התמונה. ניתן ×’× ×œ×‘×—×•×¨ מספר ×—×œ×§×™× ×‘×ª×ž×•× ×” ×¢"×™ לחיצה על CTRL בזמן הבחירה. - לחלופין הלחצן *זיהוי פריסה ×וטומטי*![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/autolayout.png) , הנגיש מ*סרגל ×”×›×œ×™× ×”×¨×שי*, ינסה להגדיר ×וטומטית ×זורי זיהוי מת×ימי×, כמו ×’× ×œ×”×ª××™× ×ת סיבוב התמונה כפי הצורך. - ניתן למחוק ולסדר מחדש ×ת הבחירות ב×מצעות תפריט ההקשר המופיע בעת לחיצה ימנית עליה×. ניתן ×’× ×œ×©× ×•×ª ×ת גודל הבחירות הקיימות ×¢"×™ גרירת פינות מלבן הבחירה. - ניתן לזהות ×ת ×”×—×œ×§×™× ×©× ×‘×—×¨×• בתמונה (×ו ×ת התמונה כולה, ×× ×œ× ×ž×•×’×“×¨×•×ª בחירות) ×¢"×™ לחיצה על הלחצן *זיהוי* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/insert-text-symbolic.symbolic.png) ב*סרגל ×”×›×œ×™× ×”×¨×שי*. לחלופין, ניתן לזהות ××–×•×¨×™× ×‘×•×“×“×™× ×¢"×™ לחיצה ימנית על בחירה. מתפריט ההקשר של הבחירה, ניתן להפנות ×ת הטקסט שזוהה ללוח ההעתקה, ×‘×ž×§×•× ×ל חלונית הפלט. - ×× × ×‘×—×¨×• מספר ×¢×ž×•×“×™× ×œ×–×™×”×•×™, התוכנית ת×פשר למשתמש לבחור בין זיהוי ×”×זור הנוכחי שנבחר ידנית - עבור כל הדפי×, לבין ביצוע ניתוח פריסת ×¢×ž×•×“×™× ×œ×›×œ עמוד בנפרד, כדי לזהות ×וטומטית ×זורי זיהוי מת×ימי×. - הטקסט שזוהה יופיע ב*חלונית הפלט*, שתופיע ×וטומטית ברגע שטקסט כלשהו זוהה, (××œ× ×× ×›×Ÿ הטקסט הועבר לזיהוי ×ל לוח ההעתקה). - ×× ×–×ž×™×Ÿ מילון ×יות לשפת הזיהוי, בדיקת ×יות ×וטומטית תופעל על הטקסט שהופק. ניתן לשנות ×ת מילון ×”×יות שבשימוש בתפריט השפה ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png) שלצד הלחצן *זיהוי* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/insert-text-symbolic.symbolic.png), ×ו מהתפריט שיופיע בעת לחיצה ימנית על ×זור הטקסט. - ×›×שר טקסט נוסף זוהה, ×”×•× ×™×•×›× ×¡ ×‘×ž×™×§×•× ×”×¡×ž×Ÿ ×ו יחליף ×ת מ×גר הטקסט ×”×§×™×™×, תלוי במצב שנבחר בתפריט *מצב הוספה*, ×שר × ×ž×¦× ×‘*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*. - ×›×œ×™× ××—×¨×™× ×œ×חר עיבוד ×›×•×œ×œ×™× ×¡×’×™×¨×ª מעברי שורה, השמטת ×¨×•×•×—×™× ×•×¢×•×“ (זמין מהלחצן השני ב*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*), כמו ×’× ×—×™×¤×•×© והחלפת טקסט. ניתן להגדיר רשימה של ×›×œ×œ×™× ×œ×—×™×¤×•×© והחלפה ×¢"×™ לחיצה על *חיפוש והחלפה* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/edit-find-replace-symbolic.symbolic.png) ב*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*, ו××—"×› על הלחצן *החלפות*. - ניתן לבטל ×©×™× ×•×™×™× ×‘×ž×גר הטקסט ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/edit-undo-symbolic.symbolic.png) ולבצע מחדש ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/edit-redo-symbolic.symbolic.png) ×¢"×™ לחיצה על ×”×›×¤×ª×•×¨×™× ×”×ž×ª××™×ž×™× ×‘*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*. - ניתן לשמור ×ת תוכן מ×גר הטקסט ×¢"×™ לחיצה על הלחצן *שמירה* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/document-save-as-symbolic.symbolic.png) ב*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*. ## זיהוי ול×חמ"×› עיבוד - hOCR, PDF - במצב hOCR, תמיד הזיהוי ×”×•× ×¢×œ כל ×”×“×¤×™× ×©×œ המקור(ות). - תוצ×ות הזיהוי מוצגות ב*חלונית הפלט* כמבנה-×¢×¥, המחולק לפי דפי×, פסק×ות, שורות טקסט, ×ž×™×œ×™× ×•×’×¨×¤×™×§×”. - ×›×שר נבחר ערך במבנה-×”×¢×¥, ×”×זור המת××™× ×‘×ª×ž×•× ×” יודגש. בנוסף, מ×פייני העיצוב והפריסה של הערך ×ž×•×¦×’×™× ×‘×œ×©×•× ×™×ª *מ×פייני×* מתחת לעץ המסמך. מקור ×”- hOCR הגולמי מוצג בלשונית *מקור* מתחת לעץ המסמך. - ניתן לערוך ×ת טקסט המילה בעץ המסמך ×¢"×™ לחיצה כפולה על ערך המילה המת××™×. ×× ×ž×™×œ×” מסוימת ×”×™× ×” בעלת ×יות-שגוי, ×”×™× ×ª×•×¤×™×¢ ב×דו×. לחיצה ימנית על מילה בעץ המסמך תציג תפריט הצעות ×יות. - ניתן לשנות מ××¤×™×™× ×™× ×¢×‘×•×¨ ערך שנבחר ×¢"×™ לחיצה כפולה על ערך המ×פיין הרצוי בלשונית *מ×פייני×*. פעולות מעניינות לערכי טקסט ×”× ×©×™× ×•×™ ×”×זור התוח×, שינוי השפה ושינוי גודל הגופן. מ×פיין השפה מגדיר ×’× ×ת שפת ×”×יות המשמשת לבדיקת המילה שנבחרה. ניתן לערוך ×ת ×”×זור ×”×ª×•×—× ×¢"×™ שינוי גודל מלבן הבחירה ×¢"×’ התמונה. - ניתן למזג פריטי ×ž×™×œ×™× ×¡×ž×•×›×™× ×¢"×™ לחיצה ימנית על ×”×¤×¨×™×˜×™× ×”×ž×ª××™×ž×™× ×©× ×‘×—×¨×•. - ניתן להסיר כל פריט מהמסמך ×¢"×™ לחיצה-ימנית על הפריט המת××™×. - ניתן להגדיר ××–×•×¨×™× ×’×¨×¤×™×™× ×—×“×©×™× ×¢"×™ בחירת הערך *הוסף ×זור גרפי* בתפריט ההקשר של הפריט לעמוד המת××™× ×•×¦×™×•×¨ מלבן על התמונה. - ×¢×¥ המסמך ניתן לשמירה ×›*מסמך hOCR HTML* דרך הלחצן *שמור כטקסט hOCR* ב*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*. ניתן ×œ×™×™×‘× ×ž×¡×ž×›×™× ×§×™×™×ž×™× ×¢"×™ לחיצה על *פתח קובץ hOCR* ב*סרגל ×”×›×œ×™× ×©×œ חלונית הפלט*. - ניתן ליצור מסמכי PDF מתפריט ×”×™×™×¦×•× ×©×œ PDF ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-export.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/16x16/mimetypes/application-pdf.png) בסרגל ×”×›×œ×™× ×©×œ חלונית הפלט. שני ×ž×¦×‘×™× ×–×ž×™× ×™×: - *PDF* תיצור מסמך PDF משוחזר ב×ותה פריסה דומה וגרפיקה / תמונות כמו מסמך המקור. - *מסמך PDF ×¢× ×©×›×‘×ª טקסט בלתי נר××”* תיצור מסמך PDF ×¢× ×ª×ž×•× ×ª המקור ×©×œ× ×”×©×ª× ×ª×” כרקע, ושכבת טקסט בלתי נר××” (×ך ניתן לבחירה) מעל טקסט המקור המת××™× ×‘×ª×ž×•× ×”. מצב ×™×™×¦×•× ×–×” שימושי ליצירת מסמך ×–×”×” מבחינה ויזו×לית לתמונה שנקלטה, ×•×¢× ×–×ת ×¢× ×˜×§×¡×˜ הניתן לחיפוש ובחירה. - בעת ×”×™×™×¦×•× ×œ- PDF, המשתמש יתבקש להשתמש במשפחת הגופני×, וה×× ×œ×›×‘×“ ×ת גדלי ×”×’×•×¤× ×™× ×©×–×•×”×• ×¢"×™ מנוע ×”- OCR, וה×× ×œ× ×¡×•×ª ל×חד ×ת ריווח שורות הטקסט. כמו כן, המשתמש יכול לבחור ×ת תבנית הצבע, הרזולוציה ודחיסת התמונה לשימוש בתמונות במסמכי PDF לשליטה בגודל הפלט שנוצר. gImageReader-3.4.0/docs/2_Usage.md000066400000000000000000000321141417507262200166000ustar00rootroot00000000000000# Usage ## Opening and importing images - Images can be opened/imported from the *sources pane*, which is activated by clicking on the top-left button in the *main toolbar*. ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-image.png) - To open an existing image or PDF document, click on the open button in the *images tab* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open.png). - To open all images in one directory, click the open directory button in the *images tab* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/folder-open.png). - To capture a screenshot ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/devices/camera-photo.png). - To paste image data from the clipboard ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-paste.png). - To open a recently opened file, click on the arrow next to the open button![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/pan-down-symbolic.symbolic.png). - You can manage the list of opened images with the buttons next to the open button ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/list-remove.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/places/user-trash.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-clear.png). Temporary files (such as screenshots and clipboard data) are automatically deleted when the program exists. - To acquire an image from a scanning device, click on the *acquire tab* in the *sources pane* and then ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/devices/scanner.png). ## Viewing and adjusting images - Use the buttons in the *main toolbar* to zoom in and out ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-in.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-out.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-original.png) as well as rotate the image by an arbitrary angle![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-left.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-right.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/rotate_page.svg). Zooming can also be performed by scrolling on the image with the CTRL key pressed. - Basic image manipulation tools are provided in the *image controls toolbar*, which is activated by clicking on the *image controls button* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/controls.png) in the *main toolbar*. The provided tools currently allow brightness![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/brightness.png) and contrast ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/contrast.png) adjustments as well as adjusting the image resolution ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/resolution.png) (through interpolation). - Multiple images can be selected, which allowes the user to process multiple images in one go (see below). ## Preparing for recognition - To perform OCR on an image, the user needs to specify: - The input images (e.g. images to recognize), - The recognition mode (e.g. *plain text* vs *hOCR, PDF*) - The recognition language(s) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png). - The **input images** correspond to the selected entries in the *images tab* in the *sources pane*. If multiple images are selected, the program will treat the set of images as multipage document and ask the user which pages to process when recognition is started. - The recognition mode can be selected in the OCR mode combobox in the main toolbar: - The *plain text* mode makes the OCR engine extract only the plain text, without formatting and layout information. - The *hOCR, PDF* mode makes the OCR engine return the recognized text as a *hOCR* html document, which includes formatting and layout information for the recognized page. *hOCR* is a standard format for storing recognition results and can be used to interoperate with other application supporting this standard. gImageReader can process *hOCR* documents further to generate a PDF document for the recognition result. - The **recognition language** can be selected from the drop-down menu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) of the *recognize button* in the *main toolbar*. If a spelling dictionary is installed for a tesseract language definition, it is possible to choose between available regional flavors of the language. This will only affect the language for spell-checking the recognized text. Unrecognized tesseract language definitions will appear by their filename prefix, one can however teach the program to recognize such files by defining appropriate rules in the program configuration (see below). Multiple recognition languages can be specified at once from the *Multilingual* submenu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) of the drop-down menu. The installed tesseract language definitions can be managed from the *Manage languages...* menu entry in the drop-down menu of the *recognize button*, see also ***Installation of tesseract language definitions***. ## Recognizing and post-processing - plain text - Areas to be recognized can be selected by dragging (left click + mouse move) a rectangular area around portions of the image. Multiple selections are possible by pressing the CTRL key while selecting. - Alternatively, the *automatic layout detection button*![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/autolayout.png) , accessible from the *main toolbar* will attempt to automatically define appropriate recognition areas, as well as adjust the rotation of the image if necessary. - Selections can be deleted and reordered via the context menu which appears when right-clicking on them. It is also possible to resize existing selections by dragging the corners of the selection rectangle. - The selected portions of the image (or the entire image, if no selections are defined) can be recognized by pressing on the *recognize button* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png) in the *main toolbar*. Alternatively, individual areas can be recognized by right-clicking a selection. From the selection context menu, it is also possible to redirect the recognized text to the clipboard, instead of the output pane. - If multiple pages are selected for recognition, the program allows the user to choose between either recognizing the current manually selected area for each individual page, or performing a page-layout analysis on each page to automatically detect appropriate recognition areas. - Recognized text will appear in the *output pane* (unless the text was redirected to the clipboard), which is shown automatically as soon as some text was recognized. - If a spelling dictionary for the recognition language is available, automatic spell-checking will be enabled for the outputted text. The used spelling dictionary can be changed either from the language menu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) next to the *recognize button* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png), or from the menu which appears when right-clicking in the text area. - When additional text is recognized, it will either get appended, inserted at cursor position, or replace the previous content of the text buffer, depending on the mode selected in the *append mode menu*, which can be found in the *output pane toolbar*. - Other post-processing tools include stripping line breaks, collapsing spaces and more (available from the second button in the *output pane toolbar*), as well as searching and replacing text. A list of search and replace rules can be defined by clicking on the *Find and replace* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-find-replace.png)button in the *output pane toolbar* and then clicking on the *Substitutions* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-edit.png) button. - Changes to the text buffer can be undone ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-undo.png) and redone ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-redo.png) by clicking on the appropriate buttons in the *output pane toolbar*. - The contents of the text buffer can be saved to a file by clicking on the *save button* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-save-as.png) in the *output pane toolbar*. ## Recognizing and post-processing - hOCR, PDF - In hOCR mode, always the entire page of the selected source(s) is recognized. - The recognition result is presented in the *output pane* as a tree-structure, divided in pages, paragraphs, textlines, words and graphics. - When an entry in the tree-structure is selected, the corresponding area is highlighted in the image. Additionally, formatting and layout properties of the entry are shown in the *Properties* tab below the document tree. The raw hOCR source is visible in the *Source* tab below the document tree. - The word text in the document tree can be edited by double-clicking the respective word entry. If a word is mis-spelled, it will be rendered red. Right-clicking a word in the document tree will show a menu with spelling suggestions. - Properties for a selected entry can be modified by double clicking the desired property value in the *Properties* tab. Interesting actions for text entries are tweaking the bounding area, changing the language and modifying the font size. The language property also definies the spelling language used to check the respective word. The bounding area can also be edited by resizing the selection rectangle in the canvas. - Adjacent word items can be merged by rightclicking the respective selected items. - Arbitrary items can be removed from the document via right-click on the respective item. - New graphic areas can be defined by selecting the *Add graphic region* entry of the context menu of the respective page item and drawing a rectangle on the canvas. - The document tree can be saved as a *hOCR HTML document* via the *Save as hOCR text* button in the *output pane toolbar*. Existing documents can be imported via the *Open hOCR file* button in the *output pane toolbar*. - PDF files can be generated from the PDF export menu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-export.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/mimetypes/application-pdf.png) in the output pane toolbar. Two modes are available: - *PDF* will generate a reconstructed PDF the same layout and graphics/pictures as the source document. - *PDF with invisible text overlay* will generate a PDF with the unmodified source image as background and invisible (but selectable) text overlaid above the respective source text in the image. This export mode is useful for generating a document which is visually identical to the input, but with searchable and selectable text. - When exporting to PDF, the user is prompted for the font family to use, whether to honour the font sizes detected by the OCR engine, and whether to attempt to homogenize the text line spacing. Also, the user can select the color format, resolution and compression method to use for images in the PDF document to control the size of the generated output. gImageReader-3.4.0/docs/2_Usage.sl.md000066400000000000000000000346031417507262200172220ustar00rootroot00000000000000# Uporaba ## Odpiranje in uvažanje slik - Slike se odprejo/uvozijo pod obmoÄjem *Viri*, ki se prikaže/skrije ob kliku na gub ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-image.png) skrajno levo v *glavni vrstici*. - Da odprete obstojeÄo Sliko ali PDF dokument, klknite na gum *Dodaj slike* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open.png) na vrhu obmoÄja *Viri*. - Da odprete VSE Slike ali PDF-e v nekem direktorju, kliknite na gump *Dodaj mapo* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/folder-open.png). - Zajetje slike iz zaslona naredite s klikom na *Posnemi zaslon* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/devices/camera-photo.png). - Sliko lahko tudi vstavite iz doložiÅ¡Äa s klikom na *Prilepi* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-paste.png). - ÄŒe želite odpreti nedavno že odprto datoteko, kliknite na puÅ¡Äico![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/pan-down-symbolic.symbolic.png)zraven *Dodaj slike* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open.png). - Sezam odprtih slik pravljate s gumbi ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/list-remove.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/places/user-trash.png) ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-clear.png). ZaÄasne datoteke (kot so posnetki zaslona, slike iz odložiÅ¡Äa) se samodejno pobriÅ¡ejo, ko se program zapre. - Za zajem slike iz optiÄnega Äitalca(Skenerja), kliknite na zavihek *Pridobi* na obmoÄji *Viri* ter nato na gumb *Zaznaj* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/devices/scanner.png). ## Pogled in prilagoditev slik - Da sliko približate ali odaljite uporabite gumbe v *glavni vstici* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-in.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-out.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-original.png) namesto gumbom lahko tudi uporabite CTRL + koleÅ¡Äek na miÅ¡ki - Za obraÄanje slike za 90 stopinj uporabite![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-left.png)![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-right.png) ter ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/rotate_page.svg)za fino rotacijo slike. - Osnovno obdelavo slike izvedete z orodji v *kontrolni vrstici za slike* ,ki se prikaže/skrije z klikom na kumb *Kotronilniki slike* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/controls.png) ki se nahaja v *glavni vrstici*. Orodja, ki so tam na voljo so prilagoditev *svetost*![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/brightness.png) ter *kontrast* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/contrast.png) kakor tudi resolucija slike ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/resolution.png) (uporablja algoritem interpolacije). - Lahko se oznaÄi veÄ slik, kar omogoÄa prilagoditev veÄ slik na enkrat. ## Priprava na prepoznavo OCR - Za izvedbo OCR (Ang: *Optical Character Recognition*) na sliki, mora uporabnik definirati: - Vhodne slike ( slike z besedilom, ki ga želimo prepoznati), - NaÄin prepoznave (*Neoblikovano besedilo* / *hOCR ali PDF*) - Jezik(e) prepoznave ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png). - **Vhodne slike** so izbrani vnosi v zavihku *Datoteke* , ki se nahaja v obmoÄju *Viri*. ÄŒe je izbranih veÄ slik, bo program smatral nabor slik, kot veÄstranski dokument, ter ob zgonu prepoznave pozval uporabnika katere strani želi, da jih prepozna . - **NaÄin prepozave**(*NaÄin OCR*) se izbere v spustnem seznamu *NaÄin OCR* , ki se nahaja v *glavni vrstici*: - ***Neoblikovano besedilo*** OCR pogonu, bo izluÅ¡Äil le golo besedilo, brez kakrÅ¡nega koli zaznavanja oblikovanja ali postavitve. - ***hOCR ali PDF*** OCR pogon bo izluÅ¡Äil besedilo kot *hOCR* html dokument, ki vsebuje oblikovanje ter postavitev za prepoznano stran. *hOCR* je standardni zapis za hrambo rezultatov prepoznave in se lahko uprablja za dodatno obdelavo s programi, ki poznajo ta standard. gImageReader lahko nadaljno obdeluje *hOCR* datoteke in tako iz tega ustvari PDF ali ODT. - **Jezik prepoznave** se izbere v spustnem seznamu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) ,ki je desno od of the od gumba ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png) *Prepoznaj* v *glavni vrstici*. ÄŒe je slovar prepoznave nameÅ¡Äen za jezikovno definicijo tesseract, je možno tudi izbirat med regijskimi slovarji tega jezika. To le vpliva na konÄno opozarjanje v kolikor zaznana beseda ni v slovarju. *Ne prepoznane jezikovne definicije tesseract podo prikazane le z njihovo datoteÄno predpono a možno je v program vnesti ustrezna pravila prikaza - glej RTFM*. - **VeÄ jezikov prepoznave** se lahko izbere na enrkat prav tako v spustnem seznamu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) . Dodatni jeziki se lahko nameÅ¡Äajo pod *Upravljaj z jeziki...* , ki ga najdete tudi v ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) VeÄ o tem v poglavju ***Tesseract jezikovne definicije***. ## Prepoznava in nadaljna obdelava - Neoblikovano besedilo - ObmoÄja, ki se jh naj prepozna se znaÄi z miÅ¡ko (levi klik + premik miÅ¡ke) kot pravokotno obmoÄje okrog obmoÄja slike. - VeÄ obmoÄij se oznaÄi tako, da držimo tipko CTRL med tem ko izbiramo. - Namesto roÄnega izbora se lahko tudi uporabi, gumb *Samodejno prepoznaj razporeditev*![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/autolayout.png) , ki je v *glavni vrstici*. IzvrÅ¡eno bo poizkus samodejne repoznave obmoÄjih, kakor tudi samodejna rotacija slike v kolikor je le to potrebno. - ObmoÄja se lahko izbriÅ¡ejo ter spremeni zaporedje z menijem, ki se pojavi, ko na obmoÄje kliknemo z desnim miÅ¡kinim gumbom. Dimenzijo obmoÄja lahko spremenimo z klikom na rob obmoÄja. - Izbrana obmoÄja slike (ali cela slika, v koikor ni definiranih nobenih obmoÄij) se prepozna z klikom na gumb *Prepoznaj izbor* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png) v *glavni vrstici*. - ÄŒe želimo prepoznavo samo enega od veÄih obmoÄji, kliknemo desno na želenem obmoÄju. Iz istega menija, je možno tudi prepoznano besedilo preusmeriti na odložiÅ¡Äe namesto na obmoÄje *rezulat*. - ÄŒe je izbranih veÄ strani za prepoznavo, program nudi prepoznavo istih obmoÄjih na vseh straneh ali samodejno prepozavo na vsaki strani posebej. - Preponano besedilo se bo prikazalo v obmoÄju *Rezultat* (razen Äe je bilo besedilo preusmerjeno v odožiÅ¡Äe. Prikazuje se samodejno in sproti, kakor hitro je bil del besedila prepoznan. - V kolikor je na voljo slovar za prepoznano besedilo, bo vklopljen samodejni Ärkovalnik na izhodem besedilo. Uporabljan slovar Ärkovalnika lahko spremenimo pod ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) zraven gumba *Prepoznaj obmoÄje* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png), ali iz menija, ki se pojavi Äe kliknemo z desnim miÅ¡kinim gumbom na obmoÄju *Rezultat*. - Ko bo prepoznano dodatno besedilo, bo to odvisno od nastavitev ali pripteto na dnu![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/ins_append.png), ali na pozici kazalke![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/ins_cursor.png) ali zamenjalo celotno preÅ¡njo vsebino![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/ins_replace.png). Le to nastavitev izberete v meniju *Izberi naÄin vstavljanja*, ki ga najete skrajno levo v obmoÄju *Rezultat*. - Drugi naÄini nadaljne obdelave so med drugimi, odstranitev prelomov vrstic, združevanje dolgih presledkov ter drugo. Kakor tudi iskanje ter zamenjava besed. Najdmo jih v meniju, ki se odpre ob kliku na puÅ¡Äico ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/pan-down-symbolic.symbolic.png)zraven![](https://raw.githubusercontent.com/manisandro/gImageReader/master/data/icons/stripcrlf.png) - Možno je tudi nastaviti seznam samodejnih zamenjav besed pod *najdi in zamenjaj* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-find-replace.png)ter nato z klikom na gumb *Zamenjave* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-edit.png). - Spremembe v besedilu v obmoÄju *Rezultat* se lahko razveljavijo ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-undo.png) ter ponovno uveljavijo ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-redo.png) z klikom na ustrezni gumb v vrstici obmoÄja *Rezultat*. - Vsebina besedila v obmoÄju *Rezultat* lahko shranite v datoteko z klikom na gumb *shrani* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-save-as.png) v vrstici obmoÄja *Rezultat*. ## Prepoznava in nadaljna obdelava - hOCR ali PDF - V naÄinu *hOCR ali PDF*, se vedno prepoznava celotna stran izbranega vira oz virov. - Rezultat prepoznave je predstavljen v obmoÄju *Rezultat* v obliki drevesne strukture, razdeljen v strani, odstavke, vrtice, besede, grafiko. - Ko kliknemo na posamezni vnos v drevesni stukturi, se obarva pripadajoÄe obmoÄje na sliki. Posamezni parametri postavitve, oblikovanja.. se prikazujejo soÄasno v zavihku *Lasnosti*. Surova hOCR koda je vidna v zavihku *Koda*. - Beseda v dokumetni drevesni strukturi se lahko popravi z dvoklikom na dotiÄno besedo. ÄŒe je beseda ni slovniÄna(ni v slovarju) bo obarvana rdeÄo. Desni klik na dotiÄno besedo vam ponudi meni s predlogi za popravek. - Vrednosti za izbrano entiteto se lahko popravijo z klikom na vrednost v zaviku *Lasnosti*. Zanimive vrednosti za popravke pri besedilih so izbojÅ¡ava vsebinskega obmoÄja(bbox), sprememba jezika ter tipa in velikosti pisave. Vsebinsko obmoÄje se lahko tudi popravi tako, da z miÅ¡ko premaknemo rob pravokotnega obmoÄja na delovni povrÅ¡ini. - Razbite besede se lahko združijo, tako da jih oznaÄimo(ctrl+miÅ¡kin klik) ter nato z desnim klikom nad besedo izberemo *zdriži*. - OdveÄne elemente odstranimo z desnim klikom na element v drevesni strukturi ter odstrani.. - Dodatna obmoÄja grafike se definarijo tako, da v drevesni strukturi na veji tiste strani kliknemo z desno miÅ¡kini tipko izberemo *Dodaj podroÄje grafike* ter na delovni povrÅ¡ini nariÅ¡emo ustrezen pravokotnik. ## Izvoz rezultata ### hOCR - Drevesno strukturo dokumenta lahko shranite kot *hOCR HTML dokument* s klikom na *Shrani kot besedilo hOCR* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-save-as.png) v vrstici obmoÄja *Rezultat* - ObstojeÄi *hOCR HTML* dokument se lahko uvozi z gumbom *Odpri dokument hOCR* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open.png) v vrstici obmoÄja *Rezultat*. ### PDF - **PDF** datoteka se lahko ustvari preko menija *Izvozi* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-export.png) ter nato *Izvozi kot PDF* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/mimetypes/application-pdf.png) v vrstici obmoÄja *Rezultat*. - Za izvoz v PDF sta na voljo dva zapisa: 1. ***PDF*** bo ustvaril PDF z enako razporeditivijo in grafikami/slikami kot je bil zanan v izvorni sliki. 2. ***PDF z nevidno plastjo besedilo*** bo ustvaril PDF z nespremenjeno sliko vira kot ozadje ter Äez nevidena plast besedila, ki pa se ga lahko oznaÄi. To je koristno za ustvarjanje dokumentov, ki so vizualno identiÄni vhodnemu a imajo možnost iskanja ter kopiranja besedila. - Pri izvozu v PDF, se uporabnik tudi lahko odloÄi ali bo doloÄil tip i velikost pisave ali naj ostane samodejno zaznana. Prav tako lahko doloÄi barvno globino, kompresijo, resolucijo za slike v izhodnem PDF dokumentu, da tako optimizira velikost datoteke. ### ODT - **ODT** datoteka se lahko ustvari preko menija *Izvozi* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-export.png) ter nato *Izvozi kot ODT*![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/mimetypes/x-office-document.png) v vrstici obmoÄja *Rezultat*. gImageReader-3.4.0/docs/3_Add_language.he.md000066400000000000000000000033541417507262200204670ustar00rootroot00000000000000# הגדרות התקנת שפה של Tesseract - ×”*מנהל Tessdata*, זמין מהתפריט הנפתח ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/go-down-symbolic.symbolic.png) של הלחצן *זיהוי* ב*סרגל ×”×›×œ×™× ×”×¨×שי* מ×פשר למשתמש לנהל ×ת שפות הזיהוי הזמינות. - להתקנת השפות ב×ופן ידני: - ב- **Linux**, ×–×” מספיק להתקין ×ת החבילה המת×ימה להגדרת השפה הרצויה ב×מצעות ×™×™×©×•× ×ž× ×”×œ החבילה (ניתן ×œ×§×¨×•× ×œ×—×‘×™×œ×•×ª משהו כמו *tesseract-langpack-*). - ב- **Windows**, ר×שית, בדוק ×ת הגרסה של gImageReader שבשימוש (×¢"×™ כניסה ל- "על ×ודות"). - ×× ×תה משתמש ב- tesseract 4.x, גש ×ל https://github.com/tesseract-ocr/tessdata_fast. - ×× ×תה משתמש ב- tesseract 3.x והל××”, גש ×ל https://github.com/tesseract-ocr/tessdata. ל×חמ"×›, בכפתור בחירת ×”×¢× ×£, מתחת לתגיות, בחר ×ת הגרסה ×©×”×™× ×©×•×•×” ×ו מוקדמת יותר מגירסת ×”- tesseract שבשימוש. ל×חמ"×› הורד ×ת הגדרות השפה הרצויה (*× ×ª×•× ×™× ×ž××•×ž× ×™× ×™×—×“ ×¢× ×›×œ ×”×§×‘×¦×™× ×”×ž×©×œ×™×ž×™× ×œ×”× ×©×¤×•×ª מסוימות זקוקות) ולשמור ××•×ª× ×‘: התחל ↠כל התוכניות ↠gImageReader ↠הגדרות שפת Tesseract. - כדי לזהות מחדש ×ת השפות הזמינות, ניתן להתחיל מחדש ×ת התוכנית, ×ו בחר *זיהוי שפות מחדש* ב*תפריט הנפתח של ×”×פליקצייה*. gImageReader-3.4.0/docs/3_Add_language.md000066400000000000000000000025541417507262200200750ustar00rootroot00000000000000# Install Tesseract language definitions - The *Tessdata manager*, available from the drop-down menu ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) of the *recognize button* in the *main toolbar* allows the user to manage the available recognition languages. - To install the languages manually: - On **Linux**, it's sufficient to install the package corresponding to the language definition one wants to install via the package management application (the packages may be called something like *tesseract-langpack-*). - On Windows, first, in the gImageReader about dialog, check which version of tesseract is used. - If using tesseract 4.x, go to https://github.com/tesseract-ocr/tessdata_fast. - If using tesseract 3.x or older, go to https://github.com/tesseract-ocr/tessdata. - Then, in the branch selection button, under tags, select the version which is less or equal the tesseract version in use. Then download the desired language definitions (*.traineddata along with any supplementary files which certain languages need) and save them to Start→All Programs→gImageReader→Tesseract language definitions. - To re-detect the available languages, one can restart the program, or select *Redetect Languages* from the *application menu*. gImageReader-3.4.0/docs/3_Add_language.sl.md000066400000000000000000000036561417507262200205160ustar00rootroot00000000000000# Tesseract jezikovne definicije - *Upravljavnik Tessdata*, ki ga odprete z klikom n *Upravljaj z jeziki...* na dnu spustnega seznama ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/qt/data/extra-theme-icons/applications-education-language.png) omogoÄa uporabniku upravljanje z jeziki za prepoznavo. Za dodat jezik, le obkjukajte želen jezik in upravljalnik bo samodejno prenesel potrebne datoteke. - ÄŒe želite namestiti jezike popolnoma roÄno: - **Linux**, v vaÅ¡em upravitelju paketov poiÅ¡Äite in namestite ustezno jezikovno definicijo (paket se bo morebiti imenoval *tesseract-langpack-*). - **Windows**, najprej v gImageReader odprite ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/categories/preferences-system.png) ter kliknite na ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/help-about.png) *O programu* da preverite katero verzija tesseract je v uporabi. - ÄŒe se uporablja tesseract 4.x pojdite na https://github.com/tesseract-ocr/tessdata_fast. - ÄŒe se uporablja tesseract 3.x ali starjeÅ¡i pojdite na https://github.com/tesseract-ocr/tessdata. Nato v seznamu poiÅ¡Äite verzijo ki je manjÅ¡a ali enaka vaÅ¡i tesseract verzji. Nato prenesite želeni jezik (*.traineddata in pripadajÄe dopolnilne datoteke, ki jih nekateri jeziki potrebujejo) in jh shranite v *Start→All Programs→gImageReader→Tesseract language definitions*. - Da sprožite ponovno zanavo jezikov na voljo, lahko ponovno zažene program ali ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/categories/preferences-system.png)→ ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/actions/view-refresh.png)*Ponovno zaznaj jezike*gImageReader-3.4.0/docs/4_Add_dictionary.he.md000066400000000000000000000016551417507262200210540ustar00rootroot00000000000000# התקנת מילוני ×יות - ב- **Linux**, ×× ×”×ª×¤×•×¦×” שלך תומכת ב- PackageKit, התוכנית תציע להתקין מילוני ×יות ×—×¡×¨×™× ×‘×ופן ×וטומטי במידת הצורך. ×× ×”×”×ª×§× ×” ×œ× ×¢×•×‘×“×ª מסיבה כלשהי, תוכל להתקין ×ת מילוני ×”×יות דרך ×™×™×©×•× × ×™×”×•×œ החבילה (ניתן ×œ×§×¨×•× ×œ×—×‘×™×œ×•×ª משהו כמו *hunspell-*). - ב- **Windows**, התוכנית תנסה להוריד ×וטומטית ×ת מילון ×”×יות הרצוי מ- [http://cgit.freedesktop.org/libreoffice/dictionaries/tree](https://cgit.freedesktop.org/libreoffice/dictionaries/tree). ניתן ×’× ×œ×”×ª×§×™×Ÿ ×ž×™×œ×•× ×™× ×‘×ופן ידני: לשפה הרצויה (כלומר `it_IT`), הורד ×ת ×”×§×‘×¦×™× ***.dic ו- \*.aff** ×•×ž×§× ××•×ª× ×‘- `התחל ↠כל התוכניות ↠gImageReader ↠מילוני ×יות`. gImageReader-3.4.0/docs/4_Add_dictionary.md000066400000000000000000000014551417507262200204570ustar00rootroot00000000000000# Install Spelling dictionaries - On **Linux**, if your distribution supports PackageKit, the program will offer to automatically install missing dictionaries when necessary. If automatic installation does not work for some reason, you can install the spelling dictionaries from the package management application (the packages may be called something like *hunspell-*). - On **Windows**, the program will attempt to automatically download the desired spelling dictionary from [http://cgit.freedesktop.org/libreoffice/dictionaries/tree](https://cgit.freedesktop.org/libreoffice/dictionaries/tree). Dictionaries can also be installed manually: for a desired language (i.e. `it_IT`), download the ***.dic and \*.aff** files and place them in `Start→All Programs→gImageReader→Spelling dictionaries`.gImageReader-3.4.0/docs/4_Add_dictionary.sl.md000066400000000000000000000013601417507262200210670ustar00rootroot00000000000000# Slovarji Ärkovalnika ## Linux ÄŒe vaÅ¡a distirbucija podpira *PackageKit*, bo program ponudil, da sam namesti mankajoÄe slovarje v kolikor je to potrebno. V kolikor samodejna namestitev iz nekega vzroka ne deluje, lahko namestite slovarje Ärkovalnika iz vaÅ¡ega upravitelja paketov (paketi so morebiti poimenovani v stilu *hunspell-*). ## Windows Program bo poizkusil samodejno prenesti želeni slovar Ärkovalnika iz[http://cgit.freedesktop.org/libreoffice/dictionaries/tree](https://cgit.freedesktop.org/libreoffice/dictionaries/tree). Slovarji se lahko tudi namestijo roÄno: Za želeni jezik (npr `it_IT`), prenesite datoteke***.dic** ter **\*.aff** in jih shranite v `Start→All Programs→gImageReader→Spelling dictionaries`.gImageReader-3.4.0/docs/5_Options.he.md000066400000000000000000000064731417507262200175760ustar00rootroot00000000000000# ×פשרויות תוכנית - ניתן לגשת ל×פשרויות התוכנית מ*תפריט היישו×* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/gtk_skel/share/icons/hicolor/16x16/categories/applications-system-symbolic.symbolic.png), ×שר נפתח בלחיצה על הלחצן ×”×חרון ב*סרגל ×”×›×œ×™× ×”×¨×שי*. בעת הפעלת ×”×™×™×©×•× ×‘×¡×‘×™×‘×ª שולחן העבודה של Gnome 3, תפריט ×”×™×™×©×•× ×”×•× ×—×œ×§ מהסרגל העליון של מעטפת שולחן העבודה. - ×”×פשרויות מ×פשרות ×ת הגדרת הגופן של חלונית הפלט, כמו ×’× ×”×× ×”×™×™×©×•× ×™×“×•×•×— על מילוני ×יות ×—×¡×¨×™× ×•×’×¨×¡×ות תוכנית חדשות. - בעת הפעלת ממשק GTK+, ×”×פשרויות ×’× ×ž×פשרות לקבוע ×ת כיוונה של *חלונית הפלט* (×× ×”×™× ×נכית, ×”×™× ×ª×ª×¤×•×© ×ת החלק הנכון של היישו×, ×× ×”×™× ×ופקית, ×”×™× ×ª×ª×¤×•×© ×ת החלק התחתון). בעת הפעלת ממשק Qt, ניתן להזיז ×ת ×ž×™×§×•× ×—×œ×•× ×™×ª הפלט ב×ופן חופשי ×¢"×™ גרירת שורת הכותרת של חלונית הפלט. - ההגדרה *×ž×™×§×•× × ×ª×•× ×™ שפה* מ×פשרת לקבוע ×”×× ×”×’×“×¨×•×ª שפת ×”- tesseract ומילוני ×”×יות ישמרו מערכתית (כלומר, ב- `%ProgramFiles%` ב- Windows, ×ו בדרך כלל ב- `/usr` ב- Linux) ×ו בתקיות של משתמש מקומי (כלומר, בתקיית הבית של המשתמש הנוכחי). ×–×” שימושי ×× ×œ×ž×©×ª×ž×© ×ין הרש×ות כתיבה בתקיות המערכת. - בנוסף, ניתן להגדיר ×›×œ×œ×™× ×—×“×©×™× ×œ×”×ª×מת שפת ×”- tesseract לשפה כלשהי (לצערינו, הגדרות שפת ×”- tesseract ×ינן כוללות מידע ×–×”). ×ת רשימת ×”×›×œ×œ×™× ×”×ž×•×ª××ž×™× ×ž×¨×ש ניתן לר×ות בסעיף הגדרות שפה מות×מות מר×ש. ניתן להוסיף הגדרות נוספות בלחיצה על הכפתור הוסף למטה. ×”×›×œ×œ×™× ×œ×”×’×“×¨×ª שפה, ×”×ž×•×¨×›×‘×™× ×ž×©×œ×•×©×” שדות, ×”× ×›×“×œ×”×œ×Ÿ: ***קידומת ×©× ×§×•×‘×¥***: ×©× ×”×§×•×‘×¥ של נתוני שפת ×”- tesseract ×”×•× ×‘×ª×‘× ×™×ª *.traineddata*, כלומר, עבור ×נגלית, הקובץ × ×§×¨× *eng.traineddata* והקידומת ×”×™× ×” *eng*. ***קידוד ISO***: ×–×” ×”- [ISO 639-1 language code](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (כלומר *en*), ×ופציונ×לי בשילוב קו תחתון ('_') ×¢× [ISO 3166-2 country code](http://en.wikipedia.org/wiki/ISO_3166-2) (כלומר *en_US*). מידע ×–×” נחוץ בכדי להת××™× ×ת מילוני ×”×יות לשפה עצמה. הבחירה בקידוד המדינה - ××™× ×” רלוונטית לחלוטין, ×ך יש צורך בהתקנה ×וטומטית של מילוני ×יות בכדי ×œ×ž×¦×•× ×—×‘×™×œ×ª ×ž×™×œ×•× ×™× ×¨×œ×•×•× ×˜×™×ª. ניתן ×œ×”×ž×¦×™× ×§×•×“ ×–×” ×’× ×× ×ין ×פשרויות מת×ימות, התוצ××” היחידה תהיה, ש××£ מילון ×יות ×œ× ×™×ª××™× ×œ×©×¤×”. ***×©× ×ž×§×•×¨×™***: ×”×©× ×”×ž×§×•×¨×™ של השפה פשוט קובע ×ת תווית הכניסה לשפה ב*תפריט השפה*. gImageReader-3.4.0/docs/5_Options.md000066400000000000000000000053521417507262200171760ustar00rootroot00000000000000# Program options - The program options can be accessed from the *application menu* ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/categories/preferences-system.png), which opens when clicking the right-most button of the *main toolbar*. When running the application within the Gnome 3 desktop environment, the application menu is part of the top bar of the desktop shell. - Options allow setting the font of the output pane, as well as determining whether the application will notify about missing spelling dictionaries and new program versions. - When running the Gtk+ interface, the options also allow setting the orientation of the *output pane* (if vertical, it will occupy the right portion of the application, if horizontal, it will occupy the lower portion). When running the Qt interface, the position of the output pane can be freely moved around by dragging on the title bar of the output pane. - The *language data location* setting allows to control whether tesseract language definitions and spelling dictionaries are saved in system-wide (i.e. `%ProgramFiles%` under Windows or typically below `/usr` on Linux) or user-local (i.e. below the current user's home directory) directories. This is useful if the user does not have writing privileges in system-wide locations. - Additionally, one can define new rules to match tesseract language definitions to a language (unfortunately, the tesseract language definitions do not include this information). The list of predefined rules can be seen in the Predefined language definitions section. Additional definitions can be added clicking on the Add button below. The rules for a language definition, which consists of three fields, are as follows: ***Filename prefix***: The filename of tesseract language data files is of the format *.traineddata*, i.e. for English, the file is called *eng.traineddata* and the prefix is *eng*. ***ISO code***: This is the [ISO 639-1 language code](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (i.e. *en*), optionally combined by an underscore with the [ISO 3166-2 country code](http://en.wikipedia.org/wiki/ISO_3166-2) (i.e. *en_US*). This information is necessary to match spelling dictionaries to the language. The choice of the actual country code is not strictly relevant, but it is necessary for the automatic installation of spelling dictionaries to find a relevant package of dictionaries. This code can also be made up if no appropriate choices exist, the only result being that no relevant spelling-dictionaries will be matched with the language. ***Native name***: The native name of the language simply determines the label of the entry for the language in the *language menu*.gImageReader-3.4.0/docs/5_Options.sl.md000066400000000000000000000042141417507262200176070ustar00rootroot00000000000000# Možnosti programa - Možnosti programa ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/categories/preferences-system.png) najdete v meniju skrajno desno zgoraj ![](https://raw.githubusercontent.com/manisandro/gImageReader/master/packaging/win32/skel/share/icons/hicolor/22x22/categories/preferences-system.png). ÄŒe poganjate program v grafiÄnem okolju Gnome 3 desktop je ta meni del namizne vrstice goraj. - Možnosti omogoÄajo nastavitev izhodnih pisav, kakor tudi Äe naj aplikacija opomni o mankajoÄih slovarjev Ärkovalnikov ter novih verzijah pograma. - V kolikor poganjate program v grafiÄnem okolju Gtk+ vam tudi omogoÄa nastavitev orientacije vrstice rezultata - *Mesta jezikovnih podatkov* doloÄa ali so jezikovne defnicije in slovaji shranjeni na globalni sistemski lokacji (npr.: `%ProgramFiles%` za Windows oz za Linux ponavadi v `/usr` ) ali pa le v uporabniÅ¡kem obmoÄju (torej znotraj uporabnikovega direktorija). To je porabno v kolikor uporabnik nima globalnih pravic pisanja. - Dodatno lahko tam definirate nova pravila a ujemanje z jezikovnimi definicijami tesseract-a (nažalost jezikovne definicije za tesseract ne vsebujejo teh informacij). Seznam pred definiranih pravil lahko vidite na prvem seznamu. Pri dodajanju jezikovnih pravil je potrebno dodati 3 polja in sicer: ***Predpona imena datoteke***: Ime jezikovne datoteke za tesseract je vedno oblike *.traineddata*, npr. za AngleÅ¡Äino, je ime datoteke *eng.traineddata* torej je predpona *eng*. ***ISO Koda***: To je [ISO 639-1 jezikovna koda](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (npr. *en*), opcijsko kombinirana z podÄrtajem [ISO 3166-2 regijske kode](http://en.wikipedia.org/wiki/ISO_3166-2) (npr. *en_US*). Ta podatek je potreben za ujemanje slovarjev Ärkovalnikov na prepoznan jezik. Ta pododatek ni kritiÄno potreben, a je potreben za samodejno nameÅ¡Äanje slovarjev Ärkovalnkov. Ta Å¡ifra se lahko tudi izmisi, Äe ne obstaja primerna izbira. Posledica bo le ne bo konrole ali je beseda najdena tudi v slovarju. ***Izvorno ime***: Ime jezika, ki bo prikazano v meniju možnih pisav.gImageReader-3.4.0/docs/6_Contribute.he.md000066400000000000000000000051241417507262200202520ustar00rootroot00000000000000# תרומה לקבלת הצעות ו / ×ו תרומות מכל סוג ×©×”×•× ×× × ×”×’×™×©×• בקשות-השפעה ב×תר [דף הפרוייקט של GitHub](https://github.com/manisandro/gImageReader), ×ו צרו ×יתי קשר בכתובת [manisandro@gmail.com](mailto:manisandro@gmail.com). ×ודה במיוחד ×œ×ª×¨×’×•×ž×™× - להלן ×”×©×œ×‘×™× ×”×¢×™×§×¨×™×™× ×œ×™×¦×™×¨×ª תרגו×: ×): תרגומי gImageReader מת××¨×—×™× ×‘- [weblate](https://hosted.weblate.org/projects/gimagereader/) ×•×ž×ž×•×–×’×™× ×ž×¢×ª לעת ל- master. ×ו ב): 1. הורד ×ת [×רכיון המקור ×”×חרון](https://github.com/manisandro/gImageReader/archive/master.zip). 2. היכנס לתיקייה `po`. 3. כדי ליצור ×ª×¨×’×•× ×—×“×©, העתק ×ת הקובץ `gimagereader.pot` ל- `.po` (כלומר `de.po` עבור גרמנית). כדי לערוך ×ª×¨×’×•× ×§×™×™×, פשוט בחר ×ת הקובץ המת××™×. 4. ×ª×¨×’× ×ת המחרוזות ב- `.po`. 5. שלח ×ת הקובץ **po** ×ל [manisandro@gmail.com](mailto:manisandro@gmail.com). תודה! ## ניפוי ב××’×™× ×•×ª×ž×™×›×” ×× ×תה ×ž×•×¦× ×‘×¢×™×” כלשהי ×ו שיש לך הצעה, ×× × ×”×’×© דו"×— ×ל [מעקב הבעיות של gImageReader](https://github.com/manisandro/gImageReader/issues), ×ו צור ×יתי קשר ישיר בכתובת[manisandro@gmail.com](mailto:manisandro@gmail.com). הקפד להתייעץ ×’× ×‘- [ש×לות נפוצות](https://github.com/manisandro/gImageReader/wiki/FAQ). ×× ×תה חווה קריסות ×ו נתק, ×× × × ×¡×” ×’× ×œ×›×œ×•×œ ×ת המידע ×”×‘× ×‘×“×•"×— / ×ימייל: - ×× ×ž×•×¤×™×¢ מטפל הקריסות, כלול ×ת ×”- backtrace המוצג ש×. בכדי ×œ×•×•×“× ×©×”- backtrace הושל×, ×× ×תה מריץ ×ת התוכנית ב- Linux, ×•×“× ×©×ž× ×¤×” הב××’×™× `gdb`, כמו ×’× ×¡×ž×œ×™ ניפוי הב××’×™×, ×”× ×ž×•×ª×§× ×™× ×× ×”×”×¤×¦×” שלך מספקת ×ות×. בדרך כלל החבילה המכילה ×ת סמלי הב××’×™× × ×§×¨×ת **-debuginfo** ×ו **-dbg**. - ×× ×תה מריץ ×ת התוכנית ב- Windows, כמה ×¡×ž×œ×™× ×©×œ מנפה הב××’×™× ×›×‘×¨ ×ž×•×ª×§× ×™× ×›×‘×¨×™×¨×ª מחדל. וקבצי היומן ×”× `%ProgramFiles%\gImageReader\twain.log`. - ×× ×תה מריץ ×ת התוכנית ב- Linux, הרץ שוב ×ת התוכנית דרך Terminal וכלול ×ת כל הפלט המופיע ב- Terminal. - נסה לת×ר כמה שיותר טוב מה עשית ומה הבעיה הניתנת לשחזור. gImageReader-3.4.0/docs/6_Contribute.md000066400000000000000000000043501417507262200176570ustar00rootroot00000000000000# Contributing For suggestions and contributions of any kind, please file tickets and/or pull-requests on the [GitHub project page](https://github.com/manisandro/gImageReader), or contact me at [manisandro@gmail.com](mailto:manisandro@gmail.com). I'd especially appreciate translations - here are the main steps for creating a translation: A) gImageReader translations are hosted on [weblate](https://hosted.weblate.org/projects/gimagereader/) and are periodically merged into master. or B): 1. Download the [latest source archive](https://github.com/manisandro/gImageReader/archive/master.zip). 2. Enter the `po` folder. 3. To create a new translation, copy the `gimagereader.pot` file to `.po` (i.e. `de.po` for German). To edit an existing translation, simply pick the corresponding file. 4. Translate the strings in `.po`. 5. Send the **po** file to [manisandro@gmail.com](mailto:manisandro@gmail.com). Thanks! ## Debugging and support If you find an issue or have a suggestion, please file a ticket to the [gImageReader issue tracker](https://github.com/manisandro/gImageReader/issues), or contact me directly at [manisandro@gmail.com](mailto:manisandro@gmail.com). Be sure to also consult the [FAQ](https://github.com/manisandro/gImageReader/wiki/FAQ). If you are experiencing crashes or hangs, please also try to include the following information in the ticket/email: - If the crash handler appears, include the backtrace which is shown there. To make sure that the backtrace is complete, if you are running the application under Linux, make sure that the `gdb` debugger as well as the debugging symbols are installed if your distribution provides them. The package containing the debugging symbols is usually called **-debuginfo** or **-dbg**. If you are running the application under Windows, some debugging symbols are installed by default. - If you are running under Windows, include the `%ProgramFiles%\gImageReader\gimagereader.log` and `%ProgramFiles%\gImageReader\twain.log` log files. - If you are running under Linux, run the application from a terminal and include any output which appears on the terminal. - Try to describe as best as you can what you were doing and whether the problem is reproducible.gImageReader-3.4.0/docs/6_Contribute.sl.md000066400000000000000000000042621417507262200202760ustar00rootroot00000000000000# Prispevaj svoje znanje/izkuÅ¡nje ## Prevajanje Za predloge ali prispevke katere koli vrste, prosimo ustvarite *ticket* in ali *pull-request* na [GitHub strani projekta](https://github.com/manisandro/gImageReader), ali me kontaktirajte na [manisandro@gmail.com](mailto:manisandro@gmail.com). Å e posebej sem vesel prevodov - Tukaj so glavni koraki za ustvarjanje prevoda: A) gImageReader prevodi se nahajajo na [weblate](https://hosted.weblate.org/projects/gimagereader/) od koder se periodiÄno samodejno prenesejo. ali B): 1. Prenesite [zadnjo izvorno kodo](https://github.com/manisandro/gImageReader/archive/master.zip). 2. Odprite mapo `po` . 3. Da naredite novi prevod skopirajte `gimagereader.pot` datoteko v `.po` (npr. `de.po` za NemÅ¡Äino). Za popravke obstojeÄega prevoda pa izberite že obstojeÄi. 4. Prevedite nize v `.po`. 5. PoÅ¡ljite datoteko **po** na [manisandro@gmail.com](mailto:manisandro@gmail.com). Hvala! ## Programski hroÅ¡Äi in podpora ÄŒe najdete težavo ali imate predlog ustvarite *ticket* na [gImageReader issue tracker](https://github.com/manisandro/gImageReader/issues), ali me kontaktirajte direktno na [manisandro@gmail.com](mailto:manisandro@gmail.com). Preverite tudi obstojeÄe [FAQ](https://github.com/manisandro/gImageReader/wiki/FAQ). ÄŒe se vam dogajajo "zamrznitve" ali "sesuja" pograma poizkusite v ticket/mail podat sledeÄe informacije: - ÄŒe je pojavi poroÄilo o sesutju, priložite naveden sklad, ki je viden tami. Da ste prepriÄani, da je sklad popolen in uporabljate Linux preverite da imaste nameÅ¡Äen razhroÅ¡Äevalnik `gdb` kakor tudi simboli razhroÅ¡Äevalnika v kolikor jih vaÅ¡a distribucija nudi. Paketi, ki le to vsebujejo se ponavai imenujejo **-debuginfo** ali **-dbg**. V kolikor uporabljate Windows, so nekateri ustrezni simboli že privtzeto nameÅ¡Äeni. - ÄŒe uporabljte Windows, priložite Å¡e log datoteki `%ProgramFiles%\gImageReader\gimagereader.log` ter`%ProgramFiles%\gImageReader\twain.log` . - ÄŒe uporabljate Linux, zaženite aplikacijo v terminalu ter priložite vse kar se vam izpiÅ¡e v terminalu. - Poizkusite opisat, kar se da natanÄno kaj poÄnete in v koliko se da težavo reproducirat.gImageReader-3.4.0/docs/7_Translate.he.md000066400000000000000000000000141417507262200200630ustar00rootroot00000000000000# ×ª×¨×’× gImageReader-3.4.0/docs/7_Translate.md000066400000000000000000000000151417507262200174710ustar00rootroot00000000000000# Translate gImageReader-3.4.0/docs/7_Translate.sl.md000066400000000000000000000000141417507262200201050ustar00rootroot00000000000000# PrevajanjegImageReader-3.4.0/docs/8_Issue_tracker.he.md000066400000000000000000000000261417507262200207350ustar00rootroot00000000000000# מ×תר בעיות gImageReader-3.4.0/docs/8_Issue_tracker.md000066400000000000000000000000171417507262200203420ustar00rootroot00000000000000# Issue trackergImageReader-3.4.0/docs/8_Issue_tracker.sl.md000066400000000000000000000000171417507262200207570ustar00rootroot00000000000000# Prijava napakgImageReader-3.4.0/docs/FAQ.he.md000066400000000000000000000000321417507262200163070ustar00rootroot00000000000000# ש×לות נפוצות gImageReader-3.4.0/docs/FAQ.md000066400000000000000000000000001417507262200157070ustar00rootroot00000000000000gImageReader-3.4.0/docs/FAQ.sl.md000066400000000000000000000000071417507262200163330ustar00rootroot00000000000000# FAQ gImageReader-3.4.0/docs/News.he.md000066400000000000000000000000161417507262200166160ustar00rootroot00000000000000# חדשות gImageReader-3.4.0/docs/News.md000066400000000000000000000000101417507262200162150ustar00rootroot00000000000000# News gImageReader-3.4.0/docs/News.sl.md000066400000000000000000000000121417507262200166340ustar00rootroot00000000000000# Novice gImageReader-3.4.0/docs/img/000077500000000000000000000000001417507262200155445ustar00rootroot00000000000000gImageReader-3.4.0/docs/img/gimagereader.png000066400000000000000000000765521417507262200207050ustar00rootroot00000000000000‰PNG  IHDR\r¨fbKGDÿÿÿ ½§“ IDATxœì½w”\×uæû;çÞ[9wÎhdFEÓ²ä(yìg{Í[“l$K²dKY‡5|K-Û²fä(ËÉQ"mZ")Q$!Ì`&ˆÐ:çîê®®®n8ïêêŒD¢ÕÖEwW¸çœ[u¾»÷wöÞGðÁÞŸû9WÌ2~F¢>†ÐÂBˆïjB}מ{öرcÖõîß&6ñf„¸Þx£xÇÏüL‹céB|H š…,?$âaMÊïʲó½‡ÿíïã׻ϛØÄ›5K·ýÄϾ!~U ~\!…¸ ƒH(@"™‚%X"BŠ¡x@¢ÝR™'î¹çžòõË&6q½P“pëþì%Ô‰êÄn¬‹rËþ=ìÚÒ¦i˜¦ÅÈTœ¡ñI†'¦É +I@D…¦<(¤ö]Ë~ä[_ûÚüõÛ&6q-Q“päÇ~öPêe¿ÏË_ü¯ÿAz>ÉÔÔŽã ”Xüé(Åôì£SqF¦âÄ•9¾Œª‡#„xÁQ]jÞÚúÌ]wÝå\·Anb×µIïyÿ!4íåX$ÄCßøŽ£ÈòÌÎÌ02:Jbv¥ÔB0M‹éD’±é†'§IesËô`‘f5!SR> Lyÿwþé/’×i¸›ØÄ†¡f @Iùr,æáo~mÝט¦É|*E|zš¡¡! …ÀBHgóLÌÌ21“`,žÀ²ìÕ–B[ ñªâ”¸ÿ[_ÿ‹—u-ƺ‰Ml$j’ßùS7)M¾‹„yäî¯_òõJ)ò…333LŒ311ã8‹ÏUÚŽÃt"ÉD<ÁTb޹tv5 „@ 9P ¡Ýï+Їþñ¿œÞÐob„š$€wþÔMš/E#a¾Ïß]ñûmÛ&•J1=gppL&½Æ2PJ‘͘˜™cznžé¹$¦e¯C¢(„xJqTSÚ}ßüê—z®ê`7±‰ DÍ€¼„yô_þþ Ÿ¯X,2;›`bbœ¡¡!lÛ^+&:ÉL–‰™9&gçHå*.Å2"XpBUhd\ÖÃ~ùË¥7ÜÁMlbƒP“°ÿ‡~â°âÅh$ÌcÿúWõÜŽãÉd™™‰344Äôô4°V;(–ÊÌ̧™J$™žKaÚÖ*2!òRˆg„8ˆ{¿ñç_½ªÝÄ&Þ j–¼„9vï?nh[¥R™¹¹9&&&¤Ï+ A)Å|6Çì|šé¹Ée+ r¥Ë0 àMÊû=¥ôã_ùÊWÌ íü&6q Ô, Ô‹ÑpˆÇ¿õÏ׬]¥ ŸÏÇfttt]1±lY$RfSfæ3”-k H!æâûqÔ–úýÿð¥ß›¼fÙÄ&P“°ïÝ?~Å Ñp'¾ýëÖ˲˜K&™œ˜ ¿¿Ÿtz}11/Hg™Kg™_ÐVYŽâ8*¥z 3èÝ BÚÄ5AÍ€Rê…h(Ä“÷]?Xb±Äìì CÃà ô÷cYÖB°l›d&Ïl:C2“_ge„3BÈcÀŽãºïk_ºk3Dy‚š$€]oû‘#𦽠…xúþo^ïî¬ Çq˜ŸO155Éàà ““ 5!Je™s™¹B ÅÚ $!Ä«RŠ)îÿêï~3iW 5I;ïøÑ›5M= …x滯ww. eÓd&ghh˜þu#mÇ!“/’̘Ï0íµqBˆ!|XJu´äø¿÷·_ølæzŽkµ%€¾YJíùH(ij߹çzw犡”"›Í219ÉÐà ###ض½ø\õgÉ´H勤 E²…ò:ÖÌÁ#ñ]éVþé]wM\Çam¢Q³ „|>qü;ÿr½»ó†aÛ6‰D‚¡áaz{{I§Rk\ÛqÈ•L2…Ùb™Ò:Q‰•eFyTh<@2ôð—¿üÉÍ ¤M\5K ž‡‚<ÿà½×»;W…B©©)†††èííÅ4Í5„P²lrÅ2¹’I®l-³­„¼@<ƒè.uïû·7ƒ6±µI·ßy‹B<yá{ÿv½»³¡p‡Dbޱ±1úûû.(&æË"È—MLG+­)Ä„¸ÉÑ\cìñ¯|ä#›AH›¨Mè¾ýÎ[4Ås‘PˆzkÀj”Ëe¦ãq†‡†9wî,ÙlX-&*ò¦EÞ´)ZÎz+ sRˆï+)ŽÚ÷é·>µ„ôŠÚ$€#wÞ"5õ\$âŇ¿u½»sÝ €T*ÅØØ}½½ŒŽŽbY•ÈKIL Óq(XEÛÁrX¬—X B’B¼ò¨ÐÔðÙ_!6—@P“°åðÝ*5އC^~ä¾ëÝ7 lÛfvv–ááaΜ9ÃÜÜÜ:b¢¢ä(J¶¢¬@±FHœ’cRð€Ë÷Ýõ©Om!½…Q³ ¤:xåèýÚÖÏ÷qêÜ·êæÀîVt]ÛÐö®&r¹cããô÷÷3ÐßO±X\["ÍQ˜JPvÀB®®†d !Žƒ¸_ÓÄÑÏÿú'_Þ´ÞZ¨Qxû­íx8äÕïo,ÜûÐ þìïÀehìÛÕÊá}¼íÈV:Z¢ÚöÕ„Rй¹99{¶‡ééé‰LJ)PvÀ B®ÜcAŠ!‰|XŽ-ß÷¾ðÙn!Õ8j“nzÛmJhφCAN<úÀ†¶µœV£¥1Ì퇶pûM[9°§ ]“Ú—«‰b©Äøø8ƒœ?žL&³Ö]P` [H©¯vŠBȧ¤G¥R÷ýΧ>¾Y ©Q“ÐvÓÛnÓφ‚Nûu1X¯ÇàÆ=íÜ~S7·ßÔM]Ä¿¡ýºÚH§Óô pþìÙÅÈÄ*@Ep´…†#5i€”« a@yT Q~ø“ŸÜ BªÔ,H%ž œzüÁ mër `9„ìØÒÀm‡*d°cK#¢®´£Êq(—ËLNM348ÀÀÀñøÚÝÔ”8ÒÀ–:B7V­,‚gÚJê÷þöÇi3éMŠøZ®EÛ¡;nÈgB?§ŸøÞ†¶õz`5"!/7èâö›º¹ùÆ.|×UêÝÕ‡ã8•C)ÇÁ¶R©4##à 1>:J©´êæ.Jj8RÝš¶Ò:@œÑ¤¼_"†4óñl!½iP» Ä3Á`€35@˱\H¼ãðV:[ß\B¢Z˜øU¨€½p8X–Ålb–Ñ‘1&ÆÇ˜ššB©•µK” (Í@¸\ˆeb¢bNù})8ªaÜÿ©üÇÍ ¤ëˆš%ž ô<õІ¶uµ `5V‰o’eÆÕ°’l,{éïB¡ÀäÄ$ãLMN,¦9/BÐ Ð]H—g…v …0…à)‰¸ûSú/%6—¯9j’Z÷Ý~’§C=O?¼¡mm4,‡Çmpð†ë/$*¥V€rì°–AÕ*°mÓ²°,‹t&C|j’é©)³³‹K†aбm'ÃñY`ex²|3£ó_îúÅ_,^—Aÿ€¢¦ è÷sö™G6´­kIËq½…Ä*¨ešÀšÉo-· l¬°¬ !”Í2‰Ùs‰ɹù\MÓ¸ímoçùÓçp”Z½’pT†}ïÿôÏÿ|áÒ=ÜÄÕÀõ·7_¼õA—ËÅ'>øŸ6´­žþi^81¼¡m\‰ù'zÆùΣ§¸ïèk Ž&°‡Æº †±±Xm”ª¬VêËO«…§*ÿ Àãñâöûñ‡¢DêÈe3ÌÆ§¹ãæÃŒNÍà8+¬þ­¢T¾áŽÃ‡î9vìØ¦;p  _ï¼^T¢×~p çΧ <òÔYyêì5ïÌR")åÂu ‡ÄQ ¹I¨iZÅ})%RjH©ð¹ÝhR0—¶¨ïèbü|™Ô· o(Âtb†l6‹×ëeÏÖ.r…“‰$‚Å;S£²åý_üâÝ·~úÓ›+š$LPšÚÜã ñz…D+cýa™ X%'U¬ÂJA°* ꚆÇdppƒbYvn#óê)²…"ÎB»ö[Ü^“‹ô†šÔÜu­RðK†aðkþÅ m«4€×ƒ+/&ªÅÿW¯®+Ë„•ÙBÛ¶È¥SìÙ³gQ< y=LÌ$pVú+G~äýè;zÿ}'¯Öø7QAjJ(@9?8Ë€ÉxŠ{:Ágþ׿ñ…ßú£ûyàÑS$’¹Å׬³Á’¿âXÐ ªw~­âÿkZUÐ0t·×O:•BJ‰ËåÂår ‡¸ak'À M‡¿üƒ?ÿ›]×ëú¼UQ›.›"àF¢*$e/-D$Þ´¯ƒÛu³g{óbÙ0)J¤(¡VެèU `ul€¡i %¯\.‡ßïÇåraY- õÌ¥2ŒNÏVü€ÊBÜýÅ/Þ}Û¦põPÛp-ÚAP¿u;þHiX¥å|–r>O9—¥J­ˆw«a=!ñÈþNn=ØÅM{ÛñxŒ‹UAMV@µ@º®#xý~ …ápÃ0I`GG+©LŽt~Å\?`z3ŸþÛuºo9Ô$(¥„àÚXyG£óÐá ÷ÅvÈ'd³äfgÈÌÎâXoÝt÷ùt£OŸãèÓçÐ4É®­Ürc7ïo§¥1X™ð«V*n@…ª¢ &%…Ëí¡X,¢ë:¶mãv»ó nØÚÉ‹gz±Vì§ÿÏ¿úØç>ö_¿s½®Á[ 5™ Ù±ÿ =îóz?ñ솶uïC'xxHlhº¬×+Ç!“œ%=1޹ºxÆ[MõAŽìoçÐÞ6vm‰`EêaZ63ÉyƧã¸%limæàÁƒ”ËeÊå2Åb‘|>O6—cd|’žáñÕÛžÅmƒ¿õ¡M_ï1×:jÒ°í¹ýÏ—_þ2—BîÇ͇ÿ~³~ÀëCmºB¨ÕùhÝ1É¥³øC5Ϲ}^öÞ~ˆé‘ Î>õ,ûöwâQ.¦&SLǓħç©kÒØBk ãk ‘$D}}mÙ,WÀù„›²]yÌk8Ôy-ê}öЏ4)iêjg2 [·17<@.™Üðk°T'÷R”a5¼XÓ´u]ŽæF’™鲪aïv5¶þðÅë2GmÀ5„PÝ}?»o¾‘–î<RjØf MYx Åmû‚üè­?ÀcžæÕýƒ^š[¢äs%ÎäÔÉ¥Òøš”Ô7ilÓÜ¡­-Ê–ŽFæËy‚)3]ÄsŠŽp™»"øe‹0®vLÐqèg=ʵ"ë M(¥¢2ñW“@•ÇYA;:ZxµwÛQKABŠßý½?ýÊ¿ù+>]Uƒ¨M¸†@©P$=6@WÌbGKá°·Úª2ŠRŠï=x‚§Ÿ<@&S “Y b©«ÑÒ#05•`h$ÎôtŠ“'F€ )´wÖqËmÛÙ¶s ‰‚FÙÑžwÑ)ãX6/ÂòH_4FÃÖmÌ ô]‹ËpUQ)~¬—ö€E!°*ðVW Àã!è÷ÓÙXÇÀäÌòÓy¯Ý}÷ÝïøùŸÿù7ßòÈ›µI ¸‹R“|ôã?B[{삯ÉåJ|ë__ §gü‚¯I̦I̦ñz]¼q;?òžÃd³††§žf|"ÁðÐ ÃC3tíMR¿ûF¤4ñ0< ekýó¶ì=@rb «X[Åt¥¬|~rY^AÕï_¾"P­L¼Ü hi¨c.%™+,Of¹½wzþW€ÿ}}FT›¨Q°ÔµÊcBÐzTÙrÙâ¥yìû§Èç/O‘/Ê<{ü ÇŸëa÷®î¸ýÞ÷Þ#”M‹Ñц†§H¸›+{ñ9»D‘î2èºéfúŸyò Gv}¡ µHU¬v„+¬€ÅUÓdk[3¯öU\¥úÎï}þÿåwçW7W.µ¹ kìˆêºÎg>¾±«gz'¹ïá×½(¥ÈfŠŒŒÌòô“ç9öÔ"ÔD][ >¿\:‹m]¾:;›â•Wû8sf˜bÉ$òÑÕÑH8d&wé÷Wá ) ækGlˆUƒ[ë´6ÕÓÜܼøÜz©ÇUëÀqœñÐA*E2³âBBpø]·ÞüµÍUËCmZB\Ój =§Çè9=¶æñHCÍ]mxü>n|×­ ž:OÏó¯R*\¾I>O2ýèÒämmòî÷ÎOK.·èQLJÈ%S©Ën÷zBÓ–V4mé>Tu–ëÕUÕ®@S}”ÙT†ù• CwhÑæ_¾ÖcªEÔ¨ÐÔ!Ô4Ï|üÃÚVOœ©¢¤¾¥©ë”òÅÅ»Q1_ ÿµ³äRi¤¦á ©ki¤{ß.2ói2É+›Œš&¹íöíüÜÏßFsL£- é"\Žw!¤$ÜÔÌÜÈð›2Lx94 ꣕»ü––m-Ô×ׯ¸óWuåXm8ŽƒÇЉϧ ˆ,°¥à]ïú©¿ûØw¿;wMTèI @píö³¥Î-ï}'ÕmylËbv|šÁÓç™Á±m†{úîéC7tbÍ Äšˆ6Ö110rI¥ÒãqÑÖeçîöíï ö¡LßíðÎ]ÈBïL¦.~:—?ÀÖÛßNßÓOàXP ¯'t8D!1æJã Ñt}K“ý¢±A¿Î†S3, lõI[üµRêÎÍý/Žš$×ÌГ§î{„ÃwÞ7@ÓušºÚhêj£Ë3r¦—¡ž>²ói,Ó">:I|te„^¬.À­·nÇçwáö¸]¯‹@ÀM8ì[Û¨‚Ñ´A®¬áÑü†×œ!þÊiJÂG¤½ƒ@]ëErêØñŽwÓ÷ôØo²Pa©øë(ÏV&½”å¬ €*–ßýWÇTÁª+Ð\c6•&]X¦˜:¼ûwÿÏ_| ø³k0´šEMæ„v¸‡ãn—‹ø™6´­{øöwO"umûw±ãÐÞEŸ¿ ¥`nrš¡ž>Æû1KkëèºdÇÎöîkgç®V|¾ çX–ÃÔTšé¬†5 „\l';ŸÂ2-[¸0AÉZû1êš ä¶Ñe…)Ír™R¡D¹P¢\,R.Ȩ́É.ficÉBs¹7µà ‰Å4üj«Tâ–-n9|ˆÎÎί_žìµ|‡bÓ4)—Ë”J%òù<¹|žt:Mb.Ék#«÷ÌI©ßø;ŸüHÿ†®†Q›€%òe ‰Ð4”‚¾gé?užöm]l¹a;u­ÕòXP×ÚD]k7ýÐíÌMÍ0=:ÁôÈÉ©”RX–CÏ™qzÎTb"MÍa £ò8¶"—+’É™ŸÏãØ•"‘†:n~ï;ÕE‚Ñðš.*¥(” %›bÙ¡\v°lE² ñ{5ÂA8xá1*Eb2ÎȹOŸßZ‹v¹ÌÜè0;váõû! ºÛ¾ÊXŽå‚`õ¨Š«]PÀO[]„áø\%º°£åWXÿø‰«> ·jSŒ6·!ø¦iüƯl¬xnp†—NO€x=.”©D’᳌œëÇ,–ñ|¸<•Ì>!¾`€†öº÷îdûÁ¨kmªäA©P@9ŠbÑ$1›%O§™™I“Jå)Ê+ˆ­˜/0|¦ÍЈ5¯¿C°C—ø<!¿N8hàuKt]bZŠù´I±l£ÉÊëÖ9¾`€–îÜ>/Sƒ£k_s•KÎ*\  3bÐÑÞF °2×âB‚`•V ‚¶ãàÖ5’é,åeú‡‚w¾ï'‡Ž=ô6¨FmZ×0XÈŠ2ÿîwïÀã6€JäßÔTŠññ$££ ž¸÷,h„¶Ý´t¶â[–8d¸]´twÐÒÝT*ÍÏ$™›Ž“NÌ“O‘žKQ\™å¶¶móÚ“/ŒÏrË{ßź,° R€×­áuWø]¶­(™¶£Ðä…ß_¾‚åË×¥ÈMBÐ'D¾‹Z•·¬× öz1M“ím¼60º¢¬¸#œ/þÏ/}é{¿õk¿¶YAhj“®!¤¦ñžÞ¾ìÎé÷»Ù¶­‘mÛJ¾þðp‚¾¾8¯>rž¢%iÚÒJsG+±æzIJûBJ¢MuD›êV´c–L2ó"(æòóEJùÅ\ˬÜÑ”¥b ·×sEcT4ý­rrE߉Î<÷êûõ@ÓV©H¶\BʺKnfz!Apyõ ÅU@€ÖX„ÑÙAQ1ÓÖþø7d@5Œš$¥òšhº[_1ù׃¦I¶nm`ëÖÞûÞ½ÌÏè훦ïü^9–"ÒÔHc[õmMø‚þuÏa¸ bMõ1„K"›H0ôÚ)ú{†Ð öí;ˆ4Æð‡‚¸ÈƱmr© ¹Tš¹x‚Ù±ÉEbºšæ —&Ö­}ýÚåVÀêB¢eÓ¤½©žd&Kv™ëñïïúã/ã®_ÿÄ}WÜé·0jr ¼uß%ä †®3{ö¥ më{Ïn^g©î2aÛCC úúgèíS0õ-Ô·VÏ{é“l¤PD¼6 > ŸQýÛa|¦ÄŒDè¯t¤‡‘sœ9þ2ùÌåÇ-»tèh­‡ßãâÇnßÉm·ÝF(ºx{+7]S=hy!Ñt:M|v–SCãÀŠLFŠ–oß>ûÁÌewø-Žš´¸†Áê âš&Ù¶­mÛxß{o`>™§·–ó½Cœ|æ%¡Áh˜pC„HCáº0RnŒ6+%„\6aEØc£­¢©I:š½´+›ùb‰‰Œ±X¤d5„”tíÙNó–vž¸÷{¤——‡`• ?ŠŠ+p) `E›—á x, Óã! ÑI3•\1×;=zþŸ¼¬P» ¸&.€c)r¹2~ÿ•Õþ»"Q7éäæ#€ÀÅ2LN¦xñ…^ž¾œP,D¸>J¤!J0".®2\ „Pø ‡ Û!è²ñÎ¥ôÃÅ÷E½6!ÍÀœ›lùÂÔíõкµó² @×b¸¸ô¥­Ã/ݧ•®À¥ ‰–M“®æFæ²yJ¦½-¨ññßù“/óóŸúÄÓ—Õá·8j“®%„ä‰ããüØwoÀÉš²ð°½ÓÏöÎýXö>†‡çM23;Éùs½$Y4à  ˆ„‚¸½\7bÙmÜ,–ñ{%± Ag«ˆ_CÆ’&`K¤Ì©øúnŠiš Ÿî¥÷ÕÓ‹yCat«T¦”ͬÉK0´¥ø ·¡/®í_.®$YÈ4M¶4Ösnl …@ @JÛù³ÿÕ_Ýü•|ä­»ƒËe¢& @ ®Ý®Bpúü<š>»noÃíÚØÐ ]lÛZǶ­K«¶ãLH$r‹&¶å€(áó*|~‘ WT IDAT)$©TG÷˜Í•<û®-1vílf×î¢Ñ×§cšZˆ¼^i:ô¾ršžç_Yõnk§yçn¤®£‡b6Cjbœ¹‘aŠ™4ºî,€[¿l .-®®`–Ë4Ä"ÄçRÌåò‹œÁéâoÿßëº(o!Ô$\Kˆ…HÀ“çæéJ³wWŒvDi¨»vâ&%õu~êëÖ_AhoðÄ“½MÇåÒ¹õûÙ²­PÄGÙQ NgfP@#ö\–+à8¬™üP‰H¬h+ `ªç43}½Ôuumïīǻ;LóîHMNb> v±²  ë‹ùrqEÉB ®@w[©…â!Ëð›¿óû_ü—ÏîÓ§×¶òƒƒšŒôÔµ4+¥~YHÁg?ñËÚVßD†ýó)±l˜Œx­gŽ“çæ˜ž)Ζ±…®K\ÆõÝm]HÉðH—ÇÃÛï™Ä6MË¢«µŽÆº[º.½ãÒš±®Ã`Ë-„ªePM¶-“ùìŠ`+MIy¸ùC¿ôÏÜsÏlÆà¦p !‘š^1‚Ô+¥¹"œÌrv T].I,ì"q »‰F]„n~M ܆D\d²½Q¹©ƒ;yúø ÷|ý(m[šØwh[º›WD:hxc ”Ãôè$Ù¹9š›45­\ŽÓ…Z(¼»†a°ýÆ=l?°›‰¡QFÏ0=4†i.Yå|¾BCƒèº¢µ¡( ‡`(¸˜èt%¸\W d–Ë´750“Ê+.•€[w M~Œàâ!5éÞ{£#µW5M2wî• më{/Lñõ‡Ekb…ÇPhR-ææ—-E<¥˜Í( ¥ÊGU¥nµô»ð„ƒ.š½47úhn𠬽þQ”J&'NNqòô$ù¢Ãî½]too¥©%zÁP⡾ N¼pl“–汨Ÿ`ÐMÁÛ‚%/w#›™‘IƆ™YQÉë¶iˆ™xBaÜ~oÛÕLK,ÀÛï¸ýŠÇ·æN¿,cpõÎB¹\ŽT:ÍT|†“£ VÄä¤Ô÷ÿîg>1xÅx `Ó¸„”H]çÃï,ó®] ¨¨K MÀsýð—³òå°@Š€G²»Õ 9­1“–H—K§èHò¶FÁÖ(9r]¿ûJàvÜr¤ƒ[Žt0—,pºgš£§Pvèên¢{{ ][š0ÜKä³e{+[¶·2Ø;Îã¼L21J¡»ì£kw÷%c4M£¹»æîvÔw075Ãìø3cÓ”ÓcøcA4—¥*«—-F¬ÂòÕ¸¼B¢uÑÑÓÉôòSùÇú3àÇ_WGj5©x£MMJˆ !øÜkSyNgi‹*ö¶^¼Ô–Â>ØÛóþY¥¨¤ Éá>~òÖÛ[ÝÄ‚:†.Bá’~Í&b˜Ä\&>ÍÂB JöÚòXW¯× «#‘›ÚéIç8ybˆ§ïa|8N6[@Ó$~¿!ѺûïÀëó051_ÙÎ{l𑾤#AäêýËÖ»Bà ú©om¢s÷64Cb—+“O{Úc¸]ím?ÑEοÞïU¬)!fÛx ƒ©ä<öBÊó»v¼ó=ïë}òèC'_WGj5J׎¦‹dç'81îÅ놭õë“@!GÓ]©1™üós:%[«ø¸²J’á‹c'rŒÏY  .¤­É΀!>Í&l˜4¸ËœHñ|Ojá®Éë^Ž ø]twE9r¨›nl%à×™IñÜ3çyáøy&Çç(J¸].¶îheßÁ­”M‹Ùx Û´™™ˆ3t¦Ÿ|6ÇëÁ㻼Ä$GA|´U®† +öuÖ!5íu@"ÇÕnBEtÊ!‘Ê®>ÉÛÞó?ú7Çz¨¶6Xxƒ¨I ,„ºVÌ¥-l]õ¹;^àɱ¾:×À”h,s”"Ÿž¦™á\v'_>B¹\¢Å=GL&ѤR’²Ò0 ÛÑõpn؇-Üìépsh››}]n<Æú_æ;v{Ie2Ô#H)8×›`r6MS½‡Ö&?áЕG*ú|»wÖ³{g=ï»s+cY†“ôžä©ÇNâõyhm‹ÑÔ¥³»•‘¡i@á(HNΚžAóx¨oi¤¹³™Plm±’*¤Ÿ^¢¨ƒc܆†z– \™ èñx(›&- õL&æIåWÌõæbIý1ðÁ7Ô¡CMŠ€möI8)¥$y~cEÀc§æ¸û©)ÔOñÿìè!k¹xv¼•‰bÛ!âµñÉ,[Ý=äLƒz±‰#òI.§fƒ àxÉÙ>’N#POSKÛ·6Ñ[)*÷¾ Ø»£©ÒV¡ÌCO 1<™Æeb^Zš¼´7ûhmòãq¿~š,›“i†Fæ™gr:»X‘T Á/|à0]í1”‚d*Çdð¹On¬ 02SäüDŽ™BŒéf_ÝÛ#óì«›ÀíÌS.fèòM ËŠEàÒºÊ<6±?iÜââ[ûÀ%LüZžz=IÔÇ•:Çô@ÏœLsz6D¦$±lE¶àðj_†‚%iˆzq»·ÖáréŒNçHeM&ãEÎõ§yéT‚ÁÑ ‰d‘RÉAJÇ­]¶– i‚HØÃ–Î÷7³wO#õu~4]#›39qfœÁ‘ hªÑÖa×¶&¶·E˜™äÙ'^%1=G¹lâò¸R‘;»pv…ËÐØÑE¡ÑÙÞúú? å×ò2b7 …"éE+@·ÿÈ;îøê±cÇÞ„e•¯>jÓØ~ã^©Ô)!ó½[À⩞$ß~>ŽZH>:Ò0Ê{;Ï]ò}§fùçž‹­r˜F1IL&аȩ~‘½ä9 Ž—Ç³w0i6RABðC75qÃÖ¥-ËÆ¦sÜ÷ø –]ý‚¯\‚D)\†¤>桱ÎMcÌCC½‡ú¨ç¢@ëÁq“ÓY†FS §gioÑÙ¥³-Bkc˜l®Ä?}ëEæSy@áó@Ø=…a¸0Ü ??|` ŽæâŽ›oº¢ö/„Ë-$šÏçI¥ÓÌÏÏóìÉs˜¶½"Á)ïúÂÿõˆ0áM¸þå_ïá䔎ÚƒB¢€ƒu#¼§íÜ%mþñìAÎ'c‹äRh˜”•Ÿ­r„V9BƒŒ/,"®[é<˜}/³vlÑ WJ±µ-À­{ꈅ+kô¯œKðÔ‰išÂ’h@+*fÓ6ù¢½‚[­¤¶4Q4u±¨›XØE8ä&v »p—g æ Ãóô $éœÃvÀï5(M,ËYü2¾Ø‡ö¦ïç~LtÞqÛwª×¤ú³z·¯n1^%€ÅºÙ,étš¾‘1ÎN® !D]?ø…Ï~ªçªtìMŒšA*¸6»ß¤§Îãé{—Ân¸»îfNÍwQ°½üXÇkòÂý¸¥yœÁL}å ‰X  C)J*ÊQú¸ì"Íb”9B³G__¯ ‹¾anm)õѤC¦d0—wóÂËÓÌ;|.鼉Ô4‚>Üꥳ¡òñÎf¦Ê¼Ò_¢g¸LÙqÕ;¥R̤,fæÍ…Í:A“`Z>¯V!ƒ  @ÇïÑ©ùðû \†@×$ÊQH)ØÞe{w”R¹‹£O Ó?8„¦ gâJ(Ü®…jÈ—»÷Ùeàrª­;[š˜H$Éä‹Ë6Å%,ë/QêÝײöÄõ@@×¢€\²D96þ0ÚØÃ8¾fÆêrOa?ïî§Õ·~.|³?ƒË(U™ü9üz™xÁO¢àÇrXxÎÇ;W;‘¶MãÔ‹)‚$ÑpH«õÍ1ÞÓ=¼n;–#M8—ˆ0”s>âîÏÓQ'¹m‡Á¾Nƒ[vx¸e‡‡BYñÜùŸ,O[+›}nÿüS»pé’l¡ÌÐx†3 Nõ¥ <üäOî#¨,ûÙ ‡rSS)â Ì˵8ñÅ‚û!ªo‚ùl‰ÉDšºèú;/¿^¼žB¢»:Ûx±§8,& ¾ó3¿÷‡¿ø‡ð·Wµƒo2Ô¦ °cßéÈ3©¾­öüõ¯|‰ž'*wïóuÑ­»èÞ³—[¶Ag©4–ã(ÎKúãLábBÛû:GØ hô¥83×È`:Æ Í&n]qnÚ Y‹nÂçÀ–P’_Úwy+–Ò8¯ã•©:ÎÌF1mI{L°§]g{³Fw£†K¼Ð_æ[Ç ¤ ö‚k¡èhôsÇþ&bKëûc)fKŠö^B¬SŠ¡¡Y{ô\% š´­n{ÍI‚RH!*…AEkC„[ÚÙÖÙʶ®ÚšêÞPÐS¥¹õ]j˜p©TZ Îf³¤Òi^îée:™Zí Ìa‰=t×gâo¨CobÔ´p-pÑrUÊdÏœ¡ÿYI˶´umÅ-A%úV‰ê”i¶ûx|êߣIØžÀ£™ì‹M°/6AÁ2xm®9«‰Þ^ÄŠWÇݼ<æf6WÙ”d<ãô\#{c—þ.êÂæ`SœƒMqʶƙDŒ—§yìtŒ£§,‚ÖÔ….ÎŒ™‹06[âžG‡©ºén ÒÞॣ9H›[)œ‹Lβi£l›ÎÖP¥fP,™äŠåùʽUHÁ–Žàb°íØœäµóç)–lʦCc]Œ›ngk{ mu4Ä"Wt§z=…D÷tw0›J¯NŽ ?þã4_S¨I ¸eÿn¡‰Øx àŸþï—~íèúÀâOµâ±›÷lÃíZ›àóJø?Q”Av…Æxgã™5ú­$g“ÍÌÛõܲ͠9d12oðꘛãJ–Í/l™Vz͹/é²›ç'›yb¤¼©/Y°¾H¸èb)ã‚{<üI&ÆÇÈLtb×b˜Äâ”[h¯T¶ÉæM”’x¼.Â!mM lii¢1¡»½‰ ÿÒN®´hOß½ãÓ«­%5ñCø›¿ñø^îš@MƸ£ÍuBð+ÿý“ÝжN¿öóSW¶µ\6_$ôa,³J–bd|YN1W r.סkÔyÒ‹,,…¢Ñ›¡Ã7Åpï ^>9@sÌÇ-Û Þ±-Ï–P†žd™²F½7sYì-¤F_º…Gú›è™‘,(;&:R îÜUæïγ£ÉF ™Ík8,„./ c¶™Ççs‹.Cq•Ê4…×¥!/bLMŽb–òø½%Ó!•)ãuk‹–Àòû®&Ž×£áØ63³FÆg978ÆK=½|ë¡g&—Ï`Ù^wq‹µ5ã¿H˜ðŠaÇÁëv1ŸÅ\YÆLo?òÓïÿÊó>øæÞwýu 6-€î»„ä,l¼p÷?üý/=¸dšfàØv%¡d À²ærb?m aÜ.“³I ¹è‹w] ñqÇ-»Ø¹½uÝ 4=“bh<ÍÎ]{Ù¾£R—жlFâ˜å õþ"ÚE„ê@¬ —7ƒOŒàš}‰A41îlaJub+É»wøÙƒy4 ESð∋Çιš«j¬°š|¾±™XÌSQÎ騔 &¶í`™¦iS2mòy“L¡ÌXß R‰1LÛÆ±ª‹Š%ôUòVŒbUÑ·rÙf.Y$›·EsÌKSÔS ìAðûhoifkGí­Ô×Å*u VÅT­Ë²(•Jkbú‡G9Ñ;´Ú @Jñ¹?úÏþÁ•~Þì¨MØzãN!Ô9Øxø—úKz_x`‘¢±:±PÙq7—É2ŸLbÙö · ™-O€JõÛ€×EØëBJ±8‘ Mcï¶vŒ…̺@ÈKWW±ºÀšÂ!ùB™¡Ñ9BÑföî߇®W¬‹R±ÀøÈ `²ÞNãîP;P¥¾à±g1'O,Æ”ðrNfHí¦-bógh‹,Ý䆿t?ïæùae›d€‚ÖÖ ûöÔ­°.„ÑÞÓœ?ñ¶íTHÂr0M Ót°¿Gè+ǽŒt«(ä-¦Ãnš¢n¥PŽZuGwƒtµ·ÒÕÞÆöî.ÂÁຂàòºUWà±ç_%S("W’@Vi®ÝòÛŸ¿ä`kµì|6Þ8×ó*Ã}'™M¢²Ë­Bár»Ñ ÏK(ÅBañ}—ŽÏí¢P21m‡BÙ"/#xª;+ÅÌ|)%‘ Cj¤’y&'æÉ¤ó†ŽÛ£ÃÐh¨ òÃØð“SSø¼|þÑú¢uÍ=@<‘e&Y$SÒɘ>|þ0>o%PhKG”™RÒüDe»0,š¡AL2`mçÙ‘ESгÐ%D¼ÛMîÜU¢> È–%Ù’†¦ ¤äre†RÄgóhš p]Ð䄣蚆c›ØV—KÃãÖñù\ün4]'[t(+¸Ú²jÇË—{uCðêØ–ÂïÕ—½¦j‰U(£X*195ÙÞ>žzþENöœ#1?‚P0°X‡pùŠ )ÃRÀøLbEÿ¸„²[ž=öý}}ߤ7'jÒm=¸ᜇ·¾}ÏßòÌ#ÿÌH¼²Á„Ç¥Óñò¸qû¼øý~ÜžJ‰î|.ÇÄØÄÒK­`&•'_Ê pa%fñ á€úH€†HÀBš­‚¶ŽõMáukg˜¦¦éhšÀmÇí»ôºú‰óI¦N=ƒ¦–ÊcÍim¼¬ÿ$Ž‚€ÛáGwç8Ò^`u½ÎÑy—GÝœœ0˜Li(–Ü·K§½=HG[ˆXôÂiÂùlŠøØ0³£¤“ œUÛ‘Û–C±XF)—.𸴅oê” 6õAJ9Ëüx-€j=Àjì¿RŽSyL“’í[:Ù»k»¶nÁqœEW Z=èØ ¯2—ÎV“„–\¡îüâÿø­Ç.y‘k›p <ðo_çµÇïáÜx’²¹dû=-±.M®Ñ–@e‚@¾lŸÏcÙ•/»¦IZ£EÕ¼z“«ÞÉܺA8è#ôùñû\ìØÕJ4záÊÀé¬I¤i'ÑèÅ·ÙèÍpî¥çqÛK+ gC?Í{ºhðdÉšnÆò D"nhÕÖ%ŸÙ¬ÆDÆ×ëa*cÏTJ£Ï9¶– ­­A¢‘ “m[¤fgHL37=Af~nÅ]Ù²r¹…¢…&+B©i)b£â8K¥°]‚åÄ –½Î©¼Æ®<çõ¸¹qïnï»C×Èçód²Y†ÆÆyza¿ƒUzÀé|KÝ¡·ÊžµéÄêb ? ïô?Éôði|.ƒù|yñËiZóÙ ðº´K–¶24 ·’³_4m”R”L‹ ×`=¶m‡l¡Äì|–±é$ƒ£3¼tb‰ø<·A4XÓäl"Å—þô› c¸ êc,¹ »ñúý Ïà–³»µ5È–p —fSïI ÎD"G¢à&êw¯hÓçR4Mê<êƒ|ÉZ¼‹+ _2ÉL܆¾(æ]ð¹ |.ƒ’iS¶l Mõ è¹ ƒÆ¦zêêhl¬£±©Žú†Á t*‡£É,§zÆ8yv Ûr¨‹ù—ÀNŸ£o0N<>ÇË/Ÿæ©§_"›Í ú …kú¨oªãɧ^Â0t\Dk¿^­ŒWÍ1“L3›w ºÖP–KW\&^‘'-“+ :\ìk—ܼU5JLN¦8}>Å|ÆB×£¯Ñ —›P´ž¦Žnºv ±µ¯/P ÉWe¢Í´uïdëžiéì& #-β•‚Åù¿ð×â BÕB¨>¶œ –™ E±T¢§²e±½«x"¹žàF{îØ£ß¾àŪÔ¤Þ¾o›R²6^xîØ¿ñòSßææ;ÞÀ|b–/?O6“c.S$™-bÚK“ÎÐ$-±@E¸Z¦ÀrÅy¹5ºôX(¤«»}MÎö PÈVܱ–¢÷Vê‹&1«&òÇë8°û÷íbû¶N¤&éí¦ÿÜ+Ü|piÄñ©y|(¯4ʱñˆ,R8(%H¨6¶µÇÐ/QOàlÜÃgäË:íuдDÀk(ž<¯89Zç‚7ш—pÄM8ìÅç½p¤z9‘æÝÛ= Ñ;0ÌàØ©TzÙ² áo™PÕœêßË´{Yý{!¨¡.Æ Û»9~²gA\¡8šäÖ?¹ë·_¼èàßä¨Í\)Ô5ÊFJ\&ã8•庺zn{Ç<ýØ#ÔKA}ÈC®d‘.”ÉÊ”-‡‘™ Ñ€‹†Ð•íÇ—NgÈesø+…>M_{§•R®Ùxór'xäèÓ<|ôi M§¥µ‘úº(™ÔÝõÄg3<~¼—|Añ›Ÿý0ÀÒ:¿RŠÉx³˜¦^cltžhCaß…¿J»‹ì¨/r|ÄÏãýAúg*çÑD}ŸJ– P0ÉçËŒWˆÊ04‚a7ုOÇíÖAA©lÑh8¸Ý.¶woakW'–eŸM00› èó"(GáV@ ¤£øðö×õ!¼IP›.@}s‡_…w¦F{é=õºn‰Ujt]GJ™ø 0t‰ßc xûݸ Ór°lëÊ86ΆW”Ývl‡ô2Àãñðã?õc -ÜX @Ó%.CÃåÖñxt|^~¯ ÕÄU‰Ž›Oe˜œœa6™áéçû9qz”d*O.›çù_£±!Fss}å¼B øˆD¢LÏ•ÁÊa—æ±(Þ‹l&tFLnl+.éÌ „T–ýÿÿöÎ;¼­úÞÿ¯s$y[ž‰W¼G¦³HB²€+”–ÙB[Ú_{o´½´”ÒÒ–{{ÛKi e•Q ¡PBX²éìx¯ØŽ÷e­s~K–ä¥e["z=ž8òÑ9Ç’Îû|öW@% ¨D¥ 8.ZòÂrS"ˆ S¡×©ªí¤îBº¹xQG~r89Éý+áa¤$M`j~.3§L&>.ž=f³Å.[ã°úʲͭ‘imï$9>aà„0!ã²e+÷Üõ©{µâ~D€ @RÜX €d1ÓÒXCuù9â P¾t‚ PSU1`{QÓ¨‰ ר ~l£RJHh(’ÙìPè"I“‘ØØþ »!¡!´4·õ­sÑÚh¦Ï˜NxD85Õ5û UF\\ÑQ¡DF„®!ھΎ¾3úî>iiÉ$Nˆ·¿¹¹•êªzd`„ ¬^·Y–ùðý¸ØØ„ @¬6œ°p×–khìBo0¨]pN¥9×3ÄÆjY¼h6Ë®˜KrR¢Wï©Á,òQYgšÂí9P‰‰ÚcBˆ A£èè1qä|K¦Ä²lzœRèÓç¿K²Œ¹Ï‡·˜-6Þb±Øž7›Í4µ´r®¼’óUèõ=vñ€þâ!‹dÆbVÒµSÒ“‘Í&ºŒÚzÍûaí“=ü¡WoÆ8˜1€q 2*–Y—¯ÖÒÓÕJÌ„óˆ!—¶Ù! IDATñ”œªÎÁ]ûi‹òc¸¼ èn5ßÚ~-ö®€ds”GßÏ3¦¾çL&3åÕ5œ8W‚®[‡Ù"1yÒds¿ÅTÙ®‡´ 4—NWoÞ|kÀÍ È `x|BŒ,ˆÿ Þ;::xíµ×øè£8p൵µ "## smÝ;{"¢cIŸ<ŸœÂe$eÏ¥³SGsc=ºŽ6BÔ"bµ„…jhjï²½F"C5Ìf,’ŒÙ"Ñc0£7š$ ½ø¸¥z.<Œ‹[Ñéz !qB"¢(ÒÕÙIOO7Ýݽ\¼ØABB aa!$Nˆ£·×DG‡Î¥»¾‹,a‘•4™ZpïkÒÙ¥ãô™ v|VÄþ'hné@–ebã¢Q#°*A&'®‡nsÆP%+ r̨D• ÒÂH³›[8X)öÀ¿×íïµÈØM?ê{ALt™©©têzèìîf‚6Ù®ÀªMop}ÛÎGOŸ>p@` @ÜDŸ À–-[¨®®”;I[[eeeqöìY:;;Q«ÕhµZ·‡UjBBIÉšÂä¹+˜¼p-¢6…‹­44^¤«ÛÑïúDÀh¶ØJ%YFo4Ó£7`2ôF£¦««ƒÑÄÅú&&'I[[ ]HttöÐÑÑE\\ jµŠø8-²¬¤]E’e,²„€ŒZôÜSìêÒq®¤ŠÏ÷eë{»)>YÂ…úfººt¨Õ*BÃB¬.Q€´(=õ=‘˜dµíâE¡/K üœFj\¨í½sx/qîp|ôÿe«Â6O%V–4£Ñ€(Y¥þ›{›Þˆ³¼ä¦&ýò³Ï>jýx¿% c‚cCþ®©©‰¦¦&öíÛGxx8999äåå‘““CxøÈC0ìQ©ÔäN™Cî”9Êq/TræøNÛKmå9¬+þLÐFЮ3ЩïoÖMT\h¦§ÇHFf²íy‹$±óÓ]¬¹z5m-Íäåç}±ƒ–æJÎW“‘•LtT™Ituëho¿òu³ÙÌÙ³•œ9[ám %:&Y®ƒY$}Æ2f.'~RöS’•XÀ€•Ç  c, (¨s@P%ª”€¡JìÛND’Uˆ¢òûYS§pöÔI,v½²lø¤ ˆÎƒb<&55•sçF^êK¯×sêÔ)N:… Lš4‰¼¼J J÷`[Þ¶p†Ù"ÑÔÑ…¥ÜâðÕ³XÌس Q­6†ì¼¦Lï7kªë¨®*'1AKnNGŽœ·E° &&œØ˜0ºuF.6÷‹CÿœB%ö Õ†¢ ¡½Ã@W·Ñë·?3#…uë–Ñ«7ÐÞÞESKU•u4÷t`¶X(+ú€Òƒï•LÖ¬+Éšµ”¨øT[,`°%Õ2 ¨$ ˆvb ªTˆ}AQEQT¡edQTj5*§Y’m‹X.\HEL >I+Á÷À{ ##ƒºº::IÅ Ggg'•••9r„ââbZ[[­V;d îP„††“–™Ïì…+XºúF2²§‰±»¾G™=ˆÒt¤R‰ÃF%I¦GoÄl˜1{±±±ûŽ‰Ñ’6)ŠŠ*"ÂCèÕéé[S« %>6AµJ ½Ó®éE0ËBD¥¹Éd”Hž…6:”m˜Rï`ìoˆr—öŽnNœ8‡Ñl&=-‰Óó™5s2—]VHZZ*•ŠŽŽnzº:h,?ɹ}ïÑPz $31‰)¤%D3ÁiIôá\4Ùá'‡ÔˆÝ› `­”e™æÆFL¦þá)-ºÍAt$Æ>vú³Ï.ª^0+Mc‘kÁwY€žžÊÊÊ(--¥¼¼ƒaøU}‡BÒÒÒÈÏÏ'??ŸÄDÏ‹edY¦ªì ï½ó îÁ`0ªQ1h3‚Àüs™2uò€‹A–e@sC%²,sæL%±ñÑXÌÝ:==}ëÈ@k[/²€‡=&“³g«˜:5 •JdBb qQ4µµ# ’]_½’ˆ, X$HžAb|8u 4·*7K•FÂbô@\¨ÊL”•™†)P0pâ³µÂZ qº˜ Œ‚(ú¥Ø£V«ÉÎÎ&;;›+V8«ªª,†1íííQTTäU 1$4”Yó¯`Öü+e™ò’ÓÞ˱C{hl¨àëMªë:”¥Í¢B S¡Ñ¨Ÿ¼½›cÅåÌ™ƒ(ˆÄ'hiiëB–dQY¯A•A¨«ï$*2µJ 3-†˜èPªêº0£ ‘0Ý»~\-˶oVfy9ÉNÅA*Ù®HT!‰2No‹R6òÒWHDì‰z½žÊÊJ›u Ó¹^£oH|ÿý÷IJJ²¥Ý $ ‚@nÁtr ¦³ñK÷q±¡Žã‡öpìÐ^JΞpÈtMZÚz¤õ½+®¤pZ¦]QDDÅ_d”Ý`”,”Uµ“—‹( ÄjÈŒÐPVÓ‰Á¤G &ƒàra‘«m®K†­¢JF%‹"eƒõÚ€<騼9DÙrÆ7è |HŒŒŒ$;;›üü|rss ùEƒ ëîäÄÑ+Úˉ£”#C·kÔ*dYÉ÷[·Y´h.“ ²Ñë{©©màôéRš[Ú U“•CX¨âÆÈ’ÌÙŠVŒ¥†Àd¤þiIÖã9/»òjþë៻ü7 4hîZkv~ò ¶}­T>#û `H”:êåÿþoוÜOH @EsñÎFvìØÁùóçÑjµ¶H|JJŠÛÝžàHìèè ¼¼œÊÊJ·‰:ÎHT«Õ¤§§“••EAA .ï'2JËåKWsùÒÕ˜Í&Î:ÎÑ¢=-ÚCKÓÀæ)“É2 7 ¬¬šÜÜ RS“HMMbá‚™œ/©d×®Cœ)k!16œø¸0"Â4¤'k9WÙŒZ#£ “1„?^w?›Aã‚8 (‹ýñUŸ+àŠÐÛÓ7Ó€<éè‚y‰‚ÅÔÞ[Û¶mãøñûˆŒŒtèþó&-ç)Ö@bii)çÎs»_Áû@bff¦Ûý Vš/p´h/Çíå̉c˜-vsSy‚@ZêDòó²ÈÍË$F…Ñhfû;9{¶¢ïØîì*µò0̦þ}9[‹V^ËO~ú°[çîlH%ÂS„f³³ÅÌÇ|à`*¿à0µ%zóŸÿp+¦L™’ ˜BšÁ{xòÉ'é²Ëñ†(Šddd››K^^ž[wS_âM Ñžððp²²²lÖAd¤k€Îèº;9uü0GŠörøÀnô=Ý`߯€ ¡a¡$&Äa‘,ÔÕ]¤ïi‡:•ZF­Qvb±X]‚°dÕµ<ôc÷ÀaÅàA*ÍNb`­üðýíttô @Q™2~Ízñ‹‚€Ñ¡Ýòüï†ÿ"ù!ét«d|tCŽQ$I²ívìØA\\yyy¥å¼a°@¢Uz{]¯AÑëõœ9s†3gÎØ‰Ö¬BrròÈ;è#2JËÂ%+X¸d&“‰s§säàíÛEsÓÅÛ÷ö¨­mm°¢R« ¥× C­‘Q©@ “1Àlq¼WEº¹ÞômƒDéÚ§íç(–ÒÀ4`ßO€€DGêòf'“Q'k„VðÞhlläõ×_w«¤×ž[>//Ï㻩7øc ±¶º‚#÷räànÎ9©ŒÝ†a+çÏ›Îê«ÓÞÞÅž}‡8WRb “ŒÁöÿµ×ÞÀ·¿÷Gçæ´u šÍ ïm{—ŽövÛë”Ô²C0¢Wóê«Oz¼€âk[ï¤ååån¥åœIII±‰AJJŠ×çæ Ö@bII •••˜Íž·óòò˜ƒ¶ ;™þö.Á¶­[ioo³½~ÿùJÀ±H£¶Än~晎!ꧤÄfÍŽ•TRŒNÐß|moð·@¢ÁÐËÉc‡9t`‡ö玲­ÅÁ*ÐFGqóMkHNê³´wt²ýƒ]ÔÔ]@eÌ&¸rÕF¾ý=ÏF *s­?oyçßÀ¾³8 @Hˆ€±".g^ŒE0µÃè×xãkÛ#‚Ǿ¶/ijj¢´´”ÊÊJŸˆ[^^ùùùMP–$‰Ê²ØÍž];¨©ª”ŽÅU+.cîÜ©K­_ljå­;©o¸ÈÚk=·À1 (I}+1Jü·ß¢ÝNöœ)Ç*ÖL€(„ÇýûÅ?´}Dÿ$  >ï2­YÖwÀØù£¯í ===TUUù¸5Ö_ hÿnØÃÉãG˜ÇK柗‰Ø×Åh¶H¼ûÞNÒ² ùæwèÑq¬8Ï ª[ðí·Þ¢½­ßØ}º g @6«â·ýã/mCÍ? €ø›¯í ²,S[[Kii)^‰[LL 999deey,n];LѾݜ‹À |íÕWàÓâó ÷— ‚€Yc ÀX‘š:/¢;ܤƒÀgüÉ×ö{q+))¡¹¹Ùã}ùjœº;Ø»ý}¯¼ü²C!Ð'ÇÏ €P!dÂÖמñü'óÚ™´(\ªëh/9æUÛ®$I>SÙ>`—|ù¥—,€ÇÎÚ €"jIœ¸}ó M£rb£È%/Ÿ~ú)ûöísxN­V“‘‘aóµÇãn _,_Û›qêÎØSŸ4i’Oç6 üû‹/:ÀÇGÏ ¬ À˜‘•¦Uiõà½<õÔS­žƒ1qâDÛÅ“šš:&ƒBœù¢øÚÐ_Peµjkk=ÞWDD™™™äååQPPàõÜ瀠$I¼ð Y€Žœ@°«P™å¤ß~y` ¤Ÿ˜—ª•#zÁ{xþùçÝ ÄEDDØš}rrrÆ%ðè¾¶3ííí6·§ªªÊë•—¦M›Æ´iÓ=DÛ«2€÷PZZÊ›o¾éQž^¥R‘‘‘a³œWæ+ÍדÉDEE…M øì³Ï:ÀûE'q•YJÞ±%(cüym»²`»/Àû ÈÝ‘Ýöør!POñg_Ût:m ÷ŠŠŠã ÷ÜsW3¬ðÌ3Ï8”o?xè+²Š€:$å³Í/z^Ô1N¦\y¥Z[Ójß €=¾êþó— ¾žžÛT^^î“@¢'K—ùI’¨®®¦¬¬Œ’’Z[«pSSS¹ë®»¼únX­€§Ÿ~ÚAÞ;P 8 €,ªR?ë•z6N¦p‹J›{Î £+ÎØwÿyãkûC+°$IÔÕÕÙ,w–.sƉmmm67!!! øä}•$‰¿>ý´C`Û~¥Í~Ì8*uPÆŽñ{|åkÛWðWà § UWW{‰O×ǗȲÌ_ÿúW‡À»ûŽv•€Èi{¶üóÂx§§¨ jsgZ`üÀ_ ±¼¹³Ô—/ñ•¸Y]O–.ó'þüç?;¸[÷Aƒ0†ÚÜ™ø‡8ã+W!""¶RÑx¹ ¾7û¿g¼[ñgزç`/2ò¤}ïn®¯sôÿºrÜ@›;Sÿ{FÃU¯fP"ñååå”––º½t™=¢(’šš:®DWq€wv Œ%"öŒ†«0žÍ>Ö)HÖU޽ $Z]Ÿ±\lÅœËÅÿ½«ì¦ ‚€,Ié¶¿åyžuœŒ+gÜ ûËcd|5SÐrôà»qêþHt€·wÝ0AÌšŒ¢ÿY3ާé, ¸"{ÉÀ ` þ·&šÙlv(õ´ØÞ´vwU`_b§nµ<-¨ò‡ gx볃@¶X2Š>|'(cE_@tU¶Úý?Ȧ³€¸Ñ:I/°oö¦‚ÏŒú8ugø×§ú\»™€fuæá7WúÉø˜KRœIF± &y€ÿxŸ ¾ ¼ùÃ\èw}*++½ú{¬QëÊK£eíüéOr˜òüæ'ûíbôYš Œ%ÚÜ™f@å °'E¬îÂøÄÚ‡Æ~üøÙ³g=vü¡œÀ`0ØÄÍ_×et€Í;ö I­Ê:úÞ[U>;èÈ`Ô¾{`ŠÌèûÙŸÞ0Y–mbPZZêÕ\€¤¤$òòò˜5kÖ¸µ5˲L}}½-ØØèysÝâÅ‹¹òÊ+}r^ÎðÆÇ{² kÔ)þ sÏzvÝ<@Mßc;@´ÃGûF@222ÈÈÈ`åÊ•´µµ9”óº…oll¤±±‘°iÓ&233GñÌGRSSIMMeùòåtuu9tÿ™L&—÷µwï^fÏž=*b6XK²,Iþtop™@€1§ (ê{ˆ@ý±(r‹‹cáÂ…,\¸ÐfZ—””PVV†^¯wif³™Ý»w‹8ÍìÙ³™={6f³™êêj›µc_˜3ÝÝÝ>ç ^V–3¶C@’,AcFÝ (ï{$à_iÆÐÐP¦NÊÔ©SÝ!æiPn4Q«Õää䓓Ú5khnn¶‰AmmíkG«Õú4`ÏàCIòú÷ï©7Œ«8Ó‚Rk°ÿK3 ‚@zz:ééé¬X±bÄοÂÂÂq:S×ILL$11‘Ë/¿œÞÞ^[ ±¹¹­VËŠ+F­šP¹þ¬IH À(`Îõ=ÞB±¬DH3ÆÆÆ²`Á,X`s¬vòóó™1cÆ8Ÿ¡{„……ÙŽ\€A h’`gßÃßÒŒö®B×è;Zc‹`â£8Ú÷°¦­bM ÞG.-`lqŽÃ"öiÆ(`*þ“f 28ý `ýäÕO À‘nü;Íx©2r0{d䀕].Í8û¥KƒX‘e{‘ý²ÝÜW„ÑudC#Uÿz›šŸpñäy:+k1ÌȨ ›0‘ˆ”tâ g2aÖl’—¯$iòè䜭ا5@þ“f¼Ôp€¾ç‚À˜3* ë9ùð9ô§7èî¼ôÔØÑBgé>ÿ3}Ï…LšFæ†È¿uÙËg"Žâ×Á„§¿è €€¼öÀŸÓ{üŸlYûU{Ü~­±ö4%9MÉ_~&m6Ó¾ù…”™Ý%ûIDATß¼“¸øÑŸÎcŸf òQÄ`:3êG¿ô°Ådûç³ P]|ìÙó¿¼¼à+]üΘêŽqü¿îçÕä4>øþïik»ÒZpø'ð3à ` J,!àÓ&~‚,+"àð4A[Ÿ}ŸÍ[xcÕè5y6¾{(dS çÿ}þ‘šÇç|Ë_Ö4ãÇÀ€Ÿ/×Zƒ‚À`•€ò€‡ÿëŸp…ÝÐd3{VÞCW¯g9]Aê­áØÜÀ óo£®ÖóÞÒR€ô ðcQøE$‚¸Ž$IŠ€ŒdÀt.ù€nçŸnyC ?ò:ÿÎÛÃÂî`Á crÌ¡pN3Æ£M¦¡Ä‚ Î`…@J €OÞùÃw¿î‹Ý¸Œd¨eÿ3èøï÷Xõ½Uczìáheð4ãLq¸”Ìd› 0¦(õ^ai{ŸãÕnÎÔ’7~“Y÷ÜFÒÌ<4 }]M÷RµåMÊ>:„EáÄdg¾¿ƒþC®ýéjÏÿ€Q"˜f«‚ ü˜!€¯/èz÷q·’ ‚ZË‚7öqÙFǶӈ”4æ_Á”~„©ºˆcþ”ƒÏŒ4¾Ëÿk ïGdÝwxtþc…}š1(àÒN3ʲÜáÓ·"Ü<–¹î Gÿ=§_~›®N×\‰ð¼¹¤_u×\OÞúÅhF³{‰ÁÓŒ“BÀ3i?”‘€Ž_¿€¼ú¹„]Ùâ†ÿ?u7‡`ææŸ¸¥ë üžÏZħ^wùâЗáüÓOðñõWð·„\ÞàgT›¥í¬iÆ-À¯€_ÿê{Î·ÅØ¾aÐR`å‡` `ñê]T®¯9~™÷‹N†d>ÀœÌ‘Íîú‡¾†y¤:@6Ö±se>=ö*³ë+ †¥½‚’¿ü’­—eòÊʯpöãÓ^íÏ]¬iƧ€gP,×%zŒ±ë°Š€ëkù,^!¨]_ S“ëºX GácsGÜÆÒ±‡=ÇFXãOÒñùòyï¬óÉyÙÓöé«|´z:/.º•ò#®»I¾"ÒŒ2Ü ÀàÝ%„¦¢víÏ£}3€+ꚺ´]Ùÿ{oØß×üh9Ç÷{¾p¦+tíß̶“ØòÀïèì½F©‘*Íè}Ó¶ëØ›ø²ó…OÐ'¼mIц¸´¥lôÎĶ¢Š¿†„ȑŤçðO1 á˜Þ`ëÿñÉùŒˆd¢ê/òʤœÜY;6Çû4ãO¿4ã€" 1<¶¯ X|ð™gÆ»6xÛÒÔëí¡lLMŠqÙPÇ‘ªÁ{JïüþȽ>ÆÒvŒOWæòÁ#¯ùLƒ¡°¦·£Á/£„ëÕbá÷ÇÒä4 ×$] O¶¸ñtçˆÛ¸Jâ´(yeÛê-5\öÝéÏIúóìüä‚GÇ#’I]±”ø¼I¨CÀØÒHûéS4:É• ¢däü/nǸlV¦ ¾¹ “‹F5öׂýÊÍ£f”Á*‚€ Ë äõ¸ ×’sç\xòÔˆÛé÷W‹¼<šBha,¼[5âvÿ8Nг÷AŒ÷Ü!$…ÙO<É‚6:HÌC6¶raëœ~ö9J><<¢ua1 }|SÃs<3å÷¤]}-Ù6½~-Ú1˜‰8à<èïfÜ‚÷+7ÚÜwáÛDÀÛ“'.i lÆÏQ¹Pcºð¦·‡²¡NqÍí0Õ|8๖'ÜóýUQ³¸æôY®øÎMƒ^üBH4ds´Ñ¡Ä¼ÅV@0 ÐLûÝ’‘7’Íì?Úä“ãÉ=® ‰¤?; àVÙêú½K»á%fÍñ¬€)tÊjV¼š›ž{ˆÈßÿè-?ÂÙÿ{”í«ðŒ6ßz?Ç_ÞJg먇í|Šý…oMšŒY ÈàÙ^ÿ”K_òÚï Ÿ›wSµ‹CAe ½Ý”bÙÔ@·‹ÍKsŸÚàî© õÞÇùʉ·HK9sá.’®žšÍc××Ù\…}¿ûK[|~,oj*°S6 èŒ1>!4‹µ_›<âvú¢ïÐÐå}ϾáÈÈYÛ¶f»ƒë³{UÚENòMõbHÁuÜpî 3Fq2`Ÿ«pèÁûy=?‘ç®aÿ^¡Ãg$ H(,>#ù7Ï®Þ -:>úîG^«¦Äõ wûtšlq½ö-$ç[nÓHˆQÓXsø8Óç¹^>í ]G?¢è?ïàåÄd¶ÞûêΜ6ª”À`©¢/gÃOGžË×þ÷[8SáEM€¹Sõ®¯ n¹]O§…/Ësç¬\B™ÄŠ=G˜œîËÂds•/<Î[S'òö]ÓtÑwYnÇ0¸-ÌŒ1>^xâOß%kÄñ]zv.½“n£gýñ]îÜò,1dˆâ›Aëö¹¹‚šÎÔiã°±d¢ö¥Çx##=ñÞ ó5A `|ðé».¨X³ó¨G¨b3սëD¯Ùýßúê[.o«ŠYîx~¡“†Ìå;#Æù¦yÉß uy` ÿ¸ågè‡)H â:,>'tò}Üô?GÜN·ë÷¼²ä^šZ\O_évüˆ}ÇGhóµC“u­Ó3©1.ºÿ¿8’þç™}ÏFb&¸VeOË›¿äÕ%÷Óã£&-ŸÌŒ5¾[Ôž‰ßýWÝ=cÄíô_äÌìýË»˜Fèé=þ*o®ÿ_·Î#æ¾™žËMv-gªËfYψZwKŸ‹;;ùʾí,yèëLta`Š}Ñsüóê_ŒI'^ ›ø#À0zŸÊ´ç±øæ‘×î“t¥~`ϦÍⓇ~GÕîãí*õåÇ(~ø^š'n.>:óºŒÏ%Þ:ð¹Á0›µ}‚ &îòuÌ}ü¯lªhá–·ž$-3Ú¥—ê>y”­<1Ê'øÅ&€`Å_eÞëÇXrû,—677žàÔodËÒÙ<Æ3 x&:Œgsç°ó±ÝÙ¥™ø% 1c¾²Ö¥×ëïwëx~ƒ &yã·ÙXR¼5“\zIõƒWÓ:ŽKl]€/b8s_=ÊÕoT–~rÙŒ¡µC·çå­ézlÐçC2LTèÈU‹æú¿úMß¾'š$mÙëRÌC6ÔñÑÿœƒ³úbÈàòW<ÈÄ“ÑÍy¾Åïýx§y‹:i«oÌü—ªh®X’2â>¤Þ*Ž×¸¹è©Ÿ!„¦³âÑÙ.mÛúŽê¹cþˆuS€ï£L޹XŒ{‹ZƬû·ÕcáËܳÜE gñŽ¿2L*2ýÿ¾âÒ®N?:FcÃF‘è›nui;sóÛ>)ÓöuÐðwBP†BÜüeùªëP¦ÇŒôé©´S¹ìï;¹ëó×(Xžïû“¦?{YÓ‡/´ ›þ+r'ŽP°tüãkŸ+£æ»¼íÙFÿÏ|ø#+>(NVÿ2~ú`0Üå½dk?;ÏŸ¾ÆŒK\(2‚&žù¯cå=#§Adéß®q+I_Ê{ pߨâzÙu{ÙØ¸<_4o pÀÇE$0¸E ~\?ì½ò6V¼µ›û«qÕ?!cAžGîAüš¯qÙJÝ>0ï?ÑþNAÚÈ5ù o ÁÕ‚ÆýÁãGˆT+ÿåòþ$7вÜÅ¥@€fv&àh¢Šé}«QÖµ;‹2cî4ŽSgÕi3™öƒ™LûÁ¯07–P»c5;÷Ò|ü8-'Ï¢×9^€‚&íô¹Lºj5ùwÞGúÌd÷OPаü½‡)™ýа_N©·šmWÿ‚{vÿŠQ^úÏm.ÜsûV²m~`Öµk‰I ³ý^65qàöw\ÞŸ76AÚ/, 7õ[|õö[X4.q±î„ö\'%p¸eàd9Šœì—çP'å“u{>Y·Ãöœ¹³}S’ ¢ ‹&"%Ñ'cØÌ±îîØþÂÙa·ëÙûkÞzp7ÿîïêc¤žjþõ5ÿzŽ]‚š˜Â$NËE£2вk;M5Ý.ï+.tW;þ¢° ÀvY&ëã]{"?Þ¥ÌÏ‹ŽŒàŽ[oä¦k×R8u ¡¡¾¿+hP&ÌNF ¶ ˆÁIà ·Tkã‰ÖŽÎ0ܧw’ûQ.eµÃ_(õOld[Ô®ý™÷S‚F ÙLGñ>:Š÷¹ÿZ1ŒÙ“\«5Ôél  £¬ø‡j1<¸ eúso—®‡?¿ð WÝ|§/àšÛïåõw¶ÑpÑ7óü#Å2¸ø-ž¥=EÐLdÍÁ7ˆ ¹û¯üç×±ùÞßÑëåB¢þHä$&Ìw³ /%Öh-=Ð ¼¼”8yr´ÉvŒt#°힃‡Ùsð0q±1Üyël¼f …S P«}ÿ§[ÓŒÖX~=p ÅB(Á7ÓhQ§\ÍÍ»~ÏK‹¾‹q„‹»á…ùûÎ÷Yö·§™ºrR™ã€–ɪÝ9Þ§°¬àLó¹s]eÇ_ï,;±©³ìDœ€<_‡ÚÚ;øã3/på _"aÊ<®½ý«¼õÞ´´Þ¸)kšñ[À¯p-Íè áó¿Í—·ýÊ¥yÆòOùøª^]õeNoÝ;¡lå•þSa¨N^ÈU{“a< âm ƒÔQvâ0ÊÅÿHLAaŽl6 °Xhv<ÄHMNâžÛnfÚ•äå }¯‹Ö4ãK %np¨ÅûΦ¨5ñåÃxãêÒm¹9¦uÇ?رã|ŸCæúkH_¹œ‰³f›3‰0­"QÆæ tž?EÃÞÏ©Üò6•»O1i{9Yãäo‹Â’&?k>×obÆW7®ñ“{˜˜‹äI{ƒvÒôx!L¼J–… (q<w]EÖ­XÆ›ndÉ‚¹h£GÿËÞ…@<Õ÷¯7“ï²ué&.4x^'¨Õ`± šbL¿šÖ¦ú:Síó×t×–@Ï:pœYû¨Øº•òH·nø¹úbh*…¿yš¥ÿ±Þë/íã(‚ì*¿þõ¯m?K’Ì/¾1p#E¥Å׆é'ò9vtÖžjí(=±¹³¬øÎÎ²É ²,,•á·ÀyI’xoÇgÜvÿwHŸs3–¯ãO¿@Yeõ¨5…D Q\„_¡¸ «ðlQ˼õl,?Á‚[çx|>²Ù<ê 0ª¨426}导ËÝí¹îÙG™8ôt Épãÿ¹WoxØa\zï¸äÀ‘Í–®òã»»J?ÔYV<‘ËAþ%p„>«¼¦®žŸ?ñæ®Ú@”¹ÜýòÙžtë\ŸîëÖ4ãuÀOŸ£ô.ÌÀuM Ïáò×pË«¿&1ÁÿýcAKæWæÖêSÌZ1üðÓ¶wãëþ 7×HõW…088ð‘:KŠt–øYgYñ< –DAo•ž,‰·ßûëﺟ´Y‹Y¸n#{ùŸÔÔÕÚÓ>Íøë`9àÊÜßäÛÌmu¥,ûáí„ûp‰¯ÑB Ïfé‡ÅL)þ¯ëÞñk6wë•y™MP†Àê*t•ÿzgÙäINYà\i9?øÅãÌX¾Ž¤é ø?y„ý‡¢ïùõ!(ÖÁMÀ£ôw3NfèRMcÖï^垆“,{ð.bbü»dVPÇsågÏ2BF£é©^}Ç¥BP\b³¥£ìÄáÎÒâG:ËŠç[$)¸ „Í(1< F/½ñ6k7ÝMòŒË¸rãí¼ò¯w¸ÐÐ8jdƒ¥ƒŪâ¦0ë7/rgs×½øyWÍõI'ãh I¹‰«ïa&£láе÷ŒØP4f›.t'é+@"++,FŒ¾BÅUòõÈL8zâßzðgDE„s禛”åiS ñý]Øå4£:ŽÌ»~@æ]?ÀÒRJåÖíÔ~¶“º;i©t}lùh3é^!äù…Ã7™›¶±í/gØøíicxf_,Rµü§šƒe(–»‹Ìã¾;6±ì²$&Œâ¢›}¸šf4^¨ ­¼‚®ª*ºjê•@› "j‰ÌÌ!&/Øé“ Üpt' ˜{ª™k¦ ¿|yéõÙlßR9ì6bätîn-&rˆs wÒ€²,óøãÛþ/É2O¼00 (#-é*;¹×å“ð‚€é8¢ø#ðǤ™3#{zX‰,¬×©{‹³·¨¿Dù¾/oâºu«˜Z‡Zåû`5͸Å:¨¤ß:h°Û.$5›¤Ôl’®ðù)xDæ_­÷ ;úAÒâƒgÏqãSÇîÄ%8,ˆÅź®Òâ­J ±8]@ž/ÈòCÀú¬ò¶ö~÷Ô3\±áV&Ïå¦{¾ÉÖwÐÚîú*Âî ¢Œ@»ø ž¥Ç MÊ]\>}d ©áÇ÷a–ü$`øÛgþEƾ<ù·1“gfËfùZ®®Â>þ|/®X’¶åµW197qJ”­iÆÅ€¨@± Š6ŸÍ}f¼xûçÿ~Øm,{ølW=«®L£³úâ´Æ‰ŽsÅe'þÔYV|ugz|tE¢|ںͅ†F~õ‡§¸üêI˜2/}ý»lÿd']Ý®Êpû4ã/pL3ºâ˜ˆ1˘qÛ:¢|˜j Ÿ÷yFnŸ*¿ÿ)ŸóR" ý–/:1…9XX% ÂdVVÈÈHKá«·+±ƒìŒI£;®èAik¶?v\§¤§i×TnÝJÅ»ïÒxþâ€M\ Zéxã:^Ú4ráϪún¦º°~b0ØOPüœÔÔy]¦«…õ _#À€5³T*‘ëÖ®âžÛnfþìB"#|Ýp숌’Z´ŠAÃw3êϤ¢O ªwÇ,Én æV^M¦u„†¡˜›·rçæõ#îÎ$™ßü&(Aü„¨¼YÓU’´^„ À"qã r³¹ÿ+·±vå2ÒSSFÝ:°O3žôÃl+uÖPóÞ6ô+ïdŠ ëX¹øð\^ìè°Ûš ÜÑY?ât ·@–ù`‘$þûÅͶ“yqWé æ™/A`âsg¤[P]##_ƒÌU¿×áá|éÆë¸iýZæÍœAXèÈëíyƒ}šñPã«ýêŽñlì¼ZM}ê47tÏøÍo~cûP‚ø)·¨brÏÎFî‹(ýŸïœÂéܵé&®^¹Œä‰Fý¬ì‡¦žC™ªì)e7æðÞÛÃn£Š_Ç7š·;yy4 Pçà JTÞœ *ÌWö >Y Xs,*"œM¯ã+7]GáÔ)h4£›¶ŽT÷4Íhn|•¿¦Ü1bçå¬CY6ohq¹¼³¤ø€‹»õ‚pI X}Y…õÀ\ùìçÍœÁ7ïþ2+¯XDBüðkú‚”µN¥ ©>G—ç°{×ðV@ø¬ßñµcC—$ Ÿ \‚DåΜ(*““׃¼šAÆ ÄÅÆðµÛoåÆk×R—3*%Êö¸“fì9w@É*lÝJõîXœ«뛺Ébʨ€$\ÖYqü ‹»õ‚pÉãšu°jébîùÒÍ,Y8ÔV`²âNšÑÒ^MÍ6E *·JwßZˆq_û„¯ümÅ ¯ @?Aâ@döŒ$•(®í³Ö0È'©IIÜ}ÛMÜpõjòr²Feв=Ý(k2Ž˜f”zhúì}*¶n¥ê£\{ä ƒt ŽŠÈâÂÎòcE.îÖo @¡¹òJutuÛ刬dyƒX*•Èš+—rϦ›Y¼p.ÑQ#¯Zì î¤%™A³Aè'Ø dh>ûÌÜ»QÄfÍÎ’U–52â*Ö‚ µX$¶ïØÉö;Ș”Ê7îü2Ö¬`RjŠÏ˜¬ÝŒ9}ÿ·¦[¹y, æ¨â Ä3Zóœ7Q©Dn^5wßv3§M%*rtK”]M3ކ Ïïëö (‚@Ïp²b&ÏÌÆ,¯V¬ym±H¼þÎ6^g3¦pß—7±réâQ)Q¶_¹ù&øt|º €Ô¤‰Ü{û-\¿v9Y™¨Õc¸ ªÙ´‚+"³¦'«Tª5Cõ,XK”¿ú¥[¸lÞl´ÑÑCìix\µT’4«­âd±GG‚@€DWyªëúŒƒt4Z,’`_¢œžšÂ×ï¼ k®"=-Õ(·7 A ÈލܙU‚¼|¨iHj•ЛםãîÛnfÆÔ‚a˜\µ,²}7v—\ÅÏ @K1&·pNŸu° XŽÒS€ ,˜=“¢cŃ"xWFþu Ž·€ AúˆÌšž,ªÄuÂ:V#3ØÒÄfß’‘ÿˆ+9€ A† ¦ 0G6 XL®€ü´E^DS(þ?· ›ßXJIEND®B`‚gImageReader-3.4.0/docs/index.he.md000066400000000000000000000014021417507262200170110ustar00rootroot00000000000000# על ×ודות **gImageReader** ×”×•× ×ž×ž×©×§ ל [tesseract-ocr](https://github.com/tesseract-ocr/tesseract) ×שר כתוב ב- C++. ## ×יך ×–×” נר××” ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/gimagereader.jpg) ## תכונות - ×ž×™×™×‘× ×ž×¡×ž×›×™ PDF מדיסקי×, מכשירי סריקה, תמונות מסך ומלוח ההעתקה - מעבד מספר תמונות ×•×ž×¡×ž×›×™× ×‘×• - זמנית - הגדרת ×זור זיהוי ידנית ×ו ×וטומטית - זיהוי לטקסט רגיל ×ו למסמכי hOCR - הטקסט שזוהה מוצג ישירות לצד התמונה - מעבד ל×חר מכן ×ת הטקסט שזוהה, כולל בדיקת ×יות - ממיר למסמכי PDF ממסמכי hOCR gImageReader-3.4.0/docs/index.md000066400000000000000000000011751417507262200164250ustar00rootroot00000000000000# About **gImageReader** is a frontend to [tesseract-ocr](https://github.com/tesseract-ocr/tesseract) written in C++. ## How it looks ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/gimagereader.jpg) ## Features - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents gImageReader-3.4.0/docs/index.sl.md000066400000000000000000000012371417507262200170410ustar00rootroot00000000000000# O programu **gImageReader** je grafiÄni vmesnik za [tesseract-ocr](https://github.com/tesseract-ocr/tesseract) spisan v C++. ## Kako izgleda ![](https://raw.githubusercontent.com/manisandro/gImageReader/gh-pages/gimagereader.jpg) ## Kaj vam program omogoÄa - Uvoz PDF dokumentov ter slik iz diska, optiÄnega bralnika, odložiÅ¡Äa ter zajema zaslona - Obdelava veÄ slik ali dokumentov na enkrat - RoÄna ali samodejna doloÄitev obmoÄja prepoznave - Prepoznava v golo besedilo ali v zapis hOCR - Prepoznano besedilo prikazano takoj ob sliki - Nadaljna obdelava prepoznanega besedila, vkjuÄno s Ärkovalnikom slovarja - Izdelava PDF ter ODT dokumentov iz hOCRgImageReader-3.4.0/formatSourceFiles.sh000077500000000000000000000004221417507262200200310ustar00rootroot00000000000000#!/bin/sh dir=$(dirname "$(readlink -f "$0")") which astyle &> /dev/null || ( echo "Please install astyle." && exit 1 ) out=$(astyle --formatted --options=$dir/astyle.options $(find gtk qt \( -name '*.cc' -or -name '*.hh' \))) echo "$out" [ -z "$out" ] && exit 0 || exit 1 gImageReader-3.4.0/gtk/000077500000000000000000000000001417507262200146255ustar00rootroot00000000000000gImageReader-3.4.0/gtk/data/000077500000000000000000000000001417507262200155365ustar00rootroot00000000000000gImageReader-3.4.0/gtk/data/CharacterListDialog.ui000066400000000000000000000122471417507262200217530ustar00rootroot00000000000000 False Character whitelist / blacklist False center-on-parent True dialog True True False vertical 2 False end gtk-close True True True True True True 0 False False 0 True False vertical Exclude these characters from being recognized (blacklist): True True False True radioButtonWhitelist False True 0 True True Enter a string of characters... False True 1 Only allow the following characters to be recognized (whitelist): True True False True radioButtonBlacklist False True 2 True True Enter a string of characters... False True 3 False True 1 buttonClose gImageReader-3.4.0/gtk/data/ConfigDialog.ui000066400000000000000000000624731417507262200204360ustar00rootroot00000000000000 True False help-contents-symbolic True False action-unavailable-symbolic True False object-select-symbolic True False list-add-symbolic True False list-remove-symbolic True False object-select-symbolic False 5 Preferences center-on-parent 500 True preferences-system dialog False vertical 2 False end Help True True True imageHelp False True 0 OK True True True imageOk False True 2 True True end 0 True False 3 True False Output pane orientation: 0 0 0 True False True Horizontal Vertical 1 0 Query to install missing spellcheck dictionaries True True False 0 True 0 2 2 Automatically check for new program versions True True False 0 True 0 4 2 True False 0 5 2 True False Predefined language definitions: True 0 0 10 2 75 True True True never always in True True 0 11 2 True False Additional language definitions: True True 0 0 12 2 75 True True True never always in True True 0 13 2 True False 3 start Add True True True imageLangsEditAdd False True 0 Remove True False True True imageLangsEditRemove False True 1 0 14 2 False 3 True True True The prefix of the tesseract language data file â— 2 Prefix True True 0 10 True True True The ISO 639-1 language code followed by the country code â— 2 ISO Code True True 1 10 True True True The name of the language â— 2 Name True True 2 OK True True True imageLangsAddOk False True 3 Cancel True True True imageLangsAddCancel 0.5 False True 4 0 15 2 True False Output pane font: 0 0 1 True False 3 Default True True False 0 True True False True 0 True False True True Sans 12 True True 1 1 1 True False Language data locations: 0 0 6 True False Language definitions path: 0 0 7 True False Spelling dictionaries path: 0 0 8 True False vertical 0 9 2 True False System-wide paths User paths 1 6 True True False 1 7 True True False * 1 8 Automatically open exported documents with default application True True False 0 True 0 3 2 True True 1 buttonHelp buttonOk gImageReader-3.4.0/gtk/data/CrashHandler.ui000066400000000000000000000145031417507262200204360ustar00rootroot00000000000000 True False view-refresh False 480 640 emblem-important dialog False vertical 2 False Regenerate backtrace True True True imageRegenerate True True 0 gtk-close True True True True False True 1 False True end 0 True False <b>The application has crashed</b> Apologies for the inconvenience. To help improve the application, please consider reporting the issue to <a href="mailto:manisandro@gmail.com?subject=gImageReader%20Crash">manisandro@gmail.com</a>. Please try to describe what you were doing before the application crashed. Also, include the information below. Thank you. True True 0 False True 0 True True <b>Tesseract has aborted</b> Tesseract (the OCR engine) has aborted while recognizing text. This may occur if the used traineddatas are corrupt or incomplatible with the version of tesseract in use, or due to a bug in tesseract. The stacktrace below may provide additional information about where the crash occurred. True True 0 False True 2 True False True 0 False True 3 True True in True True False True True 4 False False True 5 buttonClose gImageReader-3.4.0/gtk/data/HOCRBatchExportDialog.ui000066400000000000000000000406701417507262200221230ustar00rootroot00000000000000 99 1 10 True False object-select-symbolic True False edit-delete-symbolic True False folder-open-symbolic BatchExportDialog False HOCR Batch Export 480 dialog False vertical 2 False end True False True True True 0 Apply True True True imageApply True True 1 Close True True True imageClose True True 2 False False 0 True True True False 2 2 2 2 2 2 True False start Select source folder: 0 0 True False start Format: 0 1 True False start Group outputs of N lowest levels: 0 2 True False True 1 1 2 True True True adjustmentExportLevel 1 2 2 True True True 1 0 True True True imageOpen 2 0 True False True 0 none True False 2 2 2 2 2 2 True False start Input: 0 0 True False start Output preview: 1 0 True False True True 0 in True True True True 0 1 True False True True 0 in True True True True 1 1 0 3 3 True False Input files False True False 2 2 2 2 vertical 1 True False Export options 1 False True True 1 button1 button2 gImageReader-3.4.0/gtk/data/MainWindow.ui000066400000000000000000003035241417507262200201600ustar00rootroot00000000000000 -10 10 0.10 1 -100 100 1 10 -100 100 1 10 1 1 1 10 50 600 100 10 50 359.89999999999998 0.10 1 image/png *.png True False /org/gnome/gimagereader/autolayout.png True False /org/gnome/gimagereader/controls.png True False document-send-symbolic True False Toggle output pane text-editor-symbolic True False action-unavailable-symbolic True False object-select-symbolic True False action-unavailable-symbolic True False object-select-symbolic True False edit-delete-symbolic True False /org/gnome/gimagereader/rotate_pages.png True False /org/gnome/gimagereader/rotate_page.png True False Rotate current page True False imageRotateCurrent False True Rotate all pages True False imageRotateAll False True True False folder-open-symbolic True False edit-paste-symbolic True False camera-photo-symbolic True False Sources document-new-symbolic True False document-open-symbolic True False edit-clear-symbolic True False user-trash-symbolic True False list-remove-symbolic True False scanner-symbolic True False zoom-fit-best-symbolic True False zoom-in-symbolic True False zoom-original-symbolic True False zoom-out-symbolic True False False True False vertical True True 99999 True True True True True True True True False vertical True False 2 2 2 2 2 True False True True True Add images imageSourcesAdd False True 0 True True False Add Images False True False 4 down False True 1 False True 0 True True True imageSourceFolder none False True 1 True False True True imageSourcePaste none False True 2 True True True imageSourceScreenshot none False True 3 True False False True 4 True False True True Remove image from list imageSourcesRemove none False True 5 True False True True Delete image imageSourcesDelete none False True 6 True False True True Clear list imageSourcesClear none False True 7 False True 0 True True vertical 200 True True True in True True False True False 0 2 multiple False True True False vertical Thumbnails True True False True False True 0 True True in True True 6 64 True True True 1 True True True True 1 True False Files False True False 2 2 2 2 True True False Device: 0 0 0 True False True False liststoreAcquireDevice False True True 0 True True True Refresh True False 16 view-refresh-symbolic 1 False True 1 True False True False True 2 1 0 True False Output: 0 0 1 True True True True False 2 True False True start True True True 0 True False document-open-symbolic False True 1 1 1 True False Mode: 0 0 2 True False 0 Color Grayscale 1 2 True False Resolution: 0 0 3 True False 2 75 dpi 100 dpi 200 dpi 300 dpi 600 dpi 1200 dpi 1 3 True False True 0 5 2 True False vertical start Scan True False True True imageSourcesScan False True 0 0 6 2 True False Source: 0 0 4 True False 0 Flatbed ADF Front ADF Back ADF Duplex 1 4 1 True False Acquire 1 False False False True False vertical False False True False True Brightness True True â— 7 0 True False adjustmentBrightness True True False False True False True Contrast True True â— 7 0 True False adjustmentContrast True True False False True False True Resolution True True â— 7 200 True False adjustmentResolution True True 100 False False True False Invert colors True True False 0 True False False True False True False False True 0 True True in False True True GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK none True center center True True 1 True False True False True True 0 True False True False True True 0 False True False center False True 0 True True True imageProgressCancel False True 1 False True 1 False True 2 True False gImageReader True True True False imageSources True True False True True False Zoom in imageZoomin False True 0 True True False Zoom out imageZoomout False True 1 True True False Normal size imageZoomnorm False True 2 True True False Best fit imageZoomfit False True 3 1 True False Rotate page True True False Select rotation mode menuRotateMode False True False True False True Select insert mode /org/gnome/gimagereader/rotate_pages.png False True 0 True False down False True 1 False True 0 True True 5 • 10 5 0.0 0.5 True object-rotate-left-symbolic object-rotate-right-symbolic adjustmentRotate 1 1 True True True False True 1 2 True Select page â— 6 1 True False view-paged-symbolic False adjustmentPage 1 3 True True False Image controls imageControls 4 True False True False Plain text hOCR, PDF False True 0 True True Autodetect layout imageAutolayout False True 1 True True True True False True True False <small>Recognize all</small> True center 1 0 True False <small>English (en_US)</small> True 1 1 True False insert-text-symbolic 2 0 0 2 False True 2 True True False Select language menuLanguages False True False 4 down False True 3 5 True True False imageOutputpane True 6 True False none True False applications-system-symbolic end 7 True True True Batch Export imageExport 8 False 5 False center-on-parent True help-about menu True True windowMain gImageReader Copyright © 2009-2022 Sandro Mani A graphical frontend to tesseract-ocr https://github.com/manisandro/gImageReader/ Sandro Mani <manisandro@gmail.com> the community using Weblate https://hosted.weblate.org/projects/gimagereader/translations/ gimagereader gpl-3-0 False vertical 2 False end False True end 0 True False False True 2 False Batch Mode 320 dialog windowMain False vertical 2 False end gtk-ok True True True True True True 0 gtk-cancel True True True True True True 1 False False 0 True False vertical True False <i>In batch mode, each input source is processed separately and the output saved side-by-side to the input file.</i> True True False True 0 True False True False Existing output: False True 5 0 True False True True 5 1 False False 1 Prepend page numbers to output text True True False 0 True False True 2 Autodetect page layout True True False 0 True False True 3 True True 1 buttonOk buttonCancel False 5 Page Range False center-on-parent True edit-copy dialog True True windowMain True False vertical 2 True False end Cancel True True True imagePagesCancel False False 0 OK True True True imagePagesOk False False 1 False True end 4 True False 2 2 True True True â— 1 0 True False Page range: True 0 0 0 True False True <small><b>Example:</b> 1-10, 13, 14-18</small> True 0 1 1 True False Recognition area: True 0 0 2 True False True Entire page Autodetect 1 2 True False 0 1 False True 0 True False vertical True False Prepend to output text: 0 False True 0 Source filename True True False 0 True False True 1 Source page True True False 0 True False True 2 False True 2 buttonPageRangeCancel buttonPageRangeOk False Protected PDF dialog windowMain windowMain False vertical 2 False end Cancel True True True imagePdfpasswordCancel False False 0 OK True True True True True imagePdfpasswordOk False False 1 False False 0 True False 0 False True 3 True True False â— True False True 4 buttonPdfpasswordCancel buttonPdfpasswordOk both True False True False Current Page True True False Multiple Pages... True True False Batch mode... True vertical gImageReader-3.4.0/gtk/data/OutputEditorHOCR.ui000066400000000000000000000770541417507262200212350ustar00rootroot00000000000000 False Add Word dialog False vertical 2 False end Cancel True True True True True 0 OK True True True True True 1 False False 0 True False Enter word: 0 False True 1 True True False True 2 buttonAddWordCancel buttonAddWordOk True False edit-clear-symbolic True False /org/gnome/gimagereader/collapse.png True False /org/gnome/gimagereader/expand.png True False edit-find-replace-symbolic True False /org/gnome/gimagereader/ins_hocr_append.png True False /org/gnome/gimagereader/ins_hocr_before.png True False Append new output after last page True False imageInsertAppend False Insert new output before current page True False imageInsertBefore False True False go-down-symbolic True False go-up-symbolic True False document-print-preview-symbolic True False document-save-as-symbolic True False document-open-symbolic True False /org/gnome/gimagereader/wconf.png True False True False Export to plain text True False Export to PDF True True False Export to ODT True True False True False Append document after last page True True False Insert document before current page True True False vertical True False True True False Select insert mode none menuInsert False True False True False True Select insert mode /org/gnome/gimagereader/ins_append.png False True 0 True False down False True 1 False True 0 True False False True 1 True False True True True Open hOCR file imageSourcesAdd none False True 0 True True False Open hOCR file none menuOpen False True False down False True 1 False True 2 True False True True Save output imageSave none False True 3 True False True False Export none menuExport False True False True False True Export x-office-document-symbolic False True 0 True False down False True 1 False True 4 True True True Clear output imageClear none False True 5 True False False True 6 True True True Find and replace imageFindreplace none False True 7 True True True Show confidence values imageWconf none False True 8 True True True Show preview imagePreview none False True 9 False True 0 True False vertical False True 1 True True vertical 300 True False vertical True True never in True True False False True True 0 True False 2 True False False True 0 True False False True 1 True True True Next (F3) imageNavigationNext none False True 2 True True True Previous (Shift+F3) imageNavigationPrev none False True 3 True False False True 4 True True True Expand all imageExpandAll none False True 5 True True True Collapse all imageCollapseAll none False True 6 False True 1 False True True True True True never in True True False 0 True False both True False Properties False True True in True True False word 2 2 True 1 True False Source 1 False True True True True 2 gImageReader-3.4.0/gtk/data/OutputEditorText.ui000066400000000000000000000475221417507262200214230ustar00rootroot00000000000000 True False tab-new-symbolic True False edit-clear-symbolic True False edit-find-replace-symbolic True False /org/gnome/gimagereader/ins_append.png True False /org/gnome/gimagereader/ins_cursor.png True False /org/gnome/gimagereader/ins_replace.png True False Append to current text True False imageInsertAppend False True Insert at cursor True False imageInsertCursor False True Replace current text True False imageInsertReplace False True True False document-open-symbolic True False edit-redo-symbolic True False document-save-symbolic True False /org/gnome/gimagereader/stripcrlf.png True False edit-undo-symbolic True False True False False Keep line break if... True False Preceded by end mark (.?!) True False Preceded or succeeded by quote True False True False False Other options True False Join hyphenated words True False Collapse whitespace True False Preserve paragraphs True False True False False Visual aids True False Draw whitespace True False vertical True False 2 True False True True True Open file imageOpen none False True 0 True True True none False True False 0 down False True 1 False False 0 True True True Save output imageSave none False True 2 True False False True 3 True True False Select insert mode none menuInsert False True False True False True Select insert mode /org/gnome/gimagereader/ins_append.png False True 0 True False down False True 1 False True 4 True False True True True Strip line breaks on selected text imageStripcrlf none False True 4 True True False none menuStripcrlf False True False 4 down False True 5 False True 5 True True True Find and replace imageFindreplace none False True 7 True True True Undo imageUndo none False True 8 True True True Redo imageRedo none False True 9 True True True Clear output imageClear none False True end 10 False True 0 True False vertical False True 1 True True False True True True True New tab imageAddTab none False True True 2 gImageReader-3.4.0/gtk/data/PdfExportWidget.ui000066400000000000000000001537141417507262200211670ustar00rootroot00000000000000 50 1200 10 50 50 200 1 10 1 100 1 1 10 1 99 1 10 100 1 10 50 1200 10 50 True False /org/gnome/gimagereader/landscape.png True False /org/gnome/gimagereader/portrait.png False vertical 2 Show preview True True False 0 True False True 0 True True True False 6 6 6 6 6 6 True False Output mode: 0 0 0 True False 0 PDF PDF with invisible text overlay 1 0 True False 0 in True False 12 True False 2 2 True False True 1 0 True False Format: 0 0 0 True False Compression: 0 0 3 True False True 1 3 True False Compression quality: 0 0 4 True True True adjustmentPdfQuality 90 1 4 True False DPI: 0 0 2 True True adjustmentPdfDpi 300 1 2 True False Dithering algorithm: 0 0 1 True False 1 1 True False Image settings: 0 4 2 True False 0 in True False 12 True False 2 2 Uniformize line and word spacing True True False True 0 True 0 4 3 Override font family: True True False 0 True 0 0 True False Fallback font family: 0 0 1 Override font size: True True False 0 True 0 2 True False Font scaling: 0 0 3 True True adjustmentPdfFontscale 100 1 3 True False pt 0 2 2 True False True adjustmentPdfOverridefontsize 10 1 2 True False % 0 2 3 True False Preserve spaces wider than: 0 0 5 True True True 2 2 adjustmentPdfPreserve True True 4 1 5 True False characters 0 2 5 True False False True True 1 0 2 True False True True 1 1 2 Sanitize hyphens before line breaks True True False True 0 6 3 True False Text settings: 0 0 5 2 True False Paper size: 0 0 1 True False 2 True False True True 0 True False True True True imagePortrait True False True 0 True True True imageLandscape False True 1 False True 1 1 1 True False 2 True True Width url True True 0 True False x False True 1 True True Height number True True 2 True False False True 3 1 3 boxPaperSizeDpi True False True False start Treat image sources as having true DPI: True True 0 True True adjustmentSourceDpi 300 True True 1 1 2 True False Basic False True False 6 6 6 6 vertical 6 True False 2 True False PDF version: False True 0 True False True True 1 False True 0 True False 0 in True False 12 True False 6 2 True False Password: 0 0 0 True False Confirm password: 0 0 1 True True True False â— password 1 0 True True True False â— password 1 1 True False Encryption (optional): False True 1 True False 0 in True False 12 True False 6 2 True False Author: 0 0 0 True False Title: 0 0 1 True False Subject: 0 0 2 True False Creator: 0 2 0 True False Producer: 0 2 1 True False Keywords: 0 2 2 entryMetadataAuthor True True True 1 0 entryMetadataTitle True True True 1 2 entryMetadataSubject True True True 1 1 entryMetadataCreator True True True 3 0 entryMetadataProducer True True True 3 1 entryMetadataKeywords True True True 3 2 True False Additional information (optional): False True 2 Import from current source True True True False True 3 1 True False Advanced 1 False False True 1 gImageReader-3.4.0/gtk/data/SearchReplaceFrame.ui000066400000000000000000000173261417507262200215620ustar00rootroot00000000000000 True False text-editor-symbolic True False vertical True False 2 2 10 True True 4 2 True â— 2 Find 0 0 10 True True 4 2 True â— 2 Replace 0 1 True True True Replace 2 2 True False 16 edit-find-replace-symbolic 1 1 True True True Replace all 2 4 True False 16 error-correct-symbolic 2 1 True True True Find previous 2 4 True False 16 go-up-symbolic 2 0 True True True Find next 2 2 True False 16 go-down-symbolic 1 0 False True 0 Match case True True False 5 5 0 True False True 1 Substitutions True True True imageSubstitutions False True 2 gImageReader-3.4.0/gtk/data/SelectionMenu.ui000066400000000000000000000160611417507262200206530ustar00rootroot00000000000000 1 1 1 1 True False edit-copy-symbolic True False edit-delete-symbolic True False 16 insert-text-symbolic True False document-save-as-symbolic False True True True 2 popup False True True popup-menu True True True False False True False 2 Delete True True True imageSelectionDelete none 0 True 0 2 2 True False Order: 0 0 True True â— 2 number adjustmentSelectionOrder True 1 1 0 Recognize True True True imageSelectionRecognize none 0 True 0 3 2 Recognize to clipboard True True True imageSelectionClipboard none 0 True 0 4 2 True False 0 1 2 Save as image True True True imageSelectionSave none 0 True 0 5 2 gImageReader-3.4.0/gtk/data/SubstitutionsManager.ui000066400000000000000000000217461417507262200223010ustar00rootroot00000000000000 True False object-select-symbolic True False edit-delete-symbolic False Substitutions 320 240 document-properties True False vertical True False 1 True False Open Open True document-open-symbolic False True True False Save Save True document-save-as-symbolic False True True False Clear Clear True edit-clear-symbolic False True True False False True True False Add Add True list-add-symbolic False True True False False Remove Remove True list-remove-symbolic False True False True 0 True True never in True True True False False both multiple True True 1 True False end Apply True True True 4 2 4 4 imageApply True True 0 Close True True True 2 4 4 4 imageClose True True 1 False True 2 gImageReader-3.4.0/gtk/data/TessdataManager.ui000066400000000000000000000151631417507262200211460ustar00rootroot00000000000000 True False object-select-symbolic True False edit-delete-symbolic True False view-refresh-symbolic False Tessdata Manager center-on-parent 320 320 True dialog True True False vertical 2 False end Apply True True True imageApply True True 0 Close True True True imageClose True True 1 Refresh True True True imageRefresh True True 2 False False 0 True False vertical True False 2 2 2 2 Manage installed languages: 0 False True 0 True True never in True True False 1 False True True 1 True True 1 buttonApply buttonClose buttonRefresh gImageReader-3.4.0/gtk/data/appmenu.ui000066400000000000000000000020111417507262200175340ustar00rootroot00000000000000
Redetect Languages app.redetectLangs Manage Languages app.manageLangs Preferences app.preferences
Help app.help About app.about Quit app.quit
gImageReader-3.4.0/gtk/data/gimagereader.gresource.xml000066400000000000000000000061051417507262200226730ustar00rootroot00000000000000 CrashHandler.ui MainWindow.ui appmenu.ui ConfigDialog.ui TessdataManager.ui OutputEditorText.ui OutputEditorHOCR.ui PdfExportWidget.ui SearchReplaceFrame.ui SubstitutionsManager.ui SelectionMenu.ui CharacterListDialog.ui HOCRBatchExportDialog.ui ../../data/icons/angle.png ../../data/icons/autolayout.png ../../data/icons/brightness.png ../../data/icons/contrast.png ../../data/icons/controls.png ../../data/icons/filtering.png ../../data/icons/ins_append.png ../../data/icons/ins_cursor.png ../../data/icons/ins_replace.png ../../data/icons/page.png ../../data/icons/resolution.png ../../data/icons/stripcrlf.png ../../data/icons/item_block.png ../../data/icons/item_halftone.png ../../data/icons/item_line.png ../../data/icons/item_page.png ../../data/icons/item_par.png ../../data/icons/item_word.png ../../data/icons/rotate_page.png ../../data/icons/rotate_pages.png ../../data/icons/wconf.png ../../data/icons/landscape.png ../../data/icons/portrait.png ../../data/icons/collapse.png ../../data/icons/expand.png ../../data/icons/ins_hocr_append.png ../../data/icons/ins_hocr_before.png ../../data/icons/thumbnail.png gImageReader-3.4.0/gtk/data/org.gnome.gimagereader.gschema.xml000066400000000000000000000352561417507262200242070ustar00rootroot00000000000000 1 Output pane orientation Output pane orientation. true Whether to use the system default font in the output pane Whether to use the system default font in the output pane. "Sans 10" Output pane font Output pane font. false Show advanced controls Show advanced controls. true Autoinstall missing spelling dictionaries Autoinstall missing spelling dictionaries. true Automatically check for updates Automatically check for updates. "eng:en_EN" Default recongition language Default recongition language. "" Custom language definitions Custom language definitions. 150 Scanning resolution Scanning resolution in dpi. 0 Scanning device Scanning device. 0 Scanning mode Scanning mode. 0 Scanning source Scanning source. [0,0,640,480] Window geometry Window geometry. true Keep line break if preceded by dot Keep line break if preceded by dot. false Keep line break if preceded by quote Keep line break if preceded by quote. true Join word split by hyphen Join word split by hyphen. true Clean whitespace Clean whitespace. true Preserve paragraphs Preserve paragraphs. false Draw whitespace Draw whitespace. 0 OCR Page Region Strategy Whether to recognize the entire page or perform page layout autodetection. "" Replacement list List of search-replace strings. false Match case when searching Match case when searching. "" Source directory for OCR input Source directory for OCR input. "" Directory for auxiliary files Directory for auxiliary files. "" Output directory for OCR output Output directory for OCR output. 6 Page segmentation mode Page segmentation mode. 0 Default output editor Default output editor. 0 PDF export mode PDF export mode. "Sans 10" Font to use for PDFs Font to use for PDFs. false Uniformize line spacing Whether to uniformize line spacing when generating PDFs. true Sanitize line breaks Whether to sanitize hyphens before line breaks when generating PDFs. 4 Preserve spaces wider than Preserve spaces wider than the specified number of characters when generating PDFs with uniformized spacing. 0 Image color format for PDF output Image color format for PDF output: color (0), grayscale (1) or monochrome (2). 0 Compression for images in PDF output Compression for images in PDF output: Zip (0) or Jpeg (1). 90 Compression quality for images in PDF output Compression quality for images in PDF output: [0-100]. false Whether to display a preview when exporting to PDF Whether to display a preview when exporting to PDF. false Whether to automatically open exported documents output Whether to automatically open exported documents output. 0 Where to look for tessdata and spelling files Whether to look in system-wide (0) or user paths (1) for tessdata and spelling files. 100 Scaling factor for detected font sizes Scaling factor for detected font sizes. 300 Resolution at which to export images in the PDF Resolution at which to export images in the PDF. 0 Image conversion flags Image conversion flags. false Whether to override font family when exporting to PDF Whether to override font family when exporting to PDF. "Sans" Font family to use when exporting to PDF Font family to use when exporting to PDF. "Sans" Fallback font family to use when exporting to PDF Fallback font family to use when exporting to PDF. false Whether to override font size when exporting to PDF Whether to override font size when exporting to PDF. 10 Font size when exporting to PDF Font size when exporting to PDF. false Prepend filename to output Whether to prepend the filename to the output text. false Prepend page number to output Whether to prepend the page number to the output text. 0 PDF export paper size PDF export paper size. "" PDF export custom page width PDF export custom page height. "" PDF export custom page height PDF export custom page height. 0 PDF export paper size unit PDF export paper size unit. false PDF export paper orientation PDF export paper orientation. "" PDF export metadata: author PDF export metadata: author. "gImageReader" PDF export metadata: produce PDF export metadata: producer. "gImageReader" PDF export metadata: creator PDF export metadata: creator. 7 PDF export version PDF export version. true OCR character blacklist enabled OCR character blacklist enabled. false OCR character whitelist enabled OCR character whitelist enabled. "" OCR character whitelist OCR character whitelist. "" OCR character whitelist OCR character whitelist. true Show thumbnails Show thumbnails "plain text" Syntax highlight mode Syntax highlight mode. 0 Batch export format Batch export format. gImageReader-3.4.0/gtk/data/uigen.py000077500000000000000000000061301417507262200172220ustar00rootroot00000000000000#!/usr/bin/python import os import re import sys from xml.dom.minidom import parse import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk def extractMemberData(element, extraHeaders): className = element.attributes["class"].value isWidget = False if className == "GtkSourceView": className = "Gsv::View" extraHeaders.add("gtksourceviewmm.h") isWidget = True else: classType = Gtk.__getattr__(re.sub('^Gtk', '', className)) className = re.sub('^Gtk', 'Gtk::', className) isWidget = issubclass(classType, Gtk.Widget) resource = None for child in element.childNodes: if child.nodeName == "property" and child.attributes["name"].value == "resource": resource = child.childNodes[0].data objectId = element.attributes["id"].value return {"class": className, "id": objectId, "res": resource, "iswidget": isWidget} def genFormHeader(sourceFile): document = parse(sourceFile) extraHeaders = set() members = [extractMemberData(el, extraHeaders) for el in document.getElementsByTagName("object") if "id" in el.attributes] uiName = os.path.splitext(os.path.basename(sourceFile))[0] outputFile = "ui_" + uiName + '.hh' guardName = outputFile.upper().replace('.', '_') fh = open(outputFile, 'w') fh.write('// This file was autogenerated from %s\n\n' % sourceFile) fh.write('#ifndef %s\n' % guardName) fh.write('#define %s\n\n' % guardName) fh.write('#include \n') fh.write('#include \n') for header in extraHeaders: fh.write('#include <%s>\n' % header) fh.write('\nnamespace Ui {\n') fh.write('struct %s {\n' % uiName) fh.write('\tGlib::RefPtr builder;\n') for member in members: if member["iswidget"] == True: fh.write('\t%s* %s = nullptr;\n' % (member["class"], member["id"])) fh.write('\n\t%s() {\n' % uiName) fh.write('\t\tbuilder = Gtk::Builder::create_from_resource("/org/gnome/gimagereader/%s");\n' % (uiName + '.ui')) fh.write('\t\tbuilder->set_translation_domain(GETTEXT_PACKAGE);\n') fh.write('\t}\n') fh.write('\n\tvoid setupUi() {\n') for member in members: if member["iswidget"] == True: fh.write('\t\tbuilder->get_widget("%s", %s);\n' % (member["id"], member["id"])) if member["res"]: fh.write('\t\t%s->set(Gdk::Pixbuf::create_from_resource("%s"));\n' % (member["id"], member["res"])) fh.write('\t}\n') fh.write('\n\t~%s() {\n' % uiName) fh.write('\t\tstd::vector toplevelWidgets;\n') for member in members: if member["iswidget"] == True: fh.write('\t\tif(!%s->get_parent()) toplevelWidgets.push_back(%s);\n' % (member["id"], member["id"])) fh.write('\t\tstd::for_each(toplevelWidgets.begin(), toplevelWidgets.end(), [](Gtk::Widget* w) { delete w; });\n') fh.write('\t}\n') fh.write('};\n') fh.write('} // Ui\n') fh.write('#endif // %s\n' % guardName) fh.close() print("Wrote %s" % outputFile) for sourceFile in sys.argv[1:]: genFormHeader(sourceFile) gImageReader-3.4.0/gtk/src/000077500000000000000000000000001417507262200154145ustar00rootroot00000000000000gImageReader-3.4.0/gtk/src/Acquirer.cc000066400000000000000000000166021417507262200175030ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Acquirer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Acquirer.hh" #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Utils.hh" #ifdef G_OS_WIN32 #include "scanner/ScannerTwain.hh" #else #include "scanner/ScannerSane.hh" #endif Acquirer::Acquirer(const Ui::MainWindow& _ui) : ui(_ui) { m_cancelButton = Gtk::manage(new Gtk::Button(_("Cancel"))); m_cancelButton->set_image_from_icon_name("dialog-cancel", Gtk::ICON_SIZE_BUTTON); m_cancelButton->show(); ui.comboAcquireDevice->set_model(Gtk::ListStore::create(m_devComboCols)); Gtk::CellRendererText* cell = Gtk::manage(new Gtk::CellRendererText); cell->property_ellipsize() = Pango::ELLIPSIZE_END; ui.comboAcquireDevice->pack_start(*cell, true); ui.comboAcquireDevice->add_attribute(*cell, "text", 0); if(ui.comboAcquireResolution->get_active_row_number() == -1) { ui.comboAcquireResolution->set_active(2); } if(ui.comboAcquireMode->get_active_row_number() == -1) { ui.comboAcquireMode->set_active(0); } m_scanner = new ScannerImpl; CONNECT(ui.buttonAcquireRefresh, clicked, [this] { startDetectDevices(); }); CONNECT(ui.buttonAcquireScan, clicked, [this] { startScan(); }); CONNECT(m_cancelButton, clicked, [this] { cancelScan(); }); CONNECT(ui.buttonAcquireOutput, clicked, [this] { selectOutputPath(); }); CONNECT(ui.comboAcquireDevice, changed, [this] { setDeviceComboTooltip(); }); CONNECT(m_scanner, initFailed, [this] { scanInitFailed(); }); CONNECT(m_scanner, devicesDetected, [this](const std::vector& devices) { doneDetectDevices(devices); }); CONNECT(m_scanner, scanFailed, [this](const std::string & msg) { scanFailed(msg); }); CONNECT(m_scanner, scanStateChanged, [this](Scanner::State state) { setScanState(state); }); CONNECT(m_scanner, pageAvailable, [this](const std::string & file) { m_signal_scanPageAvailable.emit(file); }); ADD_SETTING(ComboSetting("scanres", ui.comboAcquireResolution)); ADD_SETTING(ComboSetting("scanmode", ui.comboAcquireMode)); ADD_SETTING(ComboSetting("scandev", ui.comboAcquireDevice)); ADD_SETTING(ComboSetting("scansource", ui.comboAcquireSource)); #ifdef G_OS_WIN32 ui.labelAcquireSource->set_visible(false); ui.comboAcquireSource->set_visible(false); #endif std::string sourcedir = ConfigSettings::get>("sourcedir")->getValue(); m_outputPath = Glib::build_filename(sourcedir.empty() ? Utils::get_documents_dir() : sourcedir, _("scan.png")); genOutputPath(); m_scanner->init(); } Acquirer::~Acquirer() { m_scanner->close(); delete m_scanner; } void Acquirer::selectOutputPath() { FileDialogs::FileFilter filter = FileDialogs::FileFilter::pixbuf_formats(); filter.name = _("Images"); std::string filename = FileDialogs::save_dialog(_("Choose Output Filename..."), m_outputPath, "sourcedir", filter); if(!filename.empty()) { m_outputPath = filename; genOutputPath(); } } void Acquirer::genOutputPath() { m_outputPath = Utils::make_output_filename(m_outputPath); ui.labelAcquirePath->set_text(m_outputPath); ui.labelAcquirePath->set_tooltip_text(m_outputPath); } void Acquirer::scanInitFailed() { ui.labelAcquireMessage->set_markup(Glib::ustring::compose("%1", _("Failed to initialize the scanning backend."))); ui.buttonAcquireScan->set_sensitive(false); ui.buttonAcquireRefresh->set_sensitive(false); ui.buttonAcquireRefresh->show(); ui.spinnerAcquire->hide(); ui.spinnerAcquire->stop(); } void Acquirer::scanFailed(const Glib::ustring& msg) { ui.labelAcquireMessage->set_markup(Glib::ustring::compose("%1: %2", _("Scan failed"), msg)); } void Acquirer::startDetectDevices() { ui.buttonAcquireRefresh->hide(); ui.spinnerAcquire->show(); ui.spinnerAcquire->start(); ui.labelAcquireMessage->set_text(""); ui.comboAcquireDevice->set_model(Gtk::ListStore::create(m_devComboCols)); ui.buttonAcquireScan->set_sensitive(false); m_scanner->redetect(); } void Acquirer::doneDetectDevices(const std::vector& devices) { ui.buttonAcquireRefresh->show(); ui.spinnerAcquire->hide(); ui.spinnerAcquire->stop(); if(devices.empty()) { ui.labelAcquireMessage->set_markup(Glib::ustring::compose("%1", _("No scanners were detected."))); } else { Glib::RefPtr store = Glib::RefPtr::cast_static(ui.comboAcquireDevice->get_model()); for(const Scanner::Device& device : devices) { Gtk::TreeIter it = store->append(); it->set_value(m_devComboCols.label, device.label); it->set_value(m_devComboCols.name, device.name); } ui.comboAcquireDevice->set_active(0); ui.buttonAcquireScan->set_sensitive(true); } } void Acquirer::startScan() { ui.buttonboxAcquire->remove(*ui.buttonAcquireScan); m_cancelButton->set_sensitive(true); ui.buttonboxAcquire->pack_start(*m_cancelButton, false, true); ui.labelAcquireMessage->set_text(_("Starting scan...")); double res[] = {75., 100., 200., 300., 600., 1200.}; Scanner::ScanMode modes[] = {Scanner::ScanMode::COLOR, Scanner::ScanMode::GRAY}; Scanner::ScanType types[] = {Scanner::ScanType::SINGLE, Scanner::ScanType::ADF_FRONT, Scanner::ScanType::ADF_BACK, Scanner::ScanType::ADF_BOTH}; genOutputPath(); std::string device = (*ui.comboAcquireDevice->get_active())[m_devComboCols.name]; Scanner::Params params = {device, m_outputPath, res[ui.comboAcquireResolution->get_active_row_number()], modes[ui.comboAcquireMode->get_active_row_number()], 8, types[ui.comboAcquireSource->get_active_row_number()], 0, 0}; m_scanner->scan(params); } void Acquirer::setScanState(Scanner::State state) { if(state == Scanner::State::OPEN) { ui.labelAcquireMessage->set_text(_("Opening device...")); } else if(state == Scanner::State::SET_OPTIONS) { ui.labelAcquireMessage->set_text(_("Setting options...")); } else if(state == Scanner::State::START) { ui.labelAcquireMessage->set_text(_("Starting scan...")); } else if(state == Scanner::State::GET_PARAMETERS) { ui.labelAcquireMessage->set_text(_("Getting parameters...")); } else if(state == Scanner::State::READ) { ui.labelAcquireMessage->set_text(_("Transferring data...")); } else if(state == Scanner::State::IDLE) { doneScan(); } } void Acquirer::cancelScan() { ui.labelAcquireMessage->set_text(_("Canceling scan...")); m_scanner->cancel(); m_cancelButton->set_sensitive(false); } void Acquirer::doneScan() { ui.buttonboxAcquire->remove(*m_cancelButton); ui.buttonboxAcquire->pack_start(*ui.buttonAcquireScan, false, true); ui.labelAcquireMessage->set_text(""); genOutputPath(); } void Acquirer::setDeviceComboTooltip() { auto it = ui.comboAcquireDevice->get_active(); ui.comboAcquireDevice->set_tooltip_text(it ? static_cast((*it)[m_devComboCols.label]) : ""); } gImageReader-3.4.0/gtk/src/Acquirer.hh000066400000000000000000000036261417507262200175170ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Acquirer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef ACQUIRER_HH #define ACQUIRER_HH #include "common.hh" #include "Scanner.hh" namespace Ui { class MainWindow; } class Acquirer { public: Acquirer(const Ui::MainWindow& _ui); ~Acquirer(); sigc::signal signal_scanPageAvailable() const { return m_signal_scanPageAvailable; } private: class DevicesComboColumns : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn label; Gtk::TreeModelColumn name; DevicesComboColumns() { add(label); add(name); } } m_devComboCols; const Ui::MainWindow& ui; ClassData m_classdata; Gtk::Button* m_cancelButton; std::string m_outputPath; sigc::signal m_signal_scanPageAvailable; Scanner* m_scanner = nullptr; void genOutputPath(); void cancelScan(); void doneDetectDevices(const std::vector& devices); void doneScan(); void scanInitFailed(); void scanFailed(const Glib::ustring& msg); void selectOutputPath(); void setDeviceComboTooltip(); void setScanState(Scanner::State state); void startDetectDevices(); void startScan(); }; #endif // ACQUIRER_HH gImageReader-3.4.0/gtk/src/Application.hh000066400000000000000000000053721417507262200202070ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Application.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef APPLICATION_HPP #define APPLICATION_HPP #include "common.hh" #include "MainWindow.hh" class Application : public Gtk::Application { public: Application(int& argc, char**& argv, const Glib::ustring& application_id, Gio::ApplicationFlags flags) : Gtk::Application(argc, argv, application_id, flags) { Glib::set_application_name(PACKAGE_NAME); } private: void on_activate() override { if(m_mainWindow) { m_mainWindow->getWindow()->present(); } } void on_startup() override { Gtk::Application::on_startup(); add_action("redetectLangs", [this] { m_mainWindow->redetectLanguages(); }); add_action("manageLangs", [this] { m_mainWindow->manageLanguages(); }); add_action("preferences", [this] { m_mainWindow->showConfig(); }); add_action("help", [this] { m_mainWindow->showHelp(); }); add_action("about", [this] { m_mainWindow->showAbout(); }); add_action("quit", [this] { on_quit(); }); Glib::RefPtr appMenuBuilder = Gtk::Builder::create_from_resource("/org/gnome/gimagereader/appmenu.ui"); Glib::RefPtr menuModel = Glib::RefPtr::cast_static(appMenuBuilder->get_object("appmenu")); bool appMenu = false; #if GTK_CHECK_VERSION(3,14,0) appMenu = prefers_app_menu(); #endif if(appMenu) { set_app_menu(menuModel); } g_assert(m_mainWindow == nullptr); m_mainWindow = new MainWindow(); CONNECT(m_mainWindow->getWindow(), hide, [this] { on_quit(); }); if(!appMenu) { m_mainWindow->setMenuModel(menuModel); } add_window(*m_mainWindow->getWindow()); m_mainWindow->getWindow()->show(); } void on_open(const type_vec_files& files, const Glib::ustring& /*hint*/) override { m_mainWindow->openFiles(files); m_mainWindow->getWindow()->present(); } void on_quit() { if(m_mainWindow) { remove_window(*m_mainWindow->getWindow()); delete m_mainWindow; m_mainWindow = nullptr; } } MainWindow* m_mainWindow = nullptr; ClassData m_classdata; }; #endif // APPLICATION_HPP gImageReader-3.4.0/gtk/src/Config.cc000066400000000000000000000302431417507262200171320ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Config.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Config.hh" #include "ConfigSettings.hh" #include "LangTables.hh" #include "MainWindow.hh" #include "Utils.hh" #include "OutputEditorText.hh" #include #define USE_STD_NAMESPACE #include #if TESSERACT_MAJOR_VERSION < 5 #include #endif #undef USE_STD_NAMESPACE const std::vector Config::LANGUAGES = LangTables::languages, Glib::ustring>([](const char* str) { return Glib::ustring(str); }); const std::map Config::LANG_LOOKUP = [] { std::map lookup; for(const Config::Lang& lang : LANGUAGES) { lookup.insert(std::make_pair(lang.prefix, lang.code)); } return lookup; }(); const std::multimap Config::LANGUAGE_CULTURES = LangTables::languageCultures>(); Config::Config() { ui.setupUi(); ui.dialogConfig->set_transient_for(*MAIN->getWindow()); ui.treeviewLangsPredef->set_model(Gtk::ListStore::create(m_langViewCols)); ui.treeviewLangsPredef->append_column(_("Filename prefix"), m_langViewCols.prefix); ui.treeviewLangsPredef->append_column(_("Code"), m_langViewCols.code); ui.treeviewLangsPredef->append_column(_("Native name"), m_langViewCols.name); for(int i = 0; i < 3; ++i) { ui.treeviewLangsPredef->get_column(i)->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); ui.treeviewLangsPredef->get_column(i)->set_expand(true); } ui.treeviewLangsPredef->set_fixed_height_mode(true); ui.treeviewLangsCustom->set_model(Gtk::ListStore::create(m_langViewCols)); ui.treeviewLangsCustom->append_column_editable(_("Filename prefix"), m_langViewCols.prefix); ui.treeviewLangsCustom->append_column_editable(_("Code"), m_langViewCols.code); ui.treeviewLangsCustom->append_column_editable(_("Native name"), m_langViewCols.name); for(int i = 0; i < 3; ++i) { ui.treeviewLangsCustom->get_column(i)->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); ui.treeviewLangsCustom->get_column(i)->set_expand(true); } ui.treeviewLangsCustom->set_fixed_height_mode(true); Glib::RefPtr store = Glib::RefPtr::cast_static(ui.treeviewLangsPredef->get_model()); for(const auto& lang : LANGUAGES) { Gtk::TreeIter it = store->append(); (*it)[m_langViewCols.prefix] = lang.prefix; (*it)[m_langViewCols.code] = lang.code; (*it)[m_langViewCols.name] = lang.name; } CONNECT(ui.checkbuttonDefaultoutputfont, toggled, [this] { ui.fontbuttonCustomoutputfont->set_sensitive(!ui.checkbuttonDefaultoutputfont->get_active()); }); CONNECT(ui.buttonLangsEditAdd, clicked, [this] { toggleAddLanguage(); }); CONNECT(ui.buttonLangsEditRemove, clicked, [this] { removeLanguage(); }); CONNECT(ui.buttonLangsAddOk, clicked, [this] { addLanguage(); }); CONNECT(ui.buttonLangsAddCancel, clicked, [this] { toggleAddLanguage(); }); CONNECT(ui.treeviewLangsCustom->get_selection(), changed, [this] { langTableSelectionChanged(); }); CONNECT(ui.buttonHelp, clicked, [] { MAIN->showHelp("#Usage_Options"); }); CONNECT(ui.entryLangsAddPrefix, focus_in_event, [this](GdkEventFocus*) { Utils::clear_error_state(ui.entryLangsAddPrefix); return false; }); CONNECT(ui.entryLangsAddName, focus_in_event, [this](GdkEventFocus*) { Utils::clear_error_state(ui.entryLangsAddName); return false; }); CONNECT(ui.entryLangsAddCode, focus_in_event, [this](GdkEventFocus*) { Utils::clear_error_state(ui.entryLangsAddCode); return false; }); CONNECT(ui.comboDatadirs, changed, [this] { setDataLocations(ui.comboDatadirs->get_active_row_number()); }); ADD_SETTING(SwitchSettingT("dictinstall", ui.checkDictinstall)); ADD_SETTING(SwitchSettingT("openafterexport", ui.checkOpenExported)); ADD_SETTING(SwitchSettingT("updatecheck", ui.checkUpdate)); ADD_SETTING(ListStoreSetting("customlangs", Glib::RefPtr::cast_static(ui.treeviewLangsCustom->get_model()))); ADD_SETTING(SwitchSettingT("systemoutputfont", ui.checkbuttonDefaultoutputfont)); ADD_SETTING(FontSetting("customoutputfont", ui.fontbuttonCustomoutputfont)); ADD_SETTING(ComboSetting("outputorient", ui.comboPaneorient)); ADD_SETTING(ComboSetting("datadirs", ui.comboDatadirs)); ADD_SETTING(VarSetting("sourcedir")); ADD_SETTING(VarSetting("outputdir")); ADD_SETTING(VarSetting("auxdir")); #if !ENABLE_VERSIONCHECK ui.checkUpdate->hide(); #endif } bool Config::searchLangSpec(Lang& lang) const { // Tesseract 4.x up to beta.1 had script tessdatas on same level as language tessdatas, but they are distinguishable in that they begin with an upper case character if(lang.prefix.substr(0, 6).lowercase() == "script" || lang.prefix.substr(0, 1).uppercase() == lang.prefix.substr(0, 1)) { Glib::ustring name = lang.prefix.substr(0, 6).lowercase() == "script" ? lang.prefix.substr(7) : lang.prefix; lang.name = Glib::ustring::compose("%1 [%2]", name, _("Script")); return true; } for(const Glib::RefPtr& model : { ui.treeviewLangsPredef->get_model(), ui.treeviewLangsCustom->get_model() }) { Gtk::TreeIter it = std::find_if(model->children().begin(), model->children().end(), [this, &lang](const Gtk::TreeRow & row) { return row[m_langViewCols.prefix] == lang.prefix; }); if(it) { lang = {lang.prefix, (*it)[m_langViewCols.code], Glib::ustring::compose("%1 [%2]", (*it)[m_langViewCols.name], lang.prefix)}; return true; } } return false; } std::vector Config::searchLangCultures(const Glib::ustring& code) const { std::vector result; auto ii = LANGUAGE_CULTURES.equal_range(code); for(auto it = ii.first; it != ii.second; ++it) { result.push_back(it->second); } return result; } bool Config::useSystemDataLocations() const { return ui.comboDatadirs->get_active_row_number() == 0; } std::string Config::tessdataLocation() const { return ui.entryTessdatadir->get_text(); } std::string Config::spellingLocation() const { return ui.entrySpelldir->get_text(); } std::vector Config::getAvailableLanguages() { Utils::TesseractHandle tess; if(!tess.get()) { return std::vector(); } #if TESSERACT_MAJOR_VERSION < 5 GenericVector availLanguages; #else std::vector availLanguages; #endif tess.get()->GetAvailableLanguagesAsVector(&availLanguages); std::vector result; for(int i = 0; i < availLanguages.size(); ++i) { #if TESSERACT_MAJOR_VERSION < 5 result.push_back(availLanguages[i].string()); #else result.push_back(availLanguages[i]); #endif } std::sort(result.begin(), result.end(), [](const Glib::ustring & s1, const Glib::ustring & s2) { bool s1Script = s1.substr(0, 6) == "script" || s1.substr(0, 1) == s1.substr(0, 1).uppercase(); bool s2Script = s2.substr(0, 6) == "script" || s2.substr(0, 1) == s2.substr(0, 1).uppercase(); if(s1Script != s2Script) { return !s1Script; } else { return s1 < s2; } }); return result; } void Config::showDialog() { toggleAddLanguage(true); while(ui.dialogConfig->run() == Gtk::RESPONSE_HELP); ConfigSettings::get("customlangs")->serialize(); ui.dialogConfig->hide(); } void Config::setDataLocations(int idx) { ui.entrySpelldir->set_text(spellingLocation(static_cast(idx))); ui.entryTessdatadir->set_text(tessdataLocation(static_cast(idx))); } void Config::openTessdataDir() { int idx = Gio::Settings::create(APPLICATION_ID)->get_int("datadirs"); std::string tessdataDir = tessdataLocation(static_cast(idx)); Gio::File::create_for_path(tessdataDir)->make_directory_with_parents(); Utils::openUri(tessdataDir); } void Config::openSpellingDir() { int idx = Gio::Settings::create(APPLICATION_ID)->get_int("datadirs"); std::string spellingDir = spellingLocation(static_cast(idx)); Gio::File::create_for_path(spellingDir)->make_directory_with_parents(); Utils::openUri(spellingDir); } std::string Config::spellingLocation(Location location) { if(location == SystemLocation) { #ifdef G_OS_WIN32 std::string dataDir = Glib::build_filename(pkgDir, "share"); #else char* prefix = enchant_get_prefix_dir(); std::string dataDir = Glib::build_filename(prefix, "share"); free(prefix); #endif #if HAVE_ENCHANT2 if(Gio::File::create_for_path(Glib::build_filename(dataDir, "myspell"))->query_exists()) { return Glib::build_filename(dataDir, "myspell"); } else { return Glib::build_filename(dataDir, "hunspell"); } #else return Glib::build_filename(dataDir, "myspell", "dicts"); #endif } else { std::string configDir = Glib::get_user_config_dir(); #if HAVE_ENCHANT2 return Glib::build_filename(configDir, "enchant", "hunspell"); #else return Glib::build_filename(configDir, "enchant", "myspell"); #endif } } std::string Config::tessdataLocation(Location location) { if(location == SystemLocation) { #ifdef G_OS_WIN32 std::string dataDir = Glib::build_filename(pkgDir, "share"); Glib::setenv("TESSDATA_PREFIX", Glib::build_filename(dataDir, "tessdata")); #else Glib::unsetenv("TESSDATA_PREFIX"); #endif } else { std::string configDir = Glib::get_user_config_dir(); Glib::setenv("TESSDATA_PREFIX", Glib::build_filename(configDir, "tessdata")); } std::string current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; tess.Init(nullptr, nullptr); setlocale(LC_ALL, current.c_str()); return std::string(tess.GetDatapath()); } void Config::toggleAddLanguage(bool forceHide) { bool addVisible = forceHide ? true : ui.boxLangsAdd->get_visible(); ui.boxLangsAdd->set_visible(!addVisible); ui.buttonboxLangsEdit->set_visible(addVisible); if(addVisible) { ui.buttonLangsEditAdd->grab_focus(); } else { ui.buttonLangsAddOk->grab_focus(); } ui.entryLangsAddPrefix->set_text(""); ui.entryLangsAddCode->set_text(""); ui.entryLangsAddName->set_text(""); Utils::clear_error_state(ui.entryLangsAddPrefix); Utils::clear_error_state(ui.entryLangsAddCode); Utils::clear_error_state(ui.entryLangsAddName); } void Config::addLanguage() { bool invalid = false; if(!Glib::Regex::create("^\\w+$")->match(ui.entryLangsAddPrefix->get_text())) { invalid = true; Utils::set_error_state(ui.entryLangsAddPrefix); } if(!Glib::Regex::create("^.+$")->match(ui.entryLangsAddName->get_text())) { invalid = true; Utils::set_error_state(ui.entryLangsAddName); } if(!Glib::Regex::create("^[a-z]{2,}(_[A-Z]{2,})?$")->match(ui.entryLangsAddCode->get_text())) { invalid = true; Utils::set_error_state(ui.entryLangsAddCode); } if(!invalid) { Glib::RefPtr store = Glib::RefPtr::cast_static(ui.treeviewLangsCustom->get_model()); Gtk::TreeIter it = store->append(); (*it)[m_langViewCols.prefix] = ui.entryLangsAddPrefix->get_text(); (*it)[m_langViewCols.code] = ui.entryLangsAddCode->get_text(); (*it)[m_langViewCols.name] = ui.entryLangsAddName->get_text(); ui.entryLangsAddPrefix->set_text(""); ui.entryLangsAddCode->set_text(""); ui.entryLangsAddName->set_text(""); toggleAddLanguage(); } } void Config::removeLanguage() { if(ui.treeviewLangsCustom->get_selection()->count_selected_rows() != 0) { Glib::RefPtr store = Glib::RefPtr::cast_static(ui.treeviewLangsCustom->get_model()); store->erase(ui.treeviewLangsCustom->get_selection()->get_selected()); } } void Config::langTableSelectionChanged() { ui.buttonLangsEditRemove->set_sensitive(ui.treeviewLangsCustom->get_selection()->count_selected_rows() != 0); } gImageReader-3.4.0/gtk/src/Config.hh000066400000000000000000000052001417507262200171370ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Config.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CONFIG_HH #define CONFIG_HH #include #include #include #include "common.hh" #include "ui_ConfigDialog.hh" class Config { public: struct Lang { Glib::ustring prefix, code, name; Lang(const Glib::ustring& _prefix = Glib::ustring(), const Glib::ustring& _code = Glib::ustring(), const Glib::ustring& _name = Glib::ustring()) : prefix(_prefix), code(_code), name(_name) {} }; Config(); bool searchLangSpec(Lang& lang) const; std::vector searchLangCultures(const Glib::ustring& code) const; void showDialog(); bool useSystemDataLocations() const; std::string tessdataLocation() const; std::string spellingLocation() const; static void openTessdataDir(); static void openSpellingDir(); static Glib::ustring lookupLangCode(const Glib::ustring& prefix) { auto it = LANG_LOOKUP.find(prefix); return it != LANG_LOOKUP.end() ? it->second : ""; } static std::vector getAvailableLanguages(); private: enum Location {SystemLocation = 0, UserLocation = 1}; struct LangViewColumns : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn prefix; Gtk::TreeModelColumn code; Gtk::TreeModelColumn name; LangViewColumns() { add(prefix); add(code); add(name); } }; static const std::vector LANGUAGES; static const std::map LANG_LOOKUP; static const std::multimap LANGUAGE_CULTURES ; Ui::ConfigDialog ui; ClassData m_classdata; LangViewColumns m_langViewCols; void addLanguage(); void removeLanguage(); void langTableSelectionChanged(); void setDataLocations(int idx); void toggleAddLanguage(bool forceHide = false); static std::string spellingLocation(Location location); static std::string tessdataLocation(Location location); }; #endif // CONFIG_HH gImageReader-3.4.0/gtk/src/ConfigSettings.cc000066400000000000000000000047761417507262200206670ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ConfigSettings.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "Utils.hh" std::map ConfigSettings::s_settings; void ConfigSettings::add(AbstractSetting* setting) { s_settings.insert(std::make_pair(setting->key(), setting)); } void ConfigSettings::remove(const Glib::ustring& key) { auto it = s_settings.find(key); if(it != s_settings.end()) { s_settings.erase(it); } } Glib::RefPtr AbstractSetting::get_default_settings() { static Glib::RefPtr settings = Gio::Settings::create(APPLICATION_ID); return settings; } ListStoreSetting::ListStoreSetting(const Glib::ustring& key, Glib::RefPtr liststore) : AbstractSetting(key), m_liststore(liststore) { Glib::ustring str = get_default_settings()->get_string(m_key); m_liststore->clear(); std::size_t nCols = m_liststore->get_n_columns(); for(const Glib::ustring& row : Utils::string_split(str, ';', false)) { int colidx = 0; std::vector cols = Utils::string_split(row, ',', true); if(cols.size() != nCols) { continue; } Gtk::TreeModel::Row treerow = *(m_liststore->append()); for(const Glib::ustring& col : cols) { treerow.set_value(colidx++, col); } } } void ListStoreSetting::serialize() { // Serialized string has format a11,a12,a13;a21,a22,a23;... Glib::ustring str; int nCols = m_liststore->get_n_columns(); for(const Gtk::TreeModel::Row& row : m_liststore->children()) { for(int col = 0; col < nCols; ++col) { Glib::ustring field; row.get_value(col, field); str += field + (col == nCols - 1 ? ";" : ","); } } Glib::Variant v = Glib::Variant::create(str); get_default_settings()->set_value(m_key, v); m_signal_changed.emit(); } gImageReader-3.4.0/gtk/src/ConfigSettings.hh000066400000000000000000000136321417507262200206700ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ConfigSettings.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CONFIGSETTINGS_HH #define CONFIGSETTINGS_HH #include #include #include #include "common.hh" #include "FontComboBox.hh" class AbstractSetting; #define ADD_SETTING(...) m_classdata.addItem(new __VA_ARGS__) class ConfigSettings { public: template static T* get(const Glib::ustring& key) { auto it = s_settings.find(key); return it == s_settings.end() ? nullptr : static_cast(it->second); } private: friend class AbstractSetting; static std::map s_settings; static void add(AbstractSetting* setting); static void remove(const Glib::ustring& key); }; class AbstractSetting : public ClassDataItem { public: AbstractSetting(const Glib::ustring& key) : m_key(key) { ConfigSettings::add(this); } ~AbstractSetting() { ConfigSettings::remove(m_key); } const Glib::ustring& key() const { return m_key; } virtual void serialize() {} sigc::signal signal_changed() { return m_signal_changed; } protected: ClassData m_classdata; Glib::ustring m_key; sigc::signal m_signal_changed; static Glib::RefPtr get_default_settings(); }; template class VarSetting : public AbstractSetting { public: using AbstractSetting::AbstractSetting; T getValue() const { Glib::Variant v; get_default_settings()->get_value(m_key, v); return v.get(); } void setValue(const T& value) { get_default_settings()->set_value(m_key, Glib::Variant::create(value)); m_signal_changed.emit(); } }; class FontSetting : public AbstractSetting { public: FontSetting(const Glib::ustring& key, Gtk::FontButton* widget) : AbstractSetting(key), m_widget(widget) { m_widget->set_font_name(get_default_settings()->get_string(m_key)); CONNECTP(m_widget, font_name, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_string(m_key, m_widget->get_font_name()); m_signal_changed.emit(); } Glib::ustring getValue() const { return m_widget->get_font_name(); } private: Gtk::FontButton* m_widget; }; class SwitchSetting : public AbstractSetting { public: using AbstractSetting::AbstractSetting; virtual void setValue(bool value) = 0; virtual bool getValue() const = 0; }; template class SwitchSettingT : public SwitchSetting { public: SwitchSettingT(const Glib::ustring& key, T* widget) : SwitchSetting(key), m_widget(widget) { m_widget->set_active(get_default_settings()->get_boolean(m_key)); CONNECT(m_widget, toggled, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_boolean(m_key, m_widget->get_active()); m_signal_changed.emit(); } void setValue(bool value) override { m_widget->set_active(value); } bool getValue() const override { return m_widget->get_active(); } private: T* m_widget; }; class ComboSetting : public AbstractSetting { public: ComboSetting(const Glib::ustring& key, Gtk::ComboBox* widget) : AbstractSetting(key), m_widget(widget) { int idx = get_default_settings()->get_int(m_key); int nrows = m_widget->get_model()->children().size(); m_widget->set_active(std::min(std::max(0, idx), nrows - 1)); CONNECT(m_widget, changed, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_int(m_key, m_widget->get_active_row_number()); m_signal_changed.emit(); } int getValue() const { return m_widget->get_active_row_number(); } private: Gtk::ComboBox* m_widget; }; class FontComboSetting : public AbstractSetting { public: FontComboSetting(const Glib::ustring& key, FontComboBox* widget) : AbstractSetting(key), m_widget(widget) { Glib::ustring font = get_default_settings()->get_string(m_key); m_widget->set_active_font(font); CONNECT(m_widget, changed, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_string(m_key, m_widget->get_active_font()); m_signal_changed.emit(); } Glib::ustring getValue() const { return m_widget->get_active_font(); } private: FontComboBox* m_widget; }; class SpinSetting : public AbstractSetting { public: SpinSetting(const Glib::ustring& key, Gtk::SpinButton* widget) : AbstractSetting(key), m_widget(widget) { int value = get_default_settings()->get_int(m_key); m_widget->set_value(value); CONNECT(m_widget, value_changed, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_int(m_key, m_widget->get_value()); m_signal_changed.emit(); } private: Gtk::SpinButton* m_widget; }; class ListStoreSetting : public AbstractSetting { public: ListStoreSetting(const Glib::ustring& key, Glib::RefPtr liststore); void serialize() override; private: Glib::RefPtr m_liststore; }; class EntrySetting : public AbstractSetting { public: EntrySetting(const Glib::ustring& key, Gtk::Entry* entry) : AbstractSetting(key), m_entry(entry) { entry->set_text(get_default_settings()->get_string(m_key)); CONNECT(m_entry, changed, [this] { serialize(); }); } void serialize() override { get_default_settings()->set_string(m_key, m_entry->get_text()); m_signal_changed.emit(); } private: Gtk::Entry* m_entry; }; #endif // CONFIGSETTINGS_HH gImageReader-3.4.0/gtk/src/CrashHandler.cc000066400000000000000000000121031417507262200202560ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CrashHandler.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "CrashHandler.hh" #include "Utils.hh" CrashHandler::CrashHandler(int argc, char* argv[]) : Gtk::Application(argc, argv, APPLICATION_ID ".crashhandler", Gio::APPLICATION_HANDLES_COMMAND_LINE) { Glib::set_application_name(Glib::ustring::compose("%1 - %2", PACKAGE_NAME, _("Crash Handler"))); if(argc > 2) { m_pid = std::atoi(argv[2]); } if(argc > 3) { m_tesseractCrash = std::atoi(argv[3]); } if(argc > 4) { m_saveFile = argv[4]; } } void CrashHandler::on_startup() { Gtk::Application::on_startup(); ui.setupUi(); ui.dialogCrashhandler->set_title(Glib::ustring::compose("%1 %2", PACKAGE_NAME, _("Crash Handler"))); if(!m_saveFile.empty()) { ui.labelAutosave->set_markup(Glib::ustring::compose(_("Your work has been saved under %1."), m_saveFile)); } else { ui.labelAutosave->set_text(_("There was no unsaved work.")); } CONNECT(ui.dialogCrashhandler, delete_event, [this](GdkEventAny* /*ev*/) { quit(); return true; }); CONNECT(ui.buttonClose, clicked, [this] { quit(); }); CONNECT(ui.buttonRegenerate, clicked, [this] { generate_backtrace(); }); add_window(*ui.dialogCrashhandler); ui.dialogCrashhandler->show_all(); ui.labelIntro->set_visible(!m_tesseractCrash); ui.labelIntroTesseract->set_visible(m_tesseractCrash); #ifndef G_OS_WIN32 generate_backtrace(); #else ui.buttonRegenerate->hide(); ui.progressbar->hide(); #endif } void CrashHandler::generate_backtrace() { m_progressConnection = Glib::signal_timeout().connect([this] { return pulse_progress(); }, 200); ui.buttonRegenerate->set_sensitive(false); ui.textview->set_sensitive(false); ui.textview->get_buffer()->set_text(Glib::ustring::compose("%1 %2 (rev %3)\n\n", PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_REVISION)); ui.progressbar->show(); GPid child_pid; int child_stdin; int child_stdout; try { Glib::spawn_async_with_pipes("", std::vector {"gdb", "-q", "-p", Glib::ustring::compose("%1", m_pid)}, Glib::SPAWN_DO_NOT_REAP_CHILD | Glib::SPAWN_SEARCH_PATH | Glib::SPAWN_STDERR_TO_DEV_NULL, sigc::slot(), &child_pid, &child_stdin, &child_stdout); } catch(Glib::Error&) { generate_backtrace_end(false); return; } g_child_watch_add(child_pid, handle_child_exit, this); Glib::RefPtr ch_out = Glib::IOChannel::create_from_fd(child_stdout); Glib::RefPtr src_out = ch_out->create_watch(Glib::IO_IN | Glib::IO_HUP); src_out->connect([this, ch_out](Glib::IOCondition cond) { return handle_stdout(cond, ch_out); }); src_out->attach(Glib::MainContext::get_default()); Glib::RefPtr ch_in = Glib::IOChannel::create_from_fd(child_stdin); ch_in->write("set pagination off\n"); ch_in->write("bt\n"); ch_in->write("thread apply all bt full\n"); ch_in->write("quit\n"); } void CrashHandler::generate_backtrace_end(bool success) { m_progressConnection.disconnect(); ui.progressbar->hide(); ui.textview->set_sensitive(true); ui.buttonRegenerate->set_sensitive(true); if(!success) { ui.textview->get_buffer()->set_text(_("Failed to obtain backtrace. Is GDB installed?")); } else { std::vector lines = Utils::string_split(ui.textview->get_buffer()->get_text(false), '\n', false); Glib::ustring text = Glib::ustring::compose("%1\n\n", lines[0]); for(int i = 1, n = lines.size(); i < n; ++i) { if(lines[i].substr(0, 6) == "Thread") { text += Glib::ustring::compose("\n%1\n", lines[i]); } else if(lines[i].substr(0, 1) == "#") { text += Glib::ustring::compose("%1\n", lines[i]); } } ui.textview->get_buffer()->set_text(text); } auto begin = ui.textview->get_buffer()->begin(); ui.textview->scroll_to(begin); } bool CrashHandler::pulse_progress() { ui.progressbar->pulse(); return true; } bool CrashHandler::handle_stdout(Glib::IOCondition cond, Glib::RefPtr ch) { if(cond == Glib::IO_HUP) { return false; } Glib::ustring text; ch->read_line(text); ui.textview->get_buffer()->insert(ui.textview->get_buffer()->end(), text); auto end = ui.textview->get_buffer()->end(); ui.textview->scroll_to(end); return true; } void CrashHandler::handle_child_exit(GPid pid, gint status, void* data) { CrashHandler* instance = reinterpret_cast(data); bool success = g_spawn_check_exit_status(status, nullptr); instance->generate_backtrace_end(success); Glib::spawn_close_pid(pid); } gImageReader-3.4.0/gtk/src/CrashHandler.hh000066400000000000000000000026751417507262200203050ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CrashHandler.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CRASHHANDLER_HH #define CRASHHANDLER_HH #include "common.hh" #include "ui_CrashHandler.hh" class CrashHandler : public Gtk::Application { public: CrashHandler(int argc, char* argv[]); void on_startup(); private: Ui::CrashHandler ui; ClassData m_classdata; sigc::connection m_progressConnection; std::string m_saveFile; int m_pid = 0; int m_tesseractCrash = 0; void generate_backtrace(); void generate_backtrace_end(bool success); bool pulse_progress(); bool handle_stdout(Glib::IOCondition cond, Glib::RefPtr ch); static void handle_child_exit(GPid pid, gint status, void* data); }; #endif // CRASH_HANDLER_HH gImageReader-3.4.0/gtk/src/DisplayRenderer.cc000066400000000000000000000155561417507262200210330ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayRenderer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "DjVuDocument.hh" #include "DisplayRenderer.hh" #include "Utils.hh" #include #include void DisplayRenderer::adjustImage(const Cairo::RefPtr& surf, int brightness, int contrast, bool invert) const { if(brightness == 0 && contrast == 0 && !invert) { return; } float kBr = 1.f - std::abs(brightness / 200.f); float dBr = brightness > 0 ? 255.f : 0.f; float kCn = contrast * 2.55f; // http://thecryptmag.com/Online/56/imgproc_5.html float FCn = (259.f * (kCn + 255.f)) / (255.f * (259.f - kCn)); int n = surf->get_height() * surf->get_width(); uint8_t* data = surf->get_data(); #pragma omp parallel for schedule(static) for(int i = 0; i < n; ++i) { uint8_t& r = data[4 * i + 2]; uint8_t& g = data[4 * i + 1]; uint8_t& b = data[4 * i + 0]; // Brightness r = dBr * (1.f - kBr) + r * kBr; g = dBr * (1.f - kBr) + g * kBr; b = dBr * (1.f - kBr) + b * kBr; // Contrast r = std::max(0.f, std::min(FCn * (r - 128.f) + 128.f, 255.f)); g = std::max(0.f, std::min(FCn * (g - 128.f) + 128.f, 255.f)); b = std::max(0.f, std::min(FCn * (b - 128.f) + 128.f, 255.f)); // Invert if(invert) { r = 255 - r; g = 255 - g; b = 255 - b; } } } Cairo::RefPtr ImageRenderer::render(int /*page*/, double resolution) const { Glib::RefPtr pixbuf; try { pixbuf = Gdk::Pixbuf::create_from_file(m_filename); } catch(const Glib::Error&) { return Cairo::RefPtr(); } double scale = resolution / 100.; int w = Utils::round(pixbuf->get_width() * scale); int h = Utils::round(pixbuf->get_height() * scale); Cairo::RefPtr surf; try { surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, w, h); } catch(const std::exception&) { return Cairo::RefPtr(); } Cairo::RefPtr ctx = Cairo::Context::create(surf); if(pixbuf->get_has_alpha()) { ctx->set_source_rgba(1., 1., 1., 1.); ctx->paint(); } ctx->scale(scale, scale); try { Gdk::Cairo::set_source_pixbuf(ctx, pixbuf); } catch(const std::exception&) { return Cairo::RefPtr(); } ctx->paint(); return surf; } Cairo::RefPtr ImageRenderer::renderThumbnail(int /*page*/) const { Glib::RefPtr pixbuf; try { pixbuf = Gdk::Pixbuf::create_from_file(m_filename); } catch(const Glib::Error&) { return Cairo::RefPtr(); } double scale = pixbuf->get_width() > pixbuf->get_height() ? (64. / pixbuf->get_width()) : (64. / pixbuf->get_height()); int w = Utils::round(pixbuf->get_width() * scale); int h = Utils::round(pixbuf->get_height() * scale); Cairo::RefPtr surf; try { surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, w, h); } catch(const std::exception&) { return Cairo::RefPtr(); } Cairo::RefPtr ctx = Cairo::Context::create(surf); if(pixbuf->get_has_alpha()) { ctx->set_source_rgba(1., 1., 1., 1.); ctx->paint(); } ctx->scale(scale, scale); try { Gdk::Cairo::set_source_pixbuf(ctx, pixbuf); } catch(const std::exception&) { return Cairo::RefPtr(); } ctx->paint(); return surf; } PDFRenderer::PDFRenderer(const std::string& filename, const Glib::ustring& password) : DisplayRenderer(filename) { m_document = poppler_document_new_from_file(Glib::filename_to_uri(m_filename).c_str(), password.c_str(), 0); } PDFRenderer::~PDFRenderer() { if(m_document) { g_object_unref(m_document); } } Cairo::RefPtr PDFRenderer::render(int page, double resolution) const { if(!m_document) { return Cairo::RefPtr(); } m_mutex.lock(); double scale = resolution / 72; PopplerPage* poppage = poppler_document_get_page(m_document, page - 1); double width, height; poppler_page_get_size(poppage, &width, &height); int w = Utils::round(width * scale); int h = Utils::round(height * scale); Cairo::RefPtr surf; try { surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, w, h); } catch(const std::exception&) { m_mutex.unlock(); return Cairo::RefPtr(); } Cairo::RefPtr ctx = Cairo::Context::create(surf); ctx->set_source_rgba(1., 1., 1., 1.); ctx->paint(); ctx->scale(scale, scale); poppler_page_render(poppage, ctx->cobj()); g_object_unref(poppage); m_mutex.unlock(); return surf; } Cairo::RefPtr PDFRenderer::renderThumbnail(int page) const { if(!m_document) { return Cairo::RefPtr(); } m_mutex.lock(); PopplerPage* poppage = poppler_document_get_page(m_document, page - 1); double width, height; poppler_page_get_size(poppage, &width, &height); double resolution = 64. * 72. / std::max(width, height); double scale = resolution / 72; int w = Utils::round(width * scale); int h = Utils::round(height * scale); Cairo::RefPtr surf; try { surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, w, h); } catch(const std::exception&) { m_mutex.unlock(); return Cairo::RefPtr(); } Cairo::RefPtr ctx = Cairo::Context::create(surf); ctx->set_source_rgba(1., 1., 1., 1.); ctx->paint(); ctx->scale(scale, scale); poppler_page_render(poppage, ctx->cobj()); g_object_unref(poppage); m_mutex.unlock(); return surf; } int PDFRenderer::getNPages() const { return m_document ? poppler_document_get_n_pages(m_document) : 1; } DJVURenderer::DJVURenderer(const std::string& filename) : DisplayRenderer(filename) { m_djvu = new DjVuDocument(); m_djvu->openFile(filename); } DJVURenderer::~DJVURenderer() { delete m_djvu; } Cairo::RefPtr DJVURenderer::render(int page, double resolution) const { return m_djvu->image(page, resolution); } Cairo::RefPtr DJVURenderer::renderThumbnail(int pageno) const { const DjVuDocument::Page& page = m_djvu->page(pageno); double resolution = 64. / std::max(page.width, page.height) * page.dpi; return m_djvu->image(pageno, resolution); } int DJVURenderer::getNPages() const { return m_djvu->pageCount(); } gImageReader-3.4.0/gtk/src/DisplayRenderer.hh000066400000000000000000000051101417507262200210260ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayRenderer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYRENDERER_HH #define DISPLAYRENDERER_HH #include "common.hh" #include typedef struct _PopplerDocument PopplerDocument; class DjVuDocument; class DisplayRenderer { public: DisplayRenderer(const std::string& filename) : m_filename(filename) {} virtual ~DisplayRenderer() {} virtual Cairo::RefPtr render(int page, double resolution) const = 0; virtual Cairo::RefPtr renderThumbnail(int page) const = 0; virtual int getNPages() const = 0; void adjustImage(const Cairo::RefPtr& surf, int brightness, int contrast, bool invert) const; protected: std::string m_filename; }; class ImageRenderer : public DisplayRenderer { public: ImageRenderer(const std::string& filename) : DisplayRenderer(filename) {} Cairo::RefPtr render(int page, double resolution) const override; Cairo::RefPtr renderThumbnail(int page) const override; int getNPages() const override { return 1; } }; class PDFRenderer : public DisplayRenderer { public: PDFRenderer(const std::string& filename, const Glib::ustring& password); ~PDFRenderer(); Cairo::RefPtr render(int page, double resolution) const override; Cairo::RefPtr renderThumbnail(int page) const override; int getNPages() const override; private: PopplerDocument* m_document; mutable std::mutex m_mutex; }; class DJVURenderer : public DisplayRenderer { public: DJVURenderer(const std::string& filename); ~DJVURenderer(); Cairo::RefPtr render(int page, double resolution) const override; Cairo::RefPtr renderThumbnail(int pageno) const override; int getNPages() const override; private: DjVuDocument* m_djvu; }; #endif // IMAGERENDERER_HH gImageReader-3.4.0/gtk/src/Displayer.cc000066400000000000000000001061651417507262200176700ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Displayer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "MainWindow.hh" #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayRenderer.hh" #include "Recognizer.hh" #include "SourceManager.hh" #include "Utils.hh" #include "FileDialogs.hh" #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE Displayer::Displayer(const Ui::MainWindow& _ui) : ui(_ui), m_scaleThreadCanceled(false), m_scaleThreadIdleJobsCount(0), m_thumbThreadCanceled(false), m_thumbThreadIdleJobsCount(0) { m_defaultCursor = Gdk::Cursor::create(Gdk::ARROW); m_hadj = ui.scrollwinDisplay->get_hadjustment(); m_vadj = ui.scrollwinDisplay->get_vadjustment(); m_rotateMode = RotateMode::AllPages; ui.spinPage->set_icon_from_pixbuf(Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/page.png")); ui.spinResolution->set_icon_from_pixbuf(Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/resolution.png")); ui.spinBrightness->set_icon_from_pixbuf(Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/brightness.png")); ui.spinContrast->set_icon_from_pixbuf(Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/contrast.png")); ui.scrollwinDisplay->drag_dest_set({Gtk::TargetEntry("text/uri-list")}, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP, Gdk::ACTION_COPY | Gdk::ACTION_MOVE); ui.viewportDisplay->override_background_color(Gdk::RGBA("#a0a0a4")); CONNECT(ui.menuitemDisplayRotateCurrent, activate, [this] { setRotateMode(RotateMode::CurrentPage, "rotate_page.png"); }); CONNECT(ui.menuitemDisplayRotateAll, activate, [this] { setRotateMode(RotateMode::AllPages, "rotate_pages.png"); }); CONNECT(ui.checkBoxThumbnails, toggled, [this] { thumbnailsToggled(); }); m_connection_rotSpinChanged = CONNECT(ui.spinRotate, value_changed, [this] { setAngle(ui.spinRotate->get_value()); }); m_connection_pageSpinChanged = CONNECT(ui.spinPage, value_changed, [this] { queueRenderImage(); }); m_connection_briSpinChanged = CONNECT(ui.spinBrightness, value_changed, [this] { queueRenderImage(); }); m_connection_conSpinChanged = CONNECT(ui.spinContrast, value_changed, [this] { queueRenderImage(); }); m_connection_resSpinChanged = CONNECT(ui.spinResolution, value_changed, [this] { queueRenderImage(); }); m_connection_invcheckToggled = CONNECT(ui.checkInvert, toggled, [this] { queueRenderImage(); }); CONNECT(ui.viewportDisplay, size_allocate, [this](Gdk::Rectangle&) { resizeEvent(); }); CONNECT(ui.viewportDisplay, key_press_event, [this](GdkEventKey * ev) { return keyPressEvent(ev); }); CONNECT(ui.viewportDisplay, motion_notify_event, [this](GdkEventMotion * ev) { return mouseMoveEvent(ev); }); CONNECT(ui.viewportDisplay, button_press_event, [this](GdkEventButton * ev) { return mousePressEvent(ev); }); CONNECT(ui.viewportDisplay, button_release_event, [this](GdkEventButton * ev) { return mouseReleaseEvent(ev); }); CONNECT(ui.viewportDisplay, scroll_event, [this](GdkEventScroll * ev) { return scrollEvent(ev); }); CONNECT(ui.drawingareaDisplay, draw, [this](const Cairo::RefPtr& ctx) { drawCanvas(ctx); return false; }); CONNECT(ui.buttonZoomin, clicked, [this] { setZoom(Zoom::In); }); CONNECT(ui.buttonZoomout, clicked, [this] { setZoom(Zoom::Out); }); m_connection_zoomfitClicked = CONNECT(ui.buttonZoomfit, clicked, [this] { setZoom(Zoom::Fit); }); m_connection_zoomoneClicked = CONNECT(ui.buttonZoomnorm, clicked, [this] { setZoom(Zoom::One); }); CONNECT(ui.spinRotate, icon_press, [this](Gtk::EntryIconPosition pos, const GdkEventButton*) { setAngle(ui.spinRotate->get_value() + (pos == Gtk::ENTRY_ICON_PRIMARY ? -90 : 90)); }); CONNECT(ui.windowMain->get_style_context(), changed, [this] { ui.drawingareaDisplay->queue_draw(); }); CONNECT(ui.scrollwinDisplay, drag_data_received, sigc::ptr_fun(Utils::handle_drag_drop)); m_connection_thumbClicked = CONNECT(ui.iconviewThumbnails, selection_changed, [this] { if(ui.checkBoxThumbnails->get_active() && !ui.iconviewThumbnails->get_selected_items().empty()) { ui.spinPage->set_value(1 + ui.iconviewThumbnails->get_selected_items().front().front()); } }); CONNECT(ui.spinPage, value_changed, [this] { m_connection_thumbClicked.block(true); Gtk::TreePath path(1u, ui.spinPage->get_value_as_int() - 1); ui.iconviewThumbnails->select_path(path); ui.iconviewThumbnails->scroll_to_path(path, false, 0., 0.); m_connection_thumbClicked.block(false); }); ADD_SETTING(SwitchSettingT("thumbnails", ui.checkBoxThumbnails)); // Adjust paned position as soon as window is visible Glib::signal_idle().connect_once([this] { thumbnailsToggled(); }); } void Displayer::drawCanvas(const Cairo::RefPtr& ctx) { if(!m_imageItem) { return; } Gtk::Allocation alloc = ui.drawingareaDisplay->get_allocation(); ctx->translate(Utils::round(0.5 * alloc.get_width()), Utils::round(0.5 * alloc.get_height())); ctx->scale(m_scale, m_scale); m_imageItem->draw(ctx); for(const DisplayerItem* item : m_items) { if(item->visible()) { item->draw(ctx); } } } void Displayer::positionCanvas() { Geometry::Rectangle bb = getSceneBoundingRect(); ui.drawingareaDisplay->set_size_request(Utils::round(bb.width * m_scale), Utils::round(bb.height * m_scale)); // Immediately resize viewport, so that adjustment values are correct below ui.viewportDisplay->size_allocate(ui.viewportDisplay->get_allocation()); ui.viewportDisplay->set_allocation(ui.viewportDisplay->get_allocation()); m_hadj->set_value(m_scrollPos[0] * (m_hadj->get_upper() - m_hadj->get_page_size())); m_vadj->set_value(m_scrollPos[1] * (m_vadj->get_upper() - m_vadj->get_page_size())); ui.drawingareaDisplay->queue_draw(); } int Displayer::getCurrentPage() const { return ui.spinPage->get_value_as_int(); } int Displayer::getCurrentResolution() const { return ui.spinResolution->get_value_as_int(); } double Displayer::getCurrentAngle() const { return ui.spinRotate->get_value(); } std::string Displayer::getCurrentImage(int& page) const { auto it = m_pageMap.find(ui.spinPage->get_value_as_int()); if(it != m_pageMap.end()) { page = it->second.second; return it->second.first->file->get_path(); } return ""; } int Displayer::getNPages() const { double min, max; ui.spinPage->get_range(min, max); return int(max); } bool Displayer::setSources(std::vector sources) { if(sources == m_sources) { return true; } waitForThread(m_scaleThread, m_scaleThreadCanceled, m_scaleThreadIdleJobsCount, &m_scaleTimer); waitForThread(m_thumbThread, m_thumbThreadCanceled, m_thumbThreadIdleJobsCount); m_scale = 1.0; m_scrollPos[0] = m_scrollPos[1] = 0.5; ui.iconviewThumbnails->set_model(Gtk::ListStore::create(m_thumbListViewCols)); ui.iconviewThumbnails->set_pixbuf_column(0); ui.iconviewThumbnails->set_text_column(1); if(m_tool) { m_tool->reset(); } m_renderTimer.disconnect(); delete m_imageItem; m_imageItem = nullptr; m_image.clear(); m_currentSource = nullptr; std::for_each(m_sourceRenderers.begin(), m_sourceRenderers.end(), [](auto pair) { delete pair.second; }); m_sourceRenderers.clear(); m_sources.clear(); m_pageMap.clear(); ui.drawingareaDisplay->hide(); ui.spinPage->hide(); m_connection_pageSpinChanged.block(true); ui.spinPage->set_range(1, 1); m_connection_pageSpinChanged.block(false); Utils::set_spin_blocked(ui.spinRotate, 0, m_connection_rotSpinChanged); Utils::set_spin_blocked(ui.spinBrightness, 0, m_connection_briSpinChanged); Utils::set_spin_blocked(ui.spinContrast, 0, m_connection_conSpinChanged); Utils::set_spin_blocked(ui.spinResolution, 100, m_connection_resSpinChanged); m_connection_invcheckToggled.block(true); ui.checkInvert->set_active(false); m_connection_invcheckToggled.block(false); ui.buttonZoomfit->set_active(true); ui.buttonZoomnorm->set_active(false); ui.buttonZoomin->set_sensitive(true); ui.buttonZoomout->set_sensitive(true); if(ui.viewportDisplay->get_window()) { ui.viewportDisplay->get_window()->set_cursor(); } m_sources = sources; if(sources.empty()) { m_signalImageChanged.emit(); return false; } int page = 0; for(Source* source : m_sources) { DisplayRenderer* renderer = nullptr; std::string filename = source->file->get_path(); #ifdef G_OS_WIN32 if(Glib::ustring(filename.substr(filename.length() - 4)).lowercase() == ".pdf") { #else if(Utils::get_content_type(filename) == "application/pdf") { #endif renderer = new PDFRenderer(filename, source->password); if(source->resolution == -1) { source->resolution = 300; } #ifdef G_OS_WIN32 } else if(Glib::ustring(filename.substr(filename.length() - 4)).lowercase() == ".djvu") { #else } else if(Utils::get_content_type(filename) == "image/vnd.djvu") { #endif renderer = new DJVURenderer(filename); if(source->resolution == -1) { source->resolution = 300; } } else { renderer = new ImageRenderer(filename); if(source->resolution == -1) { source->resolution = 100; } } if(renderer->getNPages() >= 0) { source->angle.resize(renderer->getNPages(), 0.); // getNPages can potentially return -1 } m_sourceRenderers[source] = renderer; for(int iPage = 1, nPages = renderer->getNPages(); iPage <= nPages; ++iPage) { m_pageMap.insert(std::make_pair(++page, std::make_pair(source, iPage))); } } if(page == 0) { return setSources(std::vector()); // cleanup } generateThumbnails(); m_connection_pageSpinChanged.block(); ui.spinPage->get_adjustment()->set_upper(page); m_connection_pageSpinChanged.unblock(); ui.spinPage->set_visible(page > 1); ui.viewportDisplay->get_window()->set_cursor(m_defaultCursor); ui.drawingareaDisplay->show(); m_imageItem = new DisplayerImageItem; if(!renderImage()) { g_assert_nonnull(m_currentSource); Utils::messageBox(Gtk::MESSAGE_ERROR, _("Failed to load image"), Glib::ustring::compose(_("The file might not be an image or be corrupt:\n%1"), m_currentSource->displayname)); setSources(std::vector()); return false; } return true; } bool Displayer::setup(const int* page, const int* resolution, const double* angle) { bool changed = false; if(page) { changed |= *page != ui.spinPage->get_value_as_int(); Utils::set_spin_blocked(ui.spinPage, *page, m_connection_pageSpinChanged); m_connection_thumbClicked.block(); Gtk::TreePath path(1u, ui.spinPage->get_value_as_int() - 1); ui.iconviewThumbnails->select_path(path); ui.iconviewThumbnails->scroll_to_path(path, false, 0., 0.); m_connection_thumbClicked.unblock(); } if(resolution) { changed |= *resolution != ui.spinResolution->get_value(); Utils::set_spin_blocked(ui.spinResolution, *resolution, m_connection_resSpinChanged); } if(changed && !renderImage()) { return false; } if(angle && std::abs(*angle - ui.spinRotate->get_value()) > 1E-2) { setAngle(*angle); } return true; } void Displayer::queueRenderImage() { m_renderTimer.disconnect(); m_renderTimer = Glib::signal_timeout().connect([this] { renderImage(); return false; }, 200); } bool Displayer::renderImage() { if(m_sources.empty()) { return false; } waitForThread(m_scaleThread, m_scaleThreadCanceled, m_scaleThreadIdleJobsCount, &m_scaleTimer); int page = ui.spinPage->get_value_as_int(); // Set current source according to selected page Source* source = m_pageMap[page].first; if(!source) { return false; } int oldResolution = m_currentSource ? m_currentSource->resolution : -1; int oldPage = m_currentSource ? m_currentSource->page : -1; Source* oldSource = m_currentSource; if(source != m_currentSource) { Utils::set_spin_blocked(ui.spinBrightness, source->brightness, m_connection_briSpinChanged); Utils::set_spin_blocked(ui.spinContrast, source->contrast, m_connection_conSpinChanged); Utils::set_spin_blocked(ui.spinResolution, source->resolution, m_connection_resSpinChanged); m_connection_invcheckToggled.block(true); ui.checkInvert->set_active(source->invert); m_connection_invcheckToggled.block(false); m_currentSource = source; } // Update source struct m_currentSource->page = m_pageMap[ui.spinPage->get_value_as_int()].second; m_currentSource->brightness = ui.spinBrightness->get_value_as_int(); m_currentSource->contrast = ui.spinContrast->get_value_as_int(); m_currentSource->resolution = ui.spinResolution->get_value_as_int(); m_currentSource->invert = ui.checkInvert->get_active(); // Notify tools about changes if(m_tool) { if(m_currentSource != oldSource || m_currentSource->page != oldPage) { m_tool->pageChanged(); m_signalImageChanged.emit(); } if(oldResolution != m_currentSource->resolution) { double factor = double(m_currentSource->resolution) / double(oldResolution); m_tool->resolutionChanged(factor); } } Utils::set_spin_blocked(ui.spinRotate, m_currentSource->angle[m_currentSource->page - 1], m_connection_rotSpinChanged); // Render new image DisplayRenderer* renderer = m_sourceRenderers[m_currentSource]; if(!renderer) { return false; } Cairo::RefPtr image = renderer->render(m_currentSource->page, m_currentSource->resolution); if(!bool(image)) { return false; } renderer->adjustImage(image, m_currentSource->brightness, m_currentSource->contrast, m_currentSource->invert); m_image = image; m_imageItem->setImage(m_image); m_imageItem->setRect(Geometry::Rectangle(-0.5 * m_image->get_width(), -0.5 * m_image->get_height(), m_image->get_width(), m_image->get_height())); setAngle(ui.spinRotate->get_value()); if(m_scale < 1.0) { m_scaleTimer = Glib::signal_timeout().connect([this] { scaleImage(); return false; }, 100); } return true; } void Displayer::setZoom(Zoom zoom) { if(!m_image) { return; } waitForThread(m_scaleThread, m_scaleThreadCanceled, m_scaleThreadIdleJobsCount, &m_scaleTimer); m_connection_zoomfitClicked.block(true); m_connection_zoomoneClicked.block(true); Gtk::Allocation alloc = ui.viewportDisplay->get_allocation(); Geometry::Rectangle bb = getSceneBoundingRect(); double fit = std::min(alloc.get_width() / bb.width, alloc.get_height() / bb.height); if(zoom == Zoom::In) { m_scale = std::min(10., m_scale * 1.25); } else if(zoom == Zoom::Out) { m_scale = std::max(0.05, m_scale * 0.8); } else if(zoom == Zoom::One) { m_scale = 1.0; } ui.buttonZoomfit->set_active(false); if(zoom == Zoom::Fit || (m_scale / fit >= 0.9 && m_scale / fit <= 1.09)) { m_scale = fit; ui.buttonZoomfit->set_active(true); } bool scrollVisible = m_scale > fit; ui.scrollwinDisplay->get_hscrollbar()->set_visible(scrollVisible); ui.scrollwinDisplay->get_vscrollbar()->set_visible(scrollVisible); ui.buttonZoomout->set_sensitive(m_scale > 0.05); ui.buttonZoomin->set_sensitive(m_scale < 10.); ui.buttonZoomnorm->set_active(m_scale == 1.); if(m_scale < 1.0) { m_scaleTimer = Glib::signal_timeout().connect([this] { scaleImage(); return false; }, 100); } else { m_imageItem->setImage(m_image); } positionCanvas(); m_connection_zoomfitClicked.block(false); m_connection_zoomoneClicked.block(false); } void Displayer::setRotateMode(RotateMode mode, const std::string& iconName) { m_rotateMode = mode; ui.imageRotateMode->set(Gdk::Pixbuf::create_from_resource(Glib::ustring::compose("/org/gnome/gimagereader/%1", iconName))); } void Displayer::setAngle(double angle) { if(m_image) { angle = angle < 0 ? angle + 360. : angle >= 360 ? angle - 360 : angle, Utils::set_spin_blocked(ui.spinRotate, angle, m_connection_rotSpinChanged); int sourcePage = m_pageMap[getCurrentPage()].second; double delta = angle - m_currentSource->angle[sourcePage - 1]; if(m_rotateMode == RotateMode::CurrentPage) { m_currentSource->angle[sourcePage - 1] = angle; } else if(delta != 0) { for(const auto& keyval : m_pageMap) { auto pair = keyval.second; double newangle = pair.first->angle[pair.second - 1] + delta; newangle = newangle < 0.0 ? newangle + 360.0 : newangle >= 360.0 ? newangle - 360.0 : newangle, pair.first->angle[pair.second - 1] = newangle; } } m_imageItem->setRotation(angle * M_PI / 180); if(m_tool && delta != 0) { m_tool->rotationChanged(delta); } if(ui.buttonZoomfit->get_active() == true) { setZoom(Zoom::Fit); } else { positionCanvas(); } } } bool Displayer::resolvePage(int page, std::string& source, int& sourcePage) const { auto it = m_pageMap.find(page); if(it == m_pageMap.end()) { return false; } source = it->second.first->file->get_path(); sourcePage = it->second.second; return true; } bool Displayer::hasMultipleOCRAreas() { return m_tool->hasMultipleOCRAreas(); } std::vector> Displayer::getOCRAreas() { return m_tool->getOCRAreas(); } bool Displayer::allowAutodetectOCRAreas() const { return m_tool->allowAutodetectOCRAreas(); } void Displayer::autodetectOCRAreas() { m_tool->autodetectOCRAreas(); } void Displayer::setDefaultCursor(Glib::RefPtr cursor) { m_defaultCursor = cursor; setCursor(m_defaultCursor); } void Displayer::setCursor(Glib::RefPtr cursor) { if(cursor) { if(m_imageItem && ui.viewportDisplay->get_window()) { ui.viewportDisplay->get_window()->set_cursor(cursor); } } else { if(m_imageItem && ui.viewportDisplay->get_window()) { ui.viewportDisplay->get_window()->set_cursor(m_defaultCursor); } } } void Displayer::resizeEvent() { if(ui.buttonZoomfit->get_active() == true) { setZoom(Zoom::Fit); } } bool Displayer::mousePressEvent(GdkEventButton* ev) { ui.viewportDisplay->grab_focus(); if(ev->button == 2) { m_panPos[0] = ev->x_root; m_panPos[1] = ev->y_root; return true; } Geometry::Point scenePos = mapToSceneClamped(Geometry::Point(ev->x, ev->y)); for(DisplayerItem* item : Utils::reverse(m_items)) { if(item->rect().contains(scenePos)) { m_activeItem = item; break; } } if(m_activeItem && m_activeItem->mousePressEvent(ev)) { return true; } if(m_tool && m_currentSource) { return m_tool->mousePressEvent(ev); } return false; } bool Displayer::keyPressEvent(GdkEventKey* ev) { if(ev->keyval == GDK_KEY_Page_Up) { ui.spinPage->set_value(ui.spinPage->get_value_as_int() - 1); return true; } else if(ev->keyval == GDK_KEY_Page_Down) { ui.spinPage->set_value(ui.spinPage->get_value_as_int() + 1); return true; } else { return false; } } bool Displayer::mouseMoveEvent(GdkEventMotion* ev) { if(ev->state & Gdk::BUTTON2_MASK) { double dx = m_panPos[0] - ev->x_root; double dy = m_panPos[1] - ev->y_root; m_hadj->set_value(m_hadj->get_value() + dx); m_vadj->set_value(m_vadj->get_value() + dy); m_panPos[0] = ev->x_root; m_panPos[1] = ev->y_root; return true; } if(m_activeItem && m_activeItem->mouseMoveEvent(ev)) { return true; } bool overItem = false; Geometry::Point scenePos = mapToSceneClamped(Geometry::Point(ev->x, ev->y)); for(DisplayerItem* item : Utils::reverse(m_items)) { if(item->rect().contains(scenePos)) { overItem = true; if(item->mouseMoveEvent(ev)) { return true; } break; } } if(!overItem) { setCursor(Glib::RefPtr(0)); } if(m_tool && m_currentSource) { return m_tool->mouseMoveEvent(ev); } return false; } bool Displayer::mouseReleaseEvent(GdkEventButton* ev) { if(m_activeItem) { bool accepted = m_activeItem->mouseReleaseEvent(ev); m_activeItem = nullptr; if(accepted) { return true; } } if(m_tool && m_currentSource) { return m_tool->mouseReleaseEvent(ev); } return false; } bool Displayer::scrollEvent(GdkEventScroll* ev) { if((ev->state & Gdk::CONTROL_MASK) != 0) { if((ev->direction == GDK_SCROLL_UP || (ev->direction == GDK_SCROLL_SMOOTH && ev->delta_y < 0)) && m_scale * 1.25 < 10) { Gtk::Allocation alloc = ui.drawingareaDisplay->get_allocation(); m_scrollPos[0] = std::max(0., std::min((ev->x + m_hadj->get_value() - alloc.get_x()) / alloc.get_width(), 1.0)); m_scrollPos[1] = std::max(0., std::min((ev->y + m_vadj->get_value() - alloc.get_y()) / alloc.get_height(), 1.0)); setZoom(Zoom::In); } else if((ev->direction == GDK_SCROLL_DOWN || (ev->direction == GDK_SCROLL_SMOOTH && ev->delta_y > 0)) && m_scale * 0.8 > 0.05) { setZoom(Zoom::Out); } return true; } else if((ev->state & Gdk::SHIFT_MASK) != 0) { if(ev->direction == GDK_SCROLL_UP || (ev->direction == GDK_SCROLL_SMOOTH && ev->delta_y < 0)) { m_hadj->set_value(m_hadj->get_value() - m_hadj->get_step_increment()); } else if(ev->direction == GDK_SCROLL_DOWN || (ev->direction == GDK_SCROLL_SMOOTH && ev->delta_y > 0)) { m_hadj->set_value(m_hadj->get_value() + m_hadj->get_step_increment()); } return true; } return false; } std::pair Displayer::getPointVisible(const Geometry::Point& p) const { // 0 means visible, -1 means to the left/top of visible area, +1 means to the right/bottom of visible area int vx = 0; int vy = 0; double margin = 30.; // 30px margin if(p.x - margin < m_hadj->get_value()) { vx = -1; } else if(p.x + 30. > m_hadj->get_value() + m_hadj->get_page_size()) { vx = +1; } if(p.y - margin < m_vadj->get_value()) { vy = -1; } else if(p.y + margin > m_vadj->get_value() + m_vadj->get_page_size()) { vy = +1; } return std::make_pair(vx, vy); } void Displayer::ensureVisible(double evx, double evy) { double margin = 30.; // 30px margin if(evx - margin < m_hadj->get_value()) { m_hadj->set_value(std::max(0., evx - margin)); } else if(evx + 30. > m_hadj->get_value() + m_hadj->get_page_size()) { m_hadj->set_value(std::min(m_hadj->get_upper(), evx + 30.) - m_hadj->get_page_size()); } if(evy - margin < m_vadj->get_value()) { m_vadj->set_value(std::max(0., evy - margin)); } else if(evy + margin > m_vadj->get_value() + m_vadj->get_page_size()) { m_vadj->set_value(std::min(m_vadj->get_upper(), evy + margin) - m_vadj->get_page_size()); } } void Displayer::ensureVisible(const Geometry::Rectangle& rect) { Geometry::Point p1 = mapToView(Geometry::Point(rect.x, rect.y)); Geometry::Point p2 = mapToView(Geometry::Point(rect.x + rect.width, rect.y + rect.height)); std::pair vis1 = getPointVisible(p1); std::pair vis2 = getPointVisible(p2); if(vis1.first == 0 && vis1.second == 0 && vis2.first == 0 && vis2.second == 0) { // Both points visible, do nothing return; } double ox = m_hadj->get_value() + 0.5 * (m_hadj->get_page_size() - (p2.x - p1.x)) - p1.x; double oy = m_vadj->get_value() + 0.5 * (m_vadj->get_page_size() - (p2.y - p1.y)) - p1.y; m_hadj->set_value(std::min(std::max(0., m_hadj->get_value() - ox), m_hadj->get_upper() - m_hadj->get_page_size())); m_vadj->set_value(std::min(std::max(0., m_vadj->get_value() - oy), m_vadj->get_upper() - m_vadj->get_page_size())); } void Displayer::addItem(DisplayerItem* item) { if(!m_items.empty()) { item->setZIndex(m_items.back()->zIndex() + 1); } m_items.push_back(item); item->m_displayer = this; invalidateRect(item->rect()); } void Displayer::removeItem(DisplayerItem* item) { if(item == m_activeItem) { m_activeItem = nullptr; } m_items.erase(std::remove(m_items.begin(), m_items.end(), item), m_items.end()); item->m_displayer = nullptr; invalidateRect(item->rect()); } void Displayer::invalidateRect(const Geometry::Rectangle& rect) { Gtk::Allocation alloc = ui.drawingareaDisplay->get_allocation(); Geometry::Rectangle canvasRect = rect; canvasRect.x = (canvasRect.x * m_scale + 0.5 * alloc.get_width()) - 2; canvasRect.y = (canvasRect.y * m_scale + 0.5 * alloc.get_height()) - 2; canvasRect.width = canvasRect.width * m_scale + 4; canvasRect.height = canvasRect.height * m_scale + 4; ui.drawingareaDisplay->queue_draw_area(canvasRect.x, canvasRect.y, canvasRect.width, canvasRect.height); } void Displayer::resortItems() { std::sort(m_items.begin(), m_items.end(), DisplayerItem::zIndexCmp); } Geometry::Rectangle Displayer::getSceneBoundingRect() const { if(!m_image) { return Geometry::Rectangle(); } int w = m_image->get_width(); int h = m_image->get_height(); Geometry::Rotation R(ui.spinRotate->get_value() / 180. * M_PI); int width = std::abs(R(0, 0) * w) + std::abs(R(0, 1) * h); int height = std::abs(R(1, 0) * w) + std::abs(R(1, 1) * h); return Geometry::Rectangle(-0.5 * width, -0.5 * height, width, height); } Geometry::Point Displayer::mapToSceneClamped(const Geometry::Point& p) const { // Selection coordinates are with respect to the center of the image in unscaled (but rotated) coordinates Gtk::Allocation alloc = ui.drawingareaDisplay->get_allocation(); double x = (std::max(0., std::min(p.x - alloc.get_x(), double(alloc.get_width()))) - 0.5 * alloc.get_width()) / m_scale; double y = (std::max(0., std::min(p.y - alloc.get_y(), double(alloc.get_height()))) - 0.5 * alloc.get_height()) / m_scale; return Geometry::Point(x, y); } Geometry::Point Displayer::mapToView(const Geometry::Point& p) const { Gtk::Allocation alloc = ui.drawingareaDisplay->get_allocation(); return Geometry::Point(alloc.get_x() + 0.5 * alloc.get_width() + p.x * m_scale, alloc.get_y() + 0.5 * alloc.get_height() + p.y * m_scale); } Cairo::RefPtr Displayer::getImage(const Geometry::Rectangle& rect) const { Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, std::ceil(rect.width), std::ceil(rect.height)); Cairo::RefPtr ctx = Cairo::Context::create(surf); ctx->set_source_rgba(1., 1., 1., 1.); ctx->paint(); ctx->translate(-rect.x, -rect.y); ctx->rotate(ui.spinRotate->get_value() / 180. * M_PI); ctx->translate(-0.5 * m_image->get_width(), -0.5 * m_image->get_height()); ctx->set_source(m_image, 0, 0); ctx->paint(); return surf; } void Displayer::setBlockAutoscale(bool block) { m_autoScaleBlocked = block; if(!block) { m_scaleTimer = Glib::signal_timeout().connect([this] { scaleImage(); return false; }, 100); } } void Displayer::scaleImage() { if(m_autoScaleBlocked) { return; } int page = m_currentSource->page; double resolution = m_scale * m_currentSource->resolution; int brightness = m_currentSource->brightness; int contrast = m_currentSource->contrast; bool invert = m_currentSource->invert; m_scaleThread = new std::thread([ = ] { DisplayRenderer* renderer = m_sourceRenderers[m_currentSource]; if(!renderer) { return; } Cairo::RefPtr image = renderer->render(page, resolution); if(!bool(image) || m_scaleThreadCanceled) { return; } renderer->adjustImage(image, brightness, contrast, invert); if(m_scaleThreadCanceled) { return; } m_scaleThreadIdleJobsCount += 1; Glib::signal_idle().connect_once([ = ] { m_imageItem->setImage(image); ui.drawingareaDisplay->queue_draw(); m_scaleThreadIdleJobsCount -= 1; }); }); } void Displayer::thumbnailsToggled() { bool active = ui.checkBoxThumbnails->get_active(); ui.scrollwinThumbnails->set_visible(active); ui.panedSource->set_position(active ? 0.5 * ui.panedSource->get_height() : (ui.panedSource->get_height() - ui.checkBoxThumbnails->get_height())); if(active) { if (!m_pageMap.empty()) { generateThumbnails(); m_connection_thumbClicked.block(); Gtk::TreePath path(1u, ui.spinPage->get_value_as_int() - 1); ui.iconviewThumbnails->select_path(path); ui.iconviewThumbnails->scroll_to_path(path, false, 0., 0.); m_connection_thumbClicked.unblock(); } } else { waitForThread(m_thumbThread, m_thumbThreadCanceled, m_thumbThreadIdleJobsCount); ui.iconviewThumbnails->set_model(Gtk::ListStore::create(m_thumbListViewCols)); ui.iconviewThumbnails->set_pixbuf_column(0); ui.iconviewThumbnails->set_text_column(1); } } void Displayer::generateThumbnails() { if(ui.checkBoxThumbnails->get_active()) { Glib::RefPtr thumbnailStore = Glib::RefPtr::cast_static(ui.iconviewThumbnails->get_model()); for(const auto& pair : m_pageMap) { Gtk::TreeIter it = thumbnailStore->append(); it->set_value(m_thumbListViewCols.pixbuf, Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/thumbnail.png")); it->set_value(m_thumbListViewCols.label, Glib::ustring::compose(_("Page %1"), pair.first)); } m_thumbThread = new std::thread(&Displayer::thumbnailThread, this); } } void Displayer::thumbnailThread() { for(const auto& pair : m_pageMap) { DisplayRenderer* renderer = m_sourceRenderers[pair.second.first]; if(!renderer) { continue; } Cairo::RefPtr thumb = renderer->renderThumbnail(pair.second.second); Glib::RefPtr pixbuf = thumb ? Gdk::Pixbuf::create(thumb, 0, 0, thumb->get_width(), thumb->get_height()) : Glib::RefPtr(0); m_thumbThreadIdleJobsCount += 1; Glib::signal_idle().connect_once([ = ] { Glib::RefPtr thumbnailStore = Glib::RefPtr::cast_static(ui.iconviewThumbnails->get_model()); Gtk::TreePath path(1u, pair.first - 1); thumbnailStore->get_iter(path)->set_value(m_thumbListViewCols.pixbuf, pixbuf); m_thumbThreadIdleJobsCount -= 1; }); if(m_thumbThreadCanceled) { break; } } } void Displayer::waitForThread(std::thread*& thread, std::atomic& cancelFlag, std::atomic& idleJobCount, sigc::connection* conn) { if(conn) { conn->disconnect(); } if(thread) { cancelFlag = true; thread->join(); delete thread; thread = nullptr; cancelFlag = false; } while(idleJobCount > 0) { Gtk::Main::iteration(); } } /////////////////////////////////////////////////////////////////////////////// void DisplayerItem::setZIndex(int zIndex) { m_zIndex = zIndex; if(m_displayer) { m_displayer->invalidateRect(m_rect); m_displayer->resortItems(); } } void DisplayerItem::setRect(const Geometry::Rectangle& rect) { Geometry::Rectangle invalidateArea = m_rect.unite(rect); m_rect = rect; if(m_displayer) { m_displayer->invalidateRect(invalidateArea); } } void DisplayerItem::setVisible(bool visible) { m_visible = visible; update(); } void DisplayerItem::update() { if(m_displayer) { m_displayer->invalidateRect(m_rect); } } void DisplayerImageItem::draw(Cairo::RefPtr ctx) const { if(m_image) { double sx = rect().width / m_image->get_width(); double sy = rect().height / m_image->get_height(); ctx->save(); ctx->rotate(m_rotation); ctx->scale(sx, sy); ctx->translate(rect().x / sx, rect().y / sy); ctx->set_source(m_image, 0, 0); ctx->paint(); ctx->restore(); } } void DisplayerSelection::draw(Cairo::RefPtr ctx) const { Gdk::RGBA bgcolor("#4A90D9"); double scale = displayer()->getCurrentScale(); double d = 0.5 / scale; double x1 = Utils::round(rect().x * scale) / scale + d; double y1 = Utils::round(rect().y * scale) / scale + d; double x2 = Utils::round((rect().x + rect().width) * scale) / scale - d; double y2 = Utils::round((rect().y + rect().height) * scale) / scale - d; Geometry::Rectangle paintrect(x1, y1, x2 - x1, y2 - y1); ctx->save(); // Semitransparent rectangle with frame ctx->set_line_width(2. * d); ctx->rectangle(paintrect.x, paintrect.y, paintrect.width, paintrect.height); ctx->set_source_rgba(bgcolor.get_red(), bgcolor.get_green(), bgcolor.get_blue(), 0.25); ctx->fill_preserve(); ctx->set_source_rgba(bgcolor.get_red(), bgcolor.get_green(), bgcolor.get_blue(), 1.0); ctx->stroke(); ctx->restore(); } bool DisplayerSelection::mousePressEvent(GdkEventButton* event) { if(event->button == 1) { Geometry::Point p = displayer()->mapToSceneClamped(Geometry::Point(event->x, event->y)); double tol = 10.0 / displayer()->getCurrentScale(); m_mouseMoveOffset = Geometry::Point(0., 0.); if(std::abs(m_point.x - p.x) < tol) { // pointx m_resizeHandlers.push_back(resizePointX); m_mouseMoveOffset.x = p.x - m_point.x; } else if(std::abs(m_anchor.x - p.x) < tol) { // anchorx m_resizeHandlers.push_back(resizeAnchorX); m_mouseMoveOffset.x = p.x - m_anchor.x; } if(std::abs(m_point.y - p.y) < tol) { // pointy m_resizeHandlers.push_back(resizePointY); m_mouseMoveOffset.y = p.y - m_point.y; } else if(std::abs(m_anchor.y - p.y) < tol) { // anchory m_resizeHandlers.push_back(resizeAnchorY); m_mouseMoveOffset.y = p.y - m_anchor.y; } if (!m_resizeHandlers.empty()) { return true; } else if(rect().contains(p)) { m_translating = true; m_mouseMoveOffset = p; return true; } else { return false; } } else if(event->button == 3) { showContextMenu(event); } return false; } bool DisplayerSelection::mouseReleaseEvent(GdkEventButton* /*event*/) { if(!m_resizeHandlers.empty()) { m_signalGeometryChanged.emit(rect()); m_resizeHandlers.clear(); } else if(m_translating) { m_signalGeometryChanged.emit(rect()); m_translating = false; } return false; } bool DisplayerSelection::mouseMoveEvent(GdkEventMotion* event) { Geometry::Point p = displayer()->mapToSceneClamped(Geometry::Point(event->x, event->y)); if(m_resizeHandlers.empty()) { double tol = 10.0 / displayer()->getCurrentScale(); bool left = std::abs(rect().x - p.x) < tol; bool right = std::abs(rect().x + rect().width - p.x) < tol; bool top = std::abs(rect().y - p.y) < tol; bool bottom = std::abs(rect().y + rect().height - p.y) < tol; if((top && left) || (bottom && right)) { displayer()->setCursor(Gdk::Cursor::create(MAIN->getWindow()->get_display(), "nwse-resize")); } else if((top && right) || (bottom && left)) { displayer()->setCursor(Gdk::Cursor::create(MAIN->getWindow()->get_display(), "nesw-resize")); } else if(top || bottom) { displayer()->setCursor(Gdk::Cursor::create(MAIN->getWindow()->get_display(), "ns-resize")); } else if(left || right) { displayer()->setCursor(Gdk::Cursor::create(MAIN->getWindow()->get_display(), "ew-resize")); } else if(rect().contains(p)) { displayer()->setCursor(Gdk::Cursor::create(MAIN->getWindow()->get_display(), "move")); } else { displayer()->setCursor(Glib::RefPtr(0)); } } if(!m_resizeHandlers.empty()) { Geometry::Point movePos(p.x - m_mouseMoveOffset.x, p.y - m_mouseMoveOffset.y); Geometry::Rectangle bb = displayer()->getSceneBoundingRect(); movePos.x = std::min(std::max(bb.x, movePos.x), bb.x + bb.width); movePos.y = std::min(std::max(bb.y, movePos.y), bb.y + bb.height); for(const ResizeHandler& handler : m_resizeHandlers) { handler(movePos, m_anchor, m_point); } Geometry::Rectangle newRect = Geometry::Rectangle(m_anchor, m_point).unite(m_minRect); setRect(newRect); displayer()->ensureVisible(event->x, event->y); return true; } else if(m_translating) { Geometry::Point delta(p.x - m_mouseMoveOffset.x, p.y - m_mouseMoveOffset.y); m_mouseMoveOffset = p; Geometry::Rectangle bb = displayer()->getSceneBoundingRect(); // Constraint movement to scene bounding rect delta.x -= std::max(0., std::max(m_anchor.x, m_point.x) + delta.x - bb.right()) + std::min(0., std::min(m_anchor.x, m_point.x) + delta.x - bb.left()); delta.y -= std::max(0., std::max(m_anchor.y, m_point.y) + delta.y - bb.bottom()) + std::min(0., std::min(m_anchor.y, m_point.y) + delta.y - bb.top()); m_anchor.x += delta.x; m_anchor.y += delta.y; m_point.x += delta.x; m_point.y += delta.y; setRect(Geometry::Rectangle(m_anchor, m_point)); return true; } return false; } gImageReader-3.4.0/gtk/src/Displayer.hh000066400000000000000000000233141417507262200176740ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Displayer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYER_HH #define DISPLAYER_HH #include "Geometry.hh" #include #include #include #include namespace std { class thread; } class DisplayerItem; class DisplayerImageItem; class DisplayerTool; class DisplayRenderer; class Source; namespace Ui { class MainWindow; } class Displayer { public: Displayer(const Ui::MainWindow& _ui); ~Displayer() { setSources(std::vector()); } void setTool(DisplayerTool* tool) { m_tool = tool; } bool setSources(const std::vector sources); bool setup(const int* page, const int* resolution = nullptr, const double* angle = nullptr); int getCurrentPage() const; int getCurrentResolution() const; double getCurrentAngle() const; double getCurrentScale() const { return m_scale; } bool resolvePage(int page, std::string& source, int& sourcePage) const; std::string getCurrentImage(int& page) const; int getNPages() const; int getNSources() const { return m_sourceRenderers.size(); } Cairo::RefPtr getImage(const Geometry::Rectangle& rect) const; Geometry::Rectangle getSceneBoundingRect() const; Geometry::Point mapToSceneClamped(const Geometry::Point& p) const; Geometry::Point mapToView(const Geometry::Point& p) const; bool hasMultipleOCRAreas(); std::vector> getOCRAreas(); bool allowAutodetectOCRAreas() const; void autodetectOCRAreas(); void setDefaultCursor(Glib::RefPtr cursor); void setCursor(Glib::RefPtr cursor); void ensureVisible(double evx, double evy); void ensureVisible(const Geometry::Rectangle& rect); void addItem(DisplayerItem* item); void removeItem(DisplayerItem* item); void invalidateRect(const Geometry::Rectangle& rect); void resortItems(); void setBlockAutoscale(bool block); sigc::signal signal_imageChanged() const { return m_signalImageChanged; } private: enum class Zoom { In, Out, Fit, One }; enum class RotateMode { CurrentPage, AllPages } m_rotateMode; const Ui::MainWindow& ui; ClassData m_classdata; Glib::RefPtr m_hadj; Glib::RefPtr m_vadj; std::vector m_sources; std::map m_sourceRenderers; std::map> m_pageMap; Source* m_currentSource = nullptr; Cairo::RefPtr m_image; double m_scale = 1.0; double m_scrollPos[2] = {0.5, 0.5}; DisplayerTool* m_tool = nullptr; DisplayerImageItem* m_imageItem = nullptr; std::vector m_items; DisplayerItem* m_activeItem = nullptr; double m_panPos[2] = {0., 0.}; Glib::RefPtr m_defaultCursor; sigc::connection m_renderTimer; sigc::connection m_connection_pageSpinChanged; sigc::connection m_connection_rotSpinChanged; sigc::connection m_connection_resSpinChanged; sigc::connection m_connection_briSpinChanged; sigc::connection m_connection_conSpinChanged; sigc::connection m_connection_invcheckToggled; sigc::connection m_connection_zoomfitClicked; sigc::connection m_connection_zoomoneClicked; sigc::connection m_connection_setScaledImage; sigc::connection m_connection_thumbClicked; sigc::signal m_signalImageChanged; void resizeEvent(); bool keyPressEvent(GdkEventKey* ev); bool mouseMoveEvent(GdkEventMotion* ev); bool mousePressEvent(GdkEventButton* ev); bool mouseReleaseEvent(GdkEventButton* ev); bool scrollEvent(GdkEventScroll* ev); void setZoom(Zoom zoom); void generateThumbnails(); void thumbnailsToggled(); bool renderImage(); void drawCanvas(const Cairo::RefPtr& ctx); void positionCanvas(); void queueRenderImage(); void setAngle(double angle); void setRotateMode(RotateMode mode, const std::string& iconName); std::pair getPointVisible(const Geometry::Point& p) const; void waitForThread(std::thread*& thread, std::atomic& cancelFlag, std::atomic& idleJobCount, sigc::connection* conn = nullptr); bool m_autoScaleBlocked = false; sigc::connection m_scaleTimer; std::thread* m_scaleThread = nullptr; std::atomic m_scaleThreadCanceled; std::atomic m_scaleThreadIdleJobsCount; void scaleImage(); class ThumbListViewColumns : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn> pixbuf; Gtk::TreeModelColumn label; ThumbListViewColumns() { add(pixbuf); add(label); } } m_thumbListViewCols; std::thread* m_thumbThread = nullptr; std::atomic m_thumbThreadCanceled; std::atomic m_thumbThreadIdleJobsCount; void thumbnailThread(); }; class DisplayerItem : public sigc::trackable { public: friend class Displayer; virtual ~DisplayerItem() {} Displayer* displayer() const { return m_displayer; } void setZIndex(int zIndex); double zIndex() const { return m_zIndex; } void setRect(const Geometry::Rectangle& rect); const Geometry::Rectangle& rect() const { return m_rect; } void setVisible(bool visible); bool visible() const { return m_visible; } void update(); virtual void draw(Cairo::RefPtr ctx) const = 0; virtual bool mousePressEvent(GdkEventButton* /*event*/) { return false; } virtual bool mouseMoveEvent(GdkEventMotion* /*event*/) { return false; } virtual bool mouseReleaseEvent(GdkEventButton* /*event*/) { return false; } static bool zIndexCmp(const DisplayerItem* lhs, const DisplayerItem* rhs) { return lhs->m_zIndex < rhs->m_zIndex; } private: Displayer* m_displayer = nullptr; Geometry::Rectangle m_rect; int m_zIndex = 0; bool m_visible = true; }; class DisplayerImageItem : public DisplayerItem { public: using DisplayerItem::DisplayerItem; void draw(Cairo::RefPtr ctx) const override; void setImage(Cairo::RefPtr image) { m_image = image; } void setRotation(double rotation) { m_rotation = rotation; } protected: Cairo::RefPtr m_image; double m_rotation = 0.; }; class DisplayerSelection : public DisplayerItem { public: DisplayerSelection(DisplayerTool* tool, const Geometry::Point& anchor) : m_tool(tool), m_anchor(anchor), m_point(anchor) { setRect(Geometry::Rectangle(anchor, anchor)); setZIndex(10); } void setPoint(const Geometry::Point& point) { m_point = point; setRect(Geometry::Rectangle(m_anchor, m_point)); } void setAnchorAndPoint(const Geometry::Point& anchor, const Geometry::Point& point) { m_anchor = anchor; m_point = point; setRect(Geometry::Rectangle(m_anchor, m_point)); } void setMinimumRect(const Geometry::Rectangle& rect) { m_minRect = rect; } void rotate(const Geometry::Rotation& R) { m_anchor = R.rotate(m_anchor); m_point = R.rotate(m_point); setRect(Geometry::Rectangle(m_anchor, m_point)); } void scale(double factor) { m_anchor = Geometry::Point(m_anchor.x * factor, m_anchor.y * factor); m_point = Geometry::Point(m_point.x * factor, m_point.y * factor); } sigc::signal signal_geometry_changed() { return m_signalGeometryChanged; } void draw(Cairo::RefPtr ctx) const override; bool mousePressEvent(GdkEventButton* event) override; bool mouseReleaseEvent(GdkEventButton* event) override; bool mouseMoveEvent(GdkEventMotion* event) override; protected: DisplayerTool* m_tool; virtual void showContextMenu(GdkEventButton* /*event*/) {} private: typedef void(*ResizeHandler)(const Geometry::Point&, Geometry::Point&, Geometry::Point&); Geometry::Point m_anchor; Geometry::Point m_point; Geometry::Rectangle m_minRect; std::vector m_resizeHandlers; Geometry::Point m_mouseMoveOffset; bool m_translating = false; sigc::signal m_signalGeometryChanged; static void resizeAnchorX(const Geometry::Point& pos, Geometry::Point& anchor, Geometry::Point& /*point*/) { anchor.x = pos.x; } static void resizeAnchorY(const Geometry::Point& pos, Geometry::Point& anchor, Geometry::Point& /*point*/) { anchor.y = pos.y; } static void resizePointX(const Geometry::Point& pos, Geometry::Point& /*anchor*/, Geometry::Point& point) { point.x = pos.x; } static void resizePointY(const Geometry::Point& pos, Geometry::Point& /*anchor*/, Geometry::Point& point) { point.y = pos.y; } }; class DisplayerTool { public: DisplayerTool(Displayer* displayer) : m_displayer(displayer) {} virtual ~DisplayerTool() {} virtual bool mousePressEvent(GdkEventButton* /*event*/) { return false; } virtual bool mouseMoveEvent(GdkEventMotion* /*event*/) { return false; } virtual bool mouseReleaseEvent(GdkEventButton* /*event*/) { return false; } virtual void pageChanged() {} virtual void resolutionChanged(double /*factor*/) {} virtual void rotationChanged(double /*delta*/) {} virtual std::vector> getOCRAreas() = 0; virtual bool hasMultipleOCRAreas() const { return false; } virtual bool allowAutodetectOCRAreas() const { return false; } virtual void autodetectOCRAreas() {} virtual void reset() {} protected: Displayer* m_displayer; }; #endif // IMAGEDISPLAYER_HH gImageReader-3.4.0/gtk/src/DisplayerToolSelect.cc000066400000000000000000000273051417507262200216640ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolSelect.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "DisplayerToolSelect.hh" #include "Displayer.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Recognizer.hh" #include "Utils.hh" #include "ui_SelectionMenu.hh" #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE DisplayerToolSelect::DisplayerToolSelect(Displayer* displayer) : DisplayerTool(displayer) { displayer->setDefaultCursor(Gdk::Cursor::create(Gdk::TCROSS)); updateRecognitionModeLabel(); } DisplayerToolSelect::~DisplayerToolSelect() { clearSelections(); } bool DisplayerToolSelect::mousePressEvent(GdkEventButton* event) { if(event->button == 1 && m_curSel == nullptr) { if((event->state & Gdk::CONTROL_MASK) == 0) { clearSelections(); } m_curSel = new NumberedDisplayerSelection(this, 1 + m_selections.size(), m_displayer->mapToSceneClamped(Geometry::Point(event->x, event->y))); m_curSel->setZIndex(1 + m_selections.size()); m_displayer->addItem(m_curSel); return true; } return false; } bool DisplayerToolSelect::mouseMoveEvent(GdkEventMotion* event) { if(m_curSel) { Geometry::Point p = m_displayer->mapToSceneClamped(Geometry::Point(event->x, event->y)); m_curSel->setPoint(p); m_displayer->ensureVisible(event->x, event->y); return true; } return false; } bool DisplayerToolSelect::mouseReleaseEvent(GdkEventButton* /*event*/) { if(m_curSel) { if(m_curSel->rect().width < 5. || m_curSel->rect().height < 5.) { m_displayer->removeItem(m_curSel); delete m_curSel; } else { m_selections.push_back(m_curSel); updateRecognitionModeLabel(); } m_curSel = nullptr; return true; } return false; } void DisplayerToolSelect::resolutionChanged(double factor) { for(NumberedDisplayerSelection* sel : m_selections) { sel->scale(factor); } } void DisplayerToolSelect::rotationChanged(double delta) { Geometry::Rotation R(delta); for(NumberedDisplayerSelection* sel : m_selections) { sel->rotate(R); } } std::vector> DisplayerToolSelect::getOCRAreas() { std::vector> images; if(m_selections.empty()) { images.push_back(m_displayer->getImage(m_displayer->getSceneBoundingRect())); } else { for(const NumberedDisplayerSelection* sel : m_selections) { images.push_back(m_displayer->getImage(sel->rect())); } } return images; } void DisplayerToolSelect::clearSelections() { for(NumberedDisplayerSelection* sel : m_selections) { m_displayer->removeItem(sel); delete sel; } m_selections.clear(); updateRecognitionModeLabel(); } void DisplayerToolSelect::removeSelection(int num) { m_displayer->removeItem(m_selections[num - 1]); delete m_selections[num - 1]; m_selections.erase(m_selections.begin() + num - 1); for(int i = 0, n = m_selections.size(); i < n; ++i) { m_selections[i]->setNumber(1 + i); m_selections[i]->setZIndex(1 + i); } } void DisplayerToolSelect::reorderSelection(int oldNum, int newNum) { NumberedDisplayerSelection* sel = m_selections[oldNum - 1]; m_selections.erase(m_selections.begin() + oldNum - 1); m_selections.insert(m_selections.begin() + newNum - 1, sel); for(int i = 0, n = m_selections.size(); i < n; ++i) { m_selections[i]->setNumber(1 + i); m_selections[i]->setZIndex(1 + i); } } void DisplayerToolSelect::saveSelection(NumberedDisplayerSelection* selection) { Cairo::RefPtr img = m_displayer->getImage(selection->rect()); FileDialogs::FileFilter filter = {_("PNG Images"), {"image/png"}, {"*.png"}}; std::string filename = FileDialogs::save_dialog(_("Save Selection Image"), _("selection.png"), "outputdir", filter, true); if(!filename.empty()) { img->write_to_png(filename); } } void DisplayerToolSelect::updateRecognitionModeLabel() { MAIN->getRecognizer()->setRecognizeMode(m_selections.empty() ? _("Recognize all") : _("Recognize selection")); } void DisplayerToolSelect::autodetectLayout(bool noDeskew) { clearSelections(); double avgDeskew = 0.; int nDeskew = 0; std::vector rects; Cairo::RefPtr img = m_displayer->getImage(m_displayer->getSceneBoundingRect()); // Perform layout analysis Utils::busyTask([&nDeskew, &avgDeskew, &rects, &img] { std::string current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; tess.InitForAnalysePage(); setlocale(LC_ALL, current.c_str()); tess.SetPageSegMode(tesseract::PSM_AUTO_ONLY); tess.SetImage(img->get_data(), img->get_width(), img->get_height(), 4, 4 * img->get_width()); tesseract::PageIterator* it = tess.AnalyseLayout(); if(it && !it->Empty(tesseract::RIL_BLOCK)) { do { int x1, y1, x2, y2; tesseract::Orientation orient; tesseract::WritingDirection wdir; tesseract::TextlineOrder tlo; float deskew; it->BoundingBox(tesseract::RIL_BLOCK, &x1, &y1, &x2, &y2); it->Orientation(&orient, &wdir, &tlo, &deskew); avgDeskew += deskew; ++nDeskew; float width = x2 - x1, height = y2 - y1; if(width > 10 && height > 10) { rects.push_back(Geometry::Rectangle(x1 - 0.5 * img->get_width(), y1 - 0.5 * img->get_height(), width, height)); } } while(it->Next(tesseract::RIL_BLOCK)); } delete it; return true; }, _("Performing layout analysis")); // If a somewhat large deskew angle is detected, automatically rotate image and redetect layout, // unless we already attempted to rotate (to prevent endless loops) avgDeskew = Utils::round(((avgDeskew / nDeskew) / M_PI * 180.) * 10.) / 10.; if(std::abs(avgDeskew) > .1 && !noDeskew) { double newangle = m_displayer->getCurrentAngle() - avgDeskew; m_displayer->setup(nullptr, nullptr, &newangle); autodetectLayout(true); } else { // Merge overlapping rectangles for(int i = rects.size(); i-- > 1;) { for(int j = i; j-- > 0;) { if(rects[j].overlaps(rects[i])) { rects[j] = rects[j].unite(rects[i]); rects.erase(rects.begin() + i); break; } } } for(int i = 0, n = rects.size(); i < n; ++i) { m_selections.push_back(new NumberedDisplayerSelection(this, 1 + i, Geometry::Point(rects[i].x, rects[i].y))); m_selections.back()->setPoint(Geometry::Point(rects[i].x + rects[i].width, rects[i].y + rects[i].height)); m_displayer->addItem(m_selections.back()); } updateRecognitionModeLabel(); } } /////////////////////////////////////////////////////////////////////////////// void NumberedDisplayerSelection::showContextMenu(GdkEventButton* event) { Ui::SelectionMenu ui; ClassData m_classdata; ui.setupUi(); ui.windowSelection->set_attached_to(*MAIN->getWindow()); ui.spinSelectionOrder->get_adjustment()->set_upper(static_cast(m_tool)->m_selections.size()); ui.spinSelectionOrder->get_adjustment()->set_value(m_number); Glib::RefPtr loop = Glib::MainLoop::create(); std::vector selmenuConnections = { CONNECT(ui.spinSelectionOrder, value_changed, [&]{ reorderSelection(ui.spinSelectionOrder->get_value()); }), CONNECT(ui.buttonSelectionDelete, clicked, [&]{ loop->quit(); static_cast(m_tool)->removeSelection(m_number); }), CONNECT(ui.buttonSelectionRecognize, clicked, [&]{ loop->quit(); MAIN->getRecognizer()->recognizeImage(displayer()->getImage(rect()), Recognizer::OutputDestination::Buffer); }), CONNECT(ui.buttonSelectionClipboard, clicked, [&]{ loop->quit(); MAIN->getRecognizer()->recognizeImage(displayer()->getImage(rect()), Recognizer::OutputDestination::Clipboard); }), CONNECT(ui.buttonSelectionSave, clicked, [&]{ loop->quit(); // Explicitly hide (and wait for hide event to be processed) to avoid key/mouse-grab conflicts with file dialog which pops up ui.windowSelection->hide(); while(Gtk::Main::events_pending()) { Gtk::Main::iteration(false); } static_cast(m_tool)->saveSelection(this); }), CONNECT(ui.windowSelection, button_press_event, [&](GdkEventButton * ev) { Gtk::Allocation a = ui.windowSelection->get_allocation(); if(ev->x < a.get_x() || ev->x > a.get_x() + a.get_width() || ev->y < a.get_y() || ev->y > a.get_y() + a.get_height()) { loop->quit(); } return true; }), CONNECT(ui.windowSelection, key_press_event, [&](GdkEventKey * ev) { if(ev->keyval == GDK_KEY_Escape) { loop->quit(); } return true; }) }; Glib::RefPtr screen = MAIN->getWindow()->get_screen(); Gdk::Rectangle rect = screen->get_monitor_workarea(screen->get_monitor_at_point(event->x_root, event->y_root)); ui.windowSelection->show_all(); int w, h, trash; ui.windowSelection->get_preferred_width(trash, w); ui.windowSelection->get_preferred_height(trash, h); int x = std::min(std::max(int(event->x_root), rect.get_x()), rect.get_x() + rect.get_width() - w); int y = std::min(std::max(int(event->y_root), rect.get_y()), rect.get_y() + rect.get_height() - h); ui.windowSelection->move(x, y); GdkWindow* gdkwin = ui.windowSelection->get_window()->gobj(); #if GTK_CHECK_VERSION(3,20,0) gdk_seat_grab(gdk_device_get_seat(gtk_get_current_event_device()), gdkwin, GDK_SEAT_CAPABILITY_ALL, true, nullptr, nullptr, nullptr, nullptr); #else gdk_device_grab(gtk_get_current_event_device(), gdkwin, GDK_OWNERSHIP_APPLICATION, true, GDK_BUTTON_PRESS_MASK, nullptr, event->time); #endif loop->run(); ui.windowSelection->hide(); for(sigc::connection& conn : selmenuConnections) { conn.disconnect(); } #if GTK_CHECK_VERSION(3,20,0) gdk_seat_ungrab(gdk_device_get_seat(gtk_get_current_event_device())); #else gdk_device_ungrab(gtk_get_current_event_device(), gtk_get_current_event_time()); #endif } void NumberedDisplayerSelection::reorderSelection(int newNumber) { static_cast(m_tool)->reorderSelection(m_number, newNumber); } void NumberedDisplayerSelection::draw(Cairo::RefPtr ctx) const { DisplayerSelection::draw(ctx); Gdk::RGBA fgcolor("#FFFFFF"); Gdk::RGBA bgcolor("#4A90D9"); double scale = displayer()->getCurrentScale(); Glib::ustring idx = Glib::ustring::compose("%1", m_number); double d = 0.5 / scale; double x1 = Utils::round(rect().x * scale) / scale + d; double y1 = Utils::round(rect().y * scale) / scale + d; double x2 = Utils::round((rect().x + rect().width) * scale) / scale - d; double y2 = Utils::round((rect().y + rect().height) * scale) / scale - d; Geometry::Rectangle paintrect(x1, y1, x2 - x1, y2 - y1); ctx->save(); // Text box double w = std::min(std::min(40. * d, paintrect.width), paintrect.height); ctx->rectangle(paintrect.x, paintrect.y, w - d, w - d); ctx->set_source_rgba(bgcolor.get_red(), bgcolor.get_green(), bgcolor.get_blue(), 1.0); ctx->fill(); // Text ctx->select_font_face("sans", Cairo::FONT_SLANT_NORMAL, Cairo::FONT_WEIGHT_BOLD); ctx->set_font_size(0.7 * w); Cairo::TextExtents ext; ctx->get_text_extents(idx, ext); ctx->translate(paintrect.x + .5 * w, paintrect.y + .5 * w); ctx->translate(-ext.x_bearing - .5 * ext.width, -ext.y_bearing - .5 * ext.height); ctx->set_source_rgba(fgcolor.get_red(), fgcolor.get_green(), bgcolor.get_blue(), 1.0); ctx->show_text(idx); ctx->restore(); } gImageReader-3.4.0/gtk/src/DisplayerToolSelect.hh000066400000000000000000000050421417507262200216700ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolSelect.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYERTOOLSELECT_HH #define DISPLAYERTOOLSELECT_HH #include "Displayer.hh" class NumberedDisplayerSelection; class DisplayerToolSelect : public DisplayerTool { public: DisplayerToolSelect(Displayer* displayer); ~DisplayerToolSelect(); bool mousePressEvent(GdkEventButton* event) override; bool mouseMoveEvent(GdkEventMotion* event) override; bool mouseReleaseEvent(GdkEventButton* event) override; void resolutionChanged(double factor) override; void rotationChanged(double delta) override; std::vector> getOCRAreas() override; bool hasMultipleOCRAreas() const override { return !m_selections.empty(); } bool allowAutodetectOCRAreas() const override { return true; } void autodetectOCRAreas() override { autodetectLayout(); } void reset() override { clearSelections(); } private: friend class NumberedDisplayerSelection; NumberedDisplayerSelection* m_curSel = nullptr; std::vector m_selections; void clearSelections(); void removeSelection(int num); void reorderSelection(int oldNum, int newNum); void saveSelection(NumberedDisplayerSelection* selection); void updateRecognitionModeLabel(); void autodetectLayout(bool noDeskew = false); }; class NumberedDisplayerSelection : public DisplayerSelection { public: NumberedDisplayerSelection(DisplayerToolSelect* selectTool, int number, const Geometry::Point& anchor) : DisplayerSelection(selectTool, anchor), m_number(number) { } void setNumber(int number) { m_number = number; } void reorderSelection(int newNumber); void draw(Cairo::RefPtr ctx) const override; private: int m_number; void showContextMenu(GdkEventButton* event) override; }; #endif // DISPLAYERTOOLSELECT_HH gImageReader-3.4.0/gtk/src/DjVuDocument.cc000066400000000000000000000102411417507262200202700ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DjVuDocument.cc * Based on code from Okular, which is: * Copyright (C) 2006 by Pino Toscano * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "DjVuDocument.hh" #include #include #include /** * Explore the message queue until there are no message left in it. */ static void handle_ddjvu_messages( ddjvu_context_t* ctx, int wait ) { const ddjvu_message_t* msg; if ( wait ) { ddjvu_message_wait( ctx ); } while ( ( msg = ddjvu_message_peek( ctx ) ) ) { ddjvu_message_pop( ctx ); } } /** * Explore the message queue until the message \p mid is found. */ static void wait_for_ddjvu_message( ddjvu_context_t* ctx, ddjvu_message_tag_t mid ) { ddjvu_message_wait( ctx ); const ddjvu_message_t* msg; while ( ( msg = ddjvu_message_peek( ctx ) ) && msg && ( msg->m_any.tag != mid ) ) { ddjvu_message_pop( ctx ); } } DjVuDocument::DjVuDocument() { // creating the djvu context m_djvu_cxt = ddjvu_context_create( "DjVuDocument" ); // creating the rendering format unsigned int formatmask[4] = { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; // R, G, B, A masks m_format = ddjvu_format_create( DDJVU_FORMAT_RGBMASK32, 4, formatmask ); ddjvu_format_set_row_order( m_format, 1 ); ddjvu_format_set_y_direction( m_format, 1 ); } DjVuDocument::~DjVuDocument() { closeFile(); ddjvu_format_release( m_format ); ddjvu_context_release( m_djvu_cxt ); } bool DjVuDocument::openFile( const std::string& fileName ) { // first, close the old file if ( m_djvu_document ) { closeFile(); } // load the document... m_djvu_document = ddjvu_document_create_by_filename( m_djvu_cxt, fileName.c_str(), true ); if ( !m_djvu_document ) { return false; } // ...and wait for its loading wait_for_ddjvu_message( m_djvu_cxt, DDJVU_DOCINFO ); if ( ddjvu_document_decoding_error( m_djvu_document ) ) { ddjvu_document_release( m_djvu_document ); m_djvu_document = nullptr; return false; } int numofpages = ddjvu_document_get_pagenum( m_djvu_document ); m_pages.clear(); m_pages.resize( numofpages ); // read the pages for ( int i = 0; i < numofpages; ++i ) { ddjvu_status_t sts; ddjvu_pageinfo_t info; while ( ( sts = ddjvu_document_get_pageinfo( m_djvu_document, i, &info ) ) < DDJVU_JOB_OK ) { handle_ddjvu_messages( m_djvu_cxt, true ); } if ( sts >= DDJVU_JOB_FAILED ) { closeFile(); return false; } m_pages[i] = {info.width, info.height, info.dpi}; } return true; } void DjVuDocument::closeFile() { m_pages.clear(); // releasing the old document if ( m_djvu_document ) { ddjvu_document_release( m_djvu_document ); } m_djvu_document = nullptr; } Cairo::RefPtr DjVuDocument::image( int pageno, int resolution ) { if(pageno < 0 || pageno >= pageCount()) { return Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 0, 0); } const DjVuDocument::Page& page = m_pages[pageno]; ddjvu_page_t* djvupage = ddjvu_page_create_by_pageno( m_djvu_document, pageno ); // wait for the new page to be loaded ddjvu_status_t sts; while ( ( sts = ddjvu_page_decoding_status( djvupage ) ) < DDJVU_JOB_OK ) { handle_ddjvu_messages( m_djvu_cxt, true ); } double scaleFactor = double(resolution) / double(page.dpi); ddjvu_rect_t pagerect; pagerect.x = 0; pagerect.y = 0; pagerect.w = page.width * scaleFactor; pagerect.h = page.height * scaleFactor; ddjvu_rect_t renderrect = pagerect; Cairo::RefPtr res_img = Cairo::ImageSurface::create( Cairo::FORMAT_ARGB32, renderrect.w, renderrect.h ); int res = ddjvu_page_render( djvupage, DDJVU_RENDER_COLOR, &pagerect, &renderrect, m_format, res_img->get_stride(), (char*)res_img->get_data() ); if (!res) { Cairo::RefPtr ctx = Cairo::Context::create(res_img); ctx->set_source_rgba(1., 1., 1., 0.); ctx->paint(); } res_img->mark_dirty(); ddjvu_page_release(djvupage); return res_img; } gImageReader-3.4.0/gtk/src/DjVuDocument.hh000066400000000000000000000023731417507262200203110ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DjVuDocument.hh * Based on code from Okular, which is: * Copyright (C) 2006 by Pino Toscano * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef DJVUDOCUMENT_HH #define DJVUDOCUMENT_HH #include #include typedef struct ddjvu_context_s ddjvu_context_t; typedef struct ddjvu_document_s ddjvu_document_t; typedef struct ddjvu_format_s ddjvu_format_t; class DjVuDocument { public: DjVuDocument(); ~DjVuDocument(); struct Page { int width; int height; int dpi; }; bool openFile( const std::string& fileName ); void closeFile(); Cairo::RefPtr image(int pageno, int resolution); int pageCount() const { return m_pages.size(); } const Page& page(int pageno) const { return m_pages[pageno]; } private: ddjvu_context_t* m_djvu_cxt = nullptr; ddjvu_document_t* m_djvu_document = nullptr; ddjvu_format_t* m_format = nullptr; std::vector m_pages; }; #endif gImageReader-3.4.0/gtk/src/FileDialogs.cc000066400000000000000000000342021417507262200201060ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileDialogs.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Utils.hh" #include #ifdef G_OS_WIN32 #include #include #include #include #else #include #endif #ifdef G_OS_WIN32 static std::wstring s2ws(const std::string& s) { g_assert(sizeof(wchar_t) == sizeof(gunichar2)); const char* in = s.c_str(); wchar_t* buf = reinterpret_cast(g_utf8_to_utf16(in, -1, nullptr, nullptr, nullptr)); std::wstring out(buf); g_free(buf); return out; } static std::string ws2s(const std::wstring& s) { g_assert(sizeof(wchar_t) == sizeof(gunichar2)); const gunichar2* in = reinterpret_cast(s.c_str()); char* buf = g_utf16_to_utf8(in, -1, nullptr, nullptr, nullptr); std::string out(buf); g_free(buf); return out; } std::wstring FileDialogs::FileFilter::to_win32_filter() const { std::wstring filterstr = s2ws(name); filterstr += L'\0'; for(const std::string& pattern : patterns) { filterstr += s2ws(pattern) + L';'; } if(filterstr.back() == L';') { filterstr.back() = L'\0'; } return filterstr; } static std::vector> win32_open_dialog(const Glib::ustring& title, const std::string& initialDirectory, const std::wstring& filter, bool multiple, Gtk::Window* parent) { wchar_t wfile[1024] = {}; std::wstring winitialDirectory = s2ws(initialDirectory); std::wstring wtitle = s2ws(title); OPENFILENAMEW ofn = {}; ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = gdk_win32_window_get_impl_hwnd(parent->get_window()->gobj()); ofn.lpstrFilter = filter.c_str(); ofn.nFilterIndex = 0; ofn.lpstrFile = wfile; ofn.nMaxFile = sizeof(wfile); ofn.lpstrInitialDir = winitialDirectory.c_str(); ofn.lpstrTitle = wtitle.c_str(); ofn.Flags = OFN_NONETWORKBUTTON | OFN_EXPLORER; if(multiple) { ofn.Flags |= OFN_ALLOWMULTISELECT; } bool ok = GetOpenFileNameW(&ofn); std::vector> files; if(ok) { if(ofn.nFileOffset == 0) { // One file only std::string filename = ws2s(ofn.lpstrFile); files.push_back(Gio::File::create_for_path(filename)); } else { std::string directory = ws2s(ofn.lpstrFile); size_t offset = ofn.nFileOffset; while(true) { size_t len = wcslen(ofn.lpstrFile + offset); if(len == 0) { break; } else { std::string filename = ws2s(ofn.lpstrFile + offset); files.push_back(Gio::File::create_for_path(filename)); offset += len + 1; // +1: string length + terminator, end of string is doubly terminated } } } } return files; } static std::string win32_open_folder_dialog(const Glib::ustring& title, const std::string& initialDirectory, Gtk::Window* parent) { std::wstring winitialDirectory = s2ws(initialDirectory); std::wstring wtitle = s2ws(title); BROWSEINFOW binfo = {}; binfo.hwndOwner = gdk_win32_window_get_impl_hwnd(parent->get_window()->gobj()); binfo.pszDisplayName = NULL; binfo.lpszTitle = wtitle.c_str(); binfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI | BIF_NONEWFOLDERBUTTON; binfo.lpfn = NULL; binfo.lParam = NULL; binfo.iImage = 0; PIDLIST_ABSOLUTE result = SHBrowseForFolderW(&binfo); if(result == NULL) { // ToDo: shouldn't we release the memory hold by "result"?... return std::string(); } TCHAR buffer[MAX_PATH]; if(SHGetPathFromIDList(result, buffer)) { // ToDo: shouldn't we release the memory hold by "result"?... return std::string(buffer); } // ToDo: shouldn't we release the memory hold by "result"?... return std::string(); } static std::string win32_save_dialog(const Glib::ustring& title, const std::string& suggestedFile, const std::wstring& filter, Gtk::Window* parent) { std::wstring wsuggestedFile = s2ws(suggestedFile); std::wstring wtitle = s2ws(title); std::wstring suggestedName = s2ws(Glib::path_get_basename(suggestedFile)); wchar_t wfile[MAX_PATH] = {}; wcsncpy(wfile, suggestedName.c_str(), sizeof(wfile) / sizeof(wfile[0])); OPENFILENAMEW ofn = {}; ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = gdk_win32_window_get_impl_hwnd(parent->get_window()->gobj()); ofn.lpstrFilter = filter.c_str(); ofn.lpstrFile = wfile; ofn.nMaxFile = sizeof(wfile); ofn.lpstrInitialDir = wsuggestedFile.c_str(); ofn.lpstrTitle = wtitle.c_str(); ofn.Flags = OFN_NONETWORKBUTTON | OFN_EXPLORER | OFN_OVERWRITEPROMPT; bool ok = GetSaveFileNameW(&ofn); std::string filename; if(ok) { filename = ws2s(ofn.lpstrFile); } return filename; } #else Glib::RefPtr FileDialogs::FileFilter::to_gnome_filter() const { Glib::RefPtr filefilter = Gtk::FileFilter::create(); filefilter->set_name(name); for(const Glib::ustring& mime_type : mime_types) { filefilter->add_mime_type(mime_type); } for(const Glib::ustring& pattern : patterns) { filefilter->add_pattern(pattern); } return filefilter; } static std::vector> gnome_open_dialog(const std::string& title, const std::string& initialDirectory, Glib::RefPtr filter, bool multiple, Gtk::Window* parent) { Gtk::FileChooserDialog dialog(*parent, title); dialog.add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); dialog.add_button(_("OK"), Gtk::RESPONSE_OK); dialog.set_select_multiple(multiple); dialog.set_local_only(false); dialog.set_filter(filter); dialog.set_current_folder(initialDirectory); if(dialog.run() == Gtk::RESPONSE_OK) { return dialog.get_files(); } return std::vector>(); } static std::string gnome_open_folder_dialog(const std::string& title, const std::string& initialDirectory, Gtk::Window* parent) { Gtk::FileChooserDialog dialog(*parent, title); dialog.add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); dialog.add_button(_("OK"), Gtk::RESPONSE_OK); dialog.set_action(Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); dialog.set_local_only(false); dialog.set_current_folder(initialDirectory); if(dialog.run() == Gtk::RESPONSE_OK) { return dialog.get_filename(); } return std::string(); } static std::string gnome_save_dialog(const Glib::ustring& title, const std::string& suggestedFile, Glib::RefPtr filter, Gtk::Window* parent) { Gtk::FileChooserDialog dialog(*parent, title, Gtk::FILE_CHOOSER_ACTION_SAVE); dialog.add_button("gtk-cancel", Gtk::RESPONSE_CANCEL); dialog.add_button("gtk-ok", Gtk::RESPONSE_OK); dialog.set_select_multiple(false); dialog.set_create_folders(true); dialog.set_do_overwrite_confirmation(true); dialog.set_local_only(false); dialog.set_current_folder(Glib::path_get_dirname(suggestedFile)); dialog.set_current_name(Glib::path_get_basename(suggestedFile)); dialog.set_filter(filter); if(dialog.run() == Gtk::RESPONSE_OK) { return dialog.get_filename(); } return ""; } Glib::ustring FileDialogs::FileFilter::to_kde_filter() const { Glib::ustring filter = name + " (" + Utils::string_join(patterns, " ") + ")"; return filter; } static std::vector> kde_open_dialog(const Glib::ustring& title, const std::string& initialDirectory, const Glib::ustring& filter, bool multiple, Gtk::Window* parent) { // Command line std::vector argv = { "/usr/bin/kdialog", "--getopenfilename", initialDirectory, filter, multiple ? "--multiple" : "", "--separate-output", "--attach", Glib::ustring::compose("%1", gdk_x11_window_get_xid(parent->get_window()->gobj())), "--title", title/*, "--caption", PACKAGE_NAME*/ }; // Spawn process std::string stdout; int exit_status = -1; Glib::spawn_sync("", argv, /*Glib::SPAWN_DEFAULT*/Glib::SpawnFlags(0), sigc::slot(), &stdout, nullptr, &exit_status); std::vector> files; if(exit_status == 0) { std::istringstream iss(stdout); std::string filename; while(std::getline(iss, filename)) { files.push_back(Gio::File::create_for_path(filename)); } } return files; } static std::string kde_open_folder_dialog(const Glib::ustring& title, const std::string& initialDirectory, Gtk::Window* parent) { // Command line std::vector argv = { "/usr/bin/kdialog", "--getexistingdirectory", initialDirectory, "--attach", Glib::ustring::compose("%1", gdk_x11_window_get_xid(parent->get_window()->gobj())), "--title", title/*, "--caption", PACKAGE_NAME*/ }; // Spawn process std::string stdout; int exit_status = -1; Glib::spawn_sync("", argv, /*Glib::SPAWN_DEFAULT*/Glib::SpawnFlags(0), sigc::slot(), &stdout, nullptr, &exit_status); std::vector> files; if(exit_status == 0) { std::string folder; std::istringstream iss(stdout); std::getline(iss, folder); return folder; } return std::string(); } static std::string kde_save_dialog(const Glib::ustring& title, const std::string& suggestedFile, const Glib::ustring& filter, Gtk::Window* parent) { std::string filename = suggestedFile; do { std::vector argv = { "/usr/bin/kdialog", "--getsavefilename", filename, filter, "--attach", Glib::ustring::compose("%1", gdk_x11_window_get_xid(parent->get_window()->gobj())), "--title", title/*, "--caption", PACKAGE_NAME*/ }; int exit_status = -1; std::string stdout; Glib::spawn_sync("", argv, /*Glib::SPAWN_DEFAULT*/Glib::SpawnFlags(0), sigc::slot(), &stdout, nullptr, &exit_status); if(exit_status != 0) { break; } std::istringstream iss(stdout); std::getline(iss, filename); return filename; } while(true); return std::string(); } static bool is_kde() { static bool is_kde = Glib::ustring(Glib::getenv("XDG_CURRENT_DESKTOP")).lowercase() == "kde" && Glib::file_test("/usr/bin/kdialog", Glib::FILE_TEST_EXISTS); return is_kde; } #endif FileDialogs::FileFilter FileDialogs::FileFilter::pixbuf_formats() { FileFilter filter; for(const Gdk::PixbufFormat& format : Gdk::Pixbuf::get_formats()) { for(const Glib::ustring& mime : format.get_mime_types()) { filter.mime_types.push_back(mime); } for(const Glib::ustring& extension : format.get_extensions()) { filter.patterns.push_back(Glib::ustring::compose("*.%1", extension)); } } return filter; } namespace FileDialogs { std::vector> open_dialog(const Glib::ustring& title, const std::string& initialDirectory, const std::string& initialDirSetting, const FileFilter& filter, bool multiple, Gtk::Window* parent) { std::vector> filenames; parent = parent == nullptr ? MAIN->getWindow() : parent; std::string initialDir = initialDirectory; if(initialDir.empty()) { initialDir = ConfigSettings::get>(initialDirSetting)->getValue(); if(initialDir.empty()) { initialDir = Utils::get_documents_dir(); } } #ifdef G_OS_WIN32 filenames = win32_open_dialog(title, initialDir, filter.to_win32_filter(), multiple, parent); #else if(is_kde()) { filenames = kde_open_dialog(title, initialDir, filter.to_kde_filter(), multiple, parent); } else { filenames = gnome_open_dialog(title, initialDir, filter.to_gnome_filter(), multiple, parent); } #endif if(!filenames.empty()) { ConfigSettings::get>(initialDirSetting)->setValue(Glib::path_get_dirname(filenames.front()->get_path())); } return filenames; } std::string open_folder_dialog(const Glib::ustring& title, const std::string& initialDirectory, const std::string& initialDirSetting, Gtk::Window* parent) { std::string folder; parent = parent == nullptr ? MAIN->getWindow() : parent; std::string initDir; if(!initialDirectory.empty()) { initDir = initialDirectory; } else { std::string initDir = ConfigSettings::get>(initialDirSetting)->getValue(); if(initDir.empty()) { initDir = Utils::get_documents_dir(); } } #ifdef G_OS_WIN32 folder = win32_open_folder_dialog(title, initDir, parent); #else if(is_kde()) { folder = kde_open_folder_dialog(title, initDir, parent); } else { folder = gnome_open_folder_dialog(title, initDir, parent); } #endif if(!folder.empty()) { ConfigSettings::get>(initialDirSetting)->setValue(Glib::path_get_dirname(folder)); } return folder; } std::string save_dialog(const Glib::ustring& title, const std::string& initialFilename, const std::string& initialDirSetting, const FileFilter& filter, bool generateUniqueName, Gtk::Window* parent) { std::string filename; parent = parent == nullptr ? MAIN->getWindow() : parent; std::string suggestedFile; if(!initialFilename.empty() && Glib::path_is_absolute(initialFilename)) { suggestedFile = initialFilename; } else { std::string initialDir = ConfigSettings::get>(initialDirSetting)->getValue(); if(initialDir.empty()) { initialDir = Utils::get_documents_dir(); } suggestedFile = Glib::build_filename(initialDir, initialFilename); if(generateUniqueName) { suggestedFile = Utils::make_output_filename(suggestedFile); } } #ifdef G_OS_WIN32 filename = win32_save_dialog(title, suggestedFile, filter.to_win32_filter(), parent); #else if(is_kde()) { filename = kde_save_dialog(title, suggestedFile, filter.to_kde_filter(), parent); } else { filename = gnome_save_dialog(title, suggestedFile, filter.to_gnome_filter(), parent); } #endif if(!filename.empty()) { std::pair sparts = Utils::split_filename(suggestedFile); std::pair parts = Utils::split_filename(filename); if(parts.second.empty()) { filename = parts.first + "." + sparts.second; } ConfigSettings::get>(initialDirSetting)->setValue(Glib::path_get_dirname(filename)); } return filename; } } // FileDialogs gImageReader-3.4.0/gtk/src/FileDialogs.hh000066400000000000000000000035301417507262200201200ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileDialogs.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FILEDIALOGS_HH #define FILEDIALOGS_HH #include "common.hh" namespace FileDialogs { struct FileFilter { std::string name; std::vector mime_types; std::vector patterns; #ifdef G_OS_WIN32 std::wstring to_win32_filter() const; #endif Glib::RefPtr to_gnome_filter() const; Glib::ustring to_kde_filter() const; static FileFilter pixbuf_formats(); }; std::vector > open_dialog(const Glib::ustring& title, const std::string& initialDirectory, const std::string& initialDirSetting, const FileFilter& filter, bool multiple, Gtk::Window* parent = nullptr); std::string open_folder_dialog(const Glib::ustring& title, const std::string& initialDirectory, const std::string& initialDirSetting, Gtk::Window* parent = nullptr); std::string save_dialog(const Glib::ustring& title, const std::string& initialFilename, const std::string& initialDirSetting, const FileFilter& filter, bool generateUniqueName = false, Gtk::Window* parent = nullptr); } // FileDialogs #endif // FILEDIALOGS_HH gImageReader-3.4.0/gtk/src/FileTreeModel.cc000066400000000000000000000473621417507262200204170ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileTreeModel.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "FileTreeModel.hh" #include "Utils.hh" #include #define DEBUG(...) //__VA_ARGS__ FileTreeModel::FileTreeModel() : Glib::ObjectBase("FileTreeModel") { } Gtk::TreePath FileTreeModel::get_root_path(int idx) const { Gtk::TreePath path; path.push_back(idx); return path; } void FileTreeModel::recursive_row_inserted(const Gtk::TreeIter& index) { DEBUG(std::cout << "Inserted: " << get_path(index).to_string() << std::endl;) row_inserted(get_path(index), index); for(const Gtk::TreeIter& childIndex : index->children()) { recursive_row_inserted(childIndex); } } Gtk::TreeIter FileTreeModel::insertFile(std::string filePath, DataObject* data, const Glib::ustring& displayName) { #ifdef G_OS_WIN32 Glib::ustring fileDir = std::string("/") + Glib::path_get_dirname(filePath); Utils::string_replace(fileDir, "\\", "/", true); filePath = std::string("/") + filePath; std::string tempPath = std::string("/") + Glib::get_tmp_dir(); #else std::string fileDir = Glib::path_get_dirname(filePath); std::string tempPath = Glib::get_tmp_dir(); #endif std::string fileName = Glib::path_get_basename(filePath); if(fileDir.substr(0, tempPath.length()) == tempPath) { Gtk::TreePath treePath = get_root_path(m_root ? 1 : 0); if(!m_tmpdir) { m_tmpdir = new DirNode(Glib::path_get_basename(tempPath), tempPath, nullptr, _("Temporary files")); row_inserted(treePath, get_iter(treePath)); } int pos = m_tmpdir->files.insIndex(fileName); m_tmpdir->files.add(new FileNode(fileName, filePath, m_tmpdir, data, displayName), pos); treePath.push_back(m_tmpdir->dirs.size() + pos); Gtk::TreeIter iter = get_iter(treePath); row_inserted(treePath, iter); return iter; } else if(!m_root) { // Set initial root Gtk::TreePath treePath = get_root_path(0); m_root = new DirNode(Glib::path_get_basename(fileDir), fileDir, nullptr); row_inserted(treePath, get_iter(treePath)); m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName)); treePath.push_back(0); Gtk::TreeIter iter = get_iter(treePath); row_inserted(treePath, iter); return iter; } else if(m_root->path == fileDir) { // Add to current root Gtk::TreePath treePath = get_root_path(0); int pos = m_root->files.insIndex(fileName); int row = m_root->dirs.size() + pos; m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName), pos); treePath.push_back(row); Gtk::TreeIter iter = get_iter(treePath); row_inserted(treePath, iter); return iter; } else if(m_root->path.substr(0, fileDir.length()) == fileDir) { // Root below new path, replace root std::vector path = Utils::string_split(m_root->path.substr(fileDir.length()), '/', false); DirNode* oldroot = m_root; m_root = nullptr; row_deleted(get_root_path(0)); m_root = new DirNode(Glib::path_get_basename(fileDir), fileDir, nullptr); DirNode* cur = m_root; for(int i = 0, n = path.size() - 1; i < n; ++i) { cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur)); } cur->dirs.add(oldroot); oldroot->parent = cur; int pos = m_root->files.insIndex(fileName); int row = m_root->dirs.size() + pos; m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName), pos); Gtk::TreePath treePath = get_root_path(0); recursive_row_inserted(get_iter(treePath)); treePath.push_back(row); return get_iter(treePath); } else if(fileDir.substr(0, m_root->path.length()) == m_root->path) { // New path below root, append to subtree std::vector path = Utils::string_split(fileDir.substr(m_root->path.length()), '/', false); DirNode* cur = m_root; Gtk::TreePath treePath = get_root_path(0); for(const Glib::ustring& part : path) { auto it = cur->dirs.find(part); int row = 0; if(it == cur->dirs.end()) { row = cur->dirs.insIndex(part); cur = cur->dirs.add(new DirNode(part, cur->path + "/" + part, cur), row); treePath.push_back(row); row_inserted(treePath, get_iter(treePath)); } else { treePath.push_back(cur->dirs.index(it)); cur = *it; } } int pos = cur->files.insIndex(fileName); int row = cur->dirs.size() + pos; cur->files.add(new FileNode(fileName, filePath, cur, data, displayName), pos); treePath.push_back(row); row_inserted(treePath, get_iter(treePath)); return get_iter(treePath); } else { // Unrelated trees, find common ancestor std::vector rootPath = Utils::string_split(m_root->path, '/', false); std::vector newPath = Utils::string_split(fileDir, '/', false); int pos = 0; for(int n = std::min(rootPath.size(), newPath.size()); pos < n; ++pos) { if(rootPath[pos] != newPath[pos]) { break; } } std::string newRoot = std::string("/") + Utils::string_join(Utils::vector_slice(rootPath, 0, pos), "/"); DirNode* oldroot = m_root; m_root = nullptr; row_deleted(get_root_path(0)); m_root = new DirNode(Glib::path_get_basename(newRoot), newRoot, nullptr); // Insert old root and new branch // - Old root DirNode* cur = m_root; std::vector path = Utils::vector_slice(rootPath, pos); for(int i = 0, n = path.size() - 1; i < n; ++i) { cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur)); } cur->dirs.add(oldroot); oldroot->parent = cur; // - New branch cur = m_root; path = Utils::vector_slice(newPath, pos); Gtk::TreePath treePath = get_root_path(0); for(int i = 0, n = path.size(); i < n; ++i) { int pos = cur->dirs.insIndex(path[i]); cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur), pos); treePath.push_back(pos); } cur->files.add(new FileNode(fileName, filePath, cur, data, displayName)); recursive_row_inserted(get_iter(get_root_path(0))); treePath.push_back(0); return get_iter(treePath); } } Gtk::TreeIter FileTreeModel::findFile(const std::string& filePath, bool isFile) const { if(!m_root && !m_tmpdir) { return Gtk::TreeIter(); } #ifdef G_OS_WIN32 std::string prefix = "/"; Glib::ustring fileDir = std::string("/") + Glib::path_get_dirname(filePath); Utils::string_replace(fileDir, "\\", "/", true); std::string tempPath = std::string("/") + Glib::get_tmp_dir(); #else std::string prefix; std::string fileDir = Glib::path_get_dirname(filePath); std::string tempPath = Glib::get_tmp_dir(); #endif std::string fileName = Glib::path_get_basename(filePath); // Path is root dir if(!isFile && m_root && prefix + filePath == m_root->path) { return const_cast(this)->get_iter(get_root_path(0)); } // Path is temp dir else if(!isFile && m_tmpdir && prefix + filePath == m_tmpdir->path) { return const_cast(this)->get_iter(get_root_path(m_root ? 1 : 0)); } // Path is below root or tempdir DirNode* cur = nullptr; Gtk::TreePath treePath; if(m_tmpdir && fileDir.substr(0, m_tmpdir->path.length()) == m_tmpdir->path) { cur = m_tmpdir; treePath = get_root_path(m_root ? 1 : 0); } else if(m_root && fileDir.substr(0, m_root->path.length()) == m_root->path) { cur = m_root; treePath = get_root_path(0); } if(!cur) { return Gtk::TreeIter(); } std::string relPath = fileDir.substr(cur->path.length()); std::vector parts = Utils::string_split(relPath, '/', false); for(const Glib::ustring& part : parts) { auto it = cur->dirs.find(part); if(it == cur->dirs.end()) { return Gtk::TreeIter(); } treePath.push_back(cur->dirs.index(*it)); cur = *it; } if(isFile) { auto it = cur->files.find(fileName); if(it != cur->files.end()) { treePath.push_back(cur->dirs.size() + cur->files.index(*it)); return const_cast(this)->get_iter(treePath); } else { return Gtk::TreeIter(); } } else { auto it = cur->dirs.find(fileName); if(it != cur->dirs.end()) { treePath.push_back(cur->dirs.index(*it)); return const_cast(this)->get_iter(treePath); } else { return Gtk::TreeIter(); } } } bool FileTreeModel::removeIndex(const Gtk::TreeIter& index) { if(!index) { return false; } Node* node = static_cast(index.gobj()->user_data); // Remove entire branch bool isFile = dynamic_cast(node); Node* deleteNode = node; Gtk::TreeIter deleteIndex = index; while(deleteNode->parent && deleteNode->parent->childCount() == 1) { isFile = false; deleteNode = deleteNode->parent; deleteIndex = deleteIndex->parent(); } Gtk::TreePath deletePath = get_path(deleteIndex); if(deleteNode == m_root) { delete m_root; m_root = nullptr; } else if(deleteNode == m_tmpdir) { delete m_tmpdir; m_tmpdir = nullptr; } else { if(isFile) { delete deleteNode->parent->files.take(static_cast(deleteNode)); } else { delete deleteNode->parent->dirs.take(static_cast(deleteNode)); } } row_deleted(deletePath); return true; } void FileTreeModel::clear() { if(m_root || m_tmpdir) { std::vector delPaths; if(m_root) { delPaths.push_back(get_root_path(0)); } if(m_tmpdir) { delPaths.push_back(get_root_path(m_root ? 1 : 0)); } delete m_root; m_root = nullptr; delete m_tmpdir; m_tmpdir = nullptr; for(const Gtk::TreePath& path : delPaths) { row_deleted(path); } } } bool FileTreeModel::isDir(const Gtk::TreeIter& index) const { if(!index) { return false; } return dynamic_cast(static_cast(index.gobj()->user_data)) != nullptr; } void FileTreeModel::setFileEditable(const Gtk::TreeIter& index, bool editable) { Node* node = static_cast(index.gobj()->user_data); if(dynamic_cast(node)) { static_cast(node)->editable = editable; row_changed(get_path(index), index); } } bool FileTreeModel::isFileEditable(const Gtk::TreeIter& index) const { Node* node = static_cast(index.gobj()->user_data); return dynamic_cast(node) && static_cast(node)->editable; } DataObject* FileTreeModel::fileData(const Gtk::TreeIter& index) const { FileNode* node = dynamic_cast(static_cast(index.gobj()->user_data)); return node ? node->data : nullptr; } Gtk::TreeModelFlags FileTreeModel::get_flags_vfunc() const { return Gtk::TREE_MODEL_ITERS_PERSIST; } GType FileTreeModel::get_column_type_vfunc(int index) const { if(index == COLUMN_ICON) { return Glib::Value>::value_type(); } else if(index == COLUMN_TEXT) { return Glib::Value::value_type(); } else if(index == COLUMN_TOOLTIP) { return Glib::Value::value_type(); } else if(index == COLUMN_TEXTSTYLE) { return Glib::Value::value_type(); } else if(index == COLUMN_EDITICON) { return Glib::Value>::value_type(); } return G_TYPE_INVALID; } int FileTreeModel::get_n_columns_vfunc() const { return NUM_COLUMNS; } bool FileTreeModel::iter_next_vfunc(const iterator& iter, iterator& iter_next) const { DEBUG(std::cout << "iter_next_vfunc " << get_path(iter).to_string() << ": ";) if(!iter) { return false; } Node* node = static_cast(iter.gobj()->user_data); Node* nextItem = nullptr; // Tempdir follows root if(node->parent) { nextItem = node->parent->nextNode(node); if(!nextItem && node->parent == m_root && m_tmpdir) { nextItem = m_tmpdir->firstNode(); } } else if(node == m_root && m_tmpdir) { nextItem = m_tmpdir; } iter_next.gobj()->user_data = nextItem; iter_next.set_stamp(iter_next.gobj()->user_data != nullptr); DEBUG(std::cout << (iter_next.gobj()->user_data != nullptr) << std::endl;) return iter_next.gobj()->user_data != nullptr; } bool FileTreeModel::get_iter_vfunc(const Path& path, iterator& iter) const { DEBUG(std::cout << "get_iter_vfunc " << path.to_string() << ": ";) if(path.empty() || (!m_root && !m_tmpdir)) { DEBUG(std::cout << "0" << std::endl;) return false; } int idx = 0, size = path.size(); Node* item = path[idx++] == 0 ? m_root ? m_root : m_tmpdir : m_tmpdir; while(item && idx < size) { item = static_cast(item)->child(path[idx++]); } iter.gobj()->user_data = item; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (item != nullptr) << std::endl;) return item != nullptr; } bool FileTreeModel::iter_children_vfunc(const iterator& parent, iterator& iter) const { DEBUG(std::cout << "iter_children_vfunc " << get_path(parent).to_string() << ": ";) DirNode* parentNode = dynamic_cast(static_cast(parent.gobj()->user_data)); iter.gobj()->user_data = parentNode ? parentNode->firstNode() : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool FileTreeModel::iter_parent_vfunc(const iterator& child, iterator& iter) const { DEBUG(std::cout << "iter_parent_vfunc " << get_path(child).to_string() << ": ";) Node* childNode = static_cast(child.gobj()->user_data); iter.gobj()->user_data = childNode ? childNode->parent : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool FileTreeModel::iter_nth_child_vfunc(const iterator& parent, int n, iterator& iter) const { DEBUG(std::cout << "iter_nth_child_vfunc " << get_path(parent).to_string() << "@" << n << ": ";) DirNode* parentNode = static_cast(parent.gobj()->user_data); iter.gobj()->user_data = parentNode ? parentNode->child(n) : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool FileTreeModel::iter_nth_root_child_vfunc(int n, iterator& iter) const { DEBUG(std::cout << "iter_nth_root_child_vfunc " << n << ": ";) Node* childNode = nullptr; if(m_root && m_tmpdir) { childNode = n == 0 ? m_root : n == 1 ? m_tmpdir : nullptr; } else if(m_root) { childNode = n == 0 ? m_root : nullptr; } else if(m_tmpdir) { childNode = n == 0 ? m_tmpdir : nullptr; } iter.gobj()->user_data = childNode; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool FileTreeModel::iter_has_child_vfunc(const iterator& iter) const { DEBUG(std::cout << "iter_parent_vfunc " << get_path(iter).to_string() << ": ";) Node* node = static_cast(iter.gobj()->user_data); bool haveChild = dynamic_cast(node) && static_cast(node)->childCount() > 0; DEBUG(std::cout << haveChild << std::endl;) return haveChild; } int FileTreeModel::iter_n_children_vfunc(const iterator& iter) const { DEBUG(std::cout << "iter_n_children_vfunc " << get_path(iter).to_string() << ": ";) Node* node = static_cast(iter.gobj()->user_data); int numChild = dynamic_cast(node) ? static_cast(node)->childCount() : 0; DEBUG(std::cout << numChild << std::endl;) return numChild; } int FileTreeModel::iter_n_root_children_vfunc() const { int nRoot = (m_root != nullptr) + (m_tmpdir != nullptr); DEBUG(std::cout << "iter_n_root_children_vfunc " << nRoot << std::endl;) return nRoot; } Gtk::TreeModel::Path FileTreeModel::get_path_vfunc(const iterator& iter) const { Gtk::TreeModel::Path path; Node* node = static_cast(iter.gobj()->user_data); while(node) { int index = -1; if(node->parent) { index = node->parent->childIndex(node); } else { if(node == m_root) { index = 0; } else if(node == m_tmpdir) { index = m_root ? 1 : 0; } } path.push_front(index); node = node->parent; } return path; } template static void setValue(Glib::ValueBase& gvalue, const T& value) { Glib::Value val; val.init(val.value_type()); val.set(value); gvalue.init(val.gobj()); } void FileTreeModel::get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const { DEBUG(std::cout << "get_value_vfunc Column " << column << " at path " << get_path(iter).to_string() << std::endl); Node* node = static_cast(iter.gobj()->user_data); if(!node) { return; } else if(column == COLUMN_ICON) { Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); bool uncertain = false; Glib::ustring contentType = dynamic_cast(node) ? "inode/directory" : Gio::content_type_guess(node->path, nullptr, 0, uncertain); Glib::RefPtr icon = Gio::content_type_get_icon(contentType); Glib::RefPtr themedIcon = Glib::RefPtr::cast_dynamic(icon); if (themedIcon) { setValue(value, iconTheme->choose_icon(themedIcon->get_names(), 16).load_icon()); } } else if(column == COLUMN_TEXT) { setValue(value, !node->displayName.empty() ? node->displayName : node->fileName); } else if(column == COLUMN_TOOLTIP) { #ifdef G_OS_WIN32 setValue(value, node->path.substr(1)); #else setValue(value, node->path); #endif } else if(column == COLUMN_TEXTSTYLE) { setValue(value, m_tmpdir && node->parent == m_tmpdir ? Pango::STYLE_NORMAL : Pango::STYLE_NORMAL); } else if(column == COLUMN_EDITICON) { bool editable = dynamic_cast(node) && static_cast(node)->editable; Glib::RefPtr icon = editable ? Gtk::IconTheme::get_default()->load_icon("document-edit", 16) : Glib::RefPtr(nullptr); setValue(value, icon); } } void FileTreeModel::set_value_impl(const iterator& /*row*/, int /*column*/, const Glib::ValueBase& /*value*/) { // Not editable } void FileTreeModel::get_value_impl(const iterator& row, int column, Glib::ValueBase& value) const { get_value_vfunc(row, column, value); } template T FileTreeModel::NodeList::add(T node) { auto it = std::lower_bound(this->begin(), this->end(), node->fileName, [](const T & a, const Glib::ustring & b) { return a->fileName.compare(b) < 0; }); this->insert(it, node); return node; } template T FileTreeModel::NodeList::add(T node, int pos) { auto it = this->begin(); std::advance(it, pos); this->insert(it, node); return node; } template T FileTreeModel::NodeList::take(T node) { auto it = find(node->fileName); if(it != this->end()) { this->erase(it); return node; } return nullptr; } template typename FileTreeModel::NodeList::const_iterator FileTreeModel::NodeList::find(const Glib::ustring& fileName) const { auto it = std::lower_bound(this->begin(), this->end(), fileName, [](const T & a, const Glib::ustring & b) { return a->fileName.compare(b) < 0; }); return it == this->end() ? it : (*it)->fileName == fileName ? it : this->end(); } template int FileTreeModel::NodeList::insIndex(const Glib::ustring& fileName) const { auto it = std::lower_bound(this->begin(), this->end(), fileName, [](const T & a, const Glib::ustring & b) { return a->fileName.compare(b) < 0; }); return std::distance(this->begin(), it); } template int FileTreeModel::NodeList::index(T node) const { auto it = std::lower_bound(this->begin(), this->end(), node->fileName, [](const T & a, const Glib::ustring & b) { return a->fileName.compare(b) < 0; }); return std::distance(this->begin(), it); } template int FileTreeModel::NodeList::index(const_iterator it) const { return std::distance(this->begin(), it); } gImageReader-3.4.0/gtk/src/FileTreeModel.hh000066400000000000000000000127021417507262200204170ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileTreeModel.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FILETREEMODEL_HH #define FILETREEMODEL_HH #include "common.hh" #include class FileTreeModel : public Gtk::TreeModel, public Glib::Object { public: enum Columns { COLUMN_ICON, COLUMN_TEXT, COLUMN_TOOLTIP, COLUMN_TEXTSTYLE, COLUMN_EDITICON, NUM_COLUMNS}; FileTreeModel(); Gtk::TreeIter insertFile(std::string filePath, DataObject* data, const Glib::ustring& displayName = Glib::ustring()); Gtk::TreeIter findFile(const std::string& filePath, bool isFile = true) const; bool removeIndex(const Gtk::TreeIter& index); void clear(); bool isDir(const Gtk::TreeIter& index) const; void setFileEditable(const Gtk::TreeIter& index, bool editable); bool isFileEditable(const Gtk::TreeIter& index) const; template T fileData(const Gtk::TreeIter& index) const { return static_cast(fileData(index)); } DataObject* fileData(const Gtk::TreeIter& index) const; bool empty() const { return m_root == nullptr && m_tmpdir == nullptr; } private: Gtk::TreePath get_root_path(int idx) const; void recursive_row_inserted(const Gtk::TreeIter& index); Gtk::TreeModelFlags get_flags_vfunc() const override; GType get_column_type_vfunc(int index) const override; int get_n_columns_vfunc() const override; bool iter_next_vfunc(const iterator& iter, iterator& iter_next) const override; bool get_iter_vfunc(const Path& path, iterator& iter) const override; bool iter_children_vfunc(const iterator& parent, iterator& iter) const override; bool iter_parent_vfunc(const iterator& child, iterator& iter) const override; bool iter_nth_child_vfunc(const iterator& parent, int n, iterator& iter) const override; bool iter_nth_root_child_vfunc(int n, iterator& iter) const override; bool iter_has_child_vfunc(const iterator& iter) const override; int iter_n_children_vfunc(const iterator& iter) const override; int iter_n_root_children_vfunc() const override; // void ref_node_vfunc(const iterator& iter) const override; // void unref_node_vfunc(const iterator& iter) const override; Gtk::TreeModel::Path get_path_vfunc(const iterator& iter) const override; void get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const override; void set_value_impl(const iterator& row, int column, const Glib::ValueBase& value) override; void get_value_impl(const iterator& row, int column, Glib::ValueBase& value) const override; private: template class NodeList : public std::vector { public: typedef typename std::vector::iterator iterator; typedef typename std::vector::const_iterator const_iterator; T add(T node); T add(T node, int pos); T take(T node); const_iterator find(const Glib::ustring& fileName) const; int insIndex(const Glib::ustring& fileName) const; int index(T node) const; int index(const_iterator it) const; }; struct DirNode; struct Node { Node(const Glib::ustring& _fileName, const std::string& _path, DirNode* _parent, const Glib::ustring& _displayName = Glib::ustring()) : fileName(_fileName), path(_path), displayName(_displayName), parent(_parent) {} virtual ~Node() = default; Glib::ustring fileName; std::string path; Glib::ustring displayName; DirNode* parent = nullptr; }; struct FileNode : Node { FileNode(const Glib::ustring& _fileName, const std::string& _path, DirNode* _parent, DataObject* _data, const Glib::ustring& _displayName) : Node(_fileName, _path, _parent, _displayName), data(_data) {} ~FileNode() { delete data; } bool editable = false; DataObject* data = nullptr; }; struct DirNode : Node { using Node::Node; ~DirNode() { for(DirNode* dir : dirs) { delete dir; } for(FileNode* file : files) { delete file; } } NodeList dirs; NodeList files; int childCount() const { return dirs.size() + files.size(); } int childIndex(Node* node) const { bool isDir = dynamic_cast(node); return isDir ? dirs.index(static_cast(node)) : (dirs.size() + files.index(static_cast(node))); } Node* firstNode() const { return dirs.empty() ? files.empty() ? nullptr : static_cast(files[0]) : static_cast(dirs[0]); } Node* child(int index) { return index >= int(dirs.size()) ? static_cast(files[index - dirs.size()]) : static_cast(dirs[index]); } Node* nextNode(Node* node) const { int index = (dynamic_cast(node) ? dirs.index(static_cast(node)) : dirs.size() + files.index(static_cast(node))) + 1; return index < int(dirs.size()) ? static_cast(dirs[index]) : index < childCount() ? static_cast(files[index - dirs.size()]) : nullptr; } }; DirNode* m_root = nullptr; DirNode* m_tmpdir = nullptr; }; #endif // FILETREEMODEL_HH gImageReader-3.4.0/gtk/src/FontComboBox.cc000066400000000000000000000051021417507262200202600ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FontComboBox.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "FontComboBox.hh" FontComboBox::FontComboColums FontComboBox::s_fontComboCols; FontComboBox::FontComboBox() : Glib::ObjectBase("FontComboBox"), Gtk::ComboBox(true) { init(); } FontComboBox::FontComboBox(BaseObjectType* cobject, const Glib::RefPtr& builder) : Glib::ObjectBase("FontComboBox"), Gtk::ComboBox(cobject) { init(); } void FontComboBox::init() { set_model(getModel()); set_entry_text_column(s_fontComboCols.fontFamily); add_attribute(*get_first_cell(), "family", s_fontComboCols.fontFamily); Glib::RefPtr completion = Gtk::EntryCompletion::create(); completion->set_model(getModel()); completion->set_text_column(s_fontComboCols.fontFamily); get_entry()->set_completion(completion); CONNECT(this, changed, [this] { m_signal_font_changed.emit(get_active_font()); }); } Glib::ustring FontComboBox::get_active_font() const { return get_entry()->get_text(); } void FontComboBox::set_active_font(const Glib::ustring& font) { get_entry()->set_text(font); } Glib::RefPtr FontComboBox::getModel() { static Glib::RefPtr fontComboModel; if(!fontComboModel) { std::vector fontFamilies; Glib::RefPtr fontMap = Glib::wrap(pango_cairo_font_map_get_default(), true); for(const Glib::RefPtr& family : fontMap->list_families()) { fontFamilies.push_back(family->get_name()); } std::sort(fontFamilies.begin(), fontFamilies.end(), [](const Glib::ustring & a, const Glib::ustring & b) { return a.casefold().compare(b.casefold()) < 0; }); fontComboModel = Gtk::ListStore::create(s_fontComboCols); for(const Glib::ustring& family : fontFamilies) { (*fontComboModel->append())[s_fontComboCols.fontFamily] = family; } } return fontComboModel; } gImageReader-3.4.0/gtk/src/FontComboBox.hh000066400000000000000000000031211417507262200202710ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FontComboBox.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FONTCOMBOBOX_HH #define FONTCOMBOBOX_HH #include "common.hh" class FontComboBox : public Gtk::ComboBox { public: FontComboBox(); FontComboBox(BaseObjectType* cobject, const Glib::RefPtr& builder); Glib::ustring get_active_font() const; void set_active_font(const Glib::ustring& font); sigc::signal signal_font_changed() { return m_signal_font_changed; } private: ClassData m_classdata; sigc::signal m_signal_font_changed; struct FontComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn fontFamily; FontComboColums() { add(fontFamily); } }; void init(); static FontComboColums s_fontComboCols; static Glib::RefPtr getModel(); }; #endif // FONTCOMBOBOX_HH gImageReader-3.4.0/gtk/src/Geometry.hh000066400000000000000000000073271417507262200175410ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Geometry.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef GEOMETRY_HH #define GEOMETRY_HH #include "common.hh" namespace Geometry { class Point { public: union { double data[2]; struct { double x, y; }; }; Point(double _x = 0., double _y = 0.) : x(_x), y(_y) {} double operator[](int i) const { return data[i]; } double& operator[](int i) { return data[i]; } }; class Rotation { public: Rotation(double angle = 0.) { double cosa = std::cos(angle), sina = std::sin(angle); m_data[0] = cosa; m_data[1] = -sina; m_data[2] = sina; m_data[3] = cosa; } Point rotate(const Point& p) const { return Point(m_data[0] * p.x + m_data[1] * p.y, m_data[2] * p.x + m_data[3] * p.y); } double operator()(int i, int j) const { return m_data[2 * i + j]; } private: double m_data[4]; }; class Rectangle { public: double x, y; double width, height; Rectangle(double _x = 0., double _y = 0., double _width = -1., double _height = -1.) : x(_x), y(_y), width(_width), height(_height) {} Rectangle(const Point& p1, const Point& p2) { setCoords(p1.x, p1.y, p2.x, p2.y); } void setCoords(double x1, double y1, double x2, double y2) { x = std::min(x1, x2); y = std::min(y1, y2); width = std::abs(x2 - x1); height = std::abs(y2 - y1); } bool contains(const Point& p) const { if(isEmpty()) { return false; } return p.x >= x && p.x <= x + width && p.y >= y && p.y <= y + height; } bool overlaps(const Rectangle& r) const { if(isEmpty() || r.isEmpty()) { return false; } return x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y; } Rectangle unite(const Rectangle& r) const { if(isEmpty() && r.isEmpty()) { return Rectangle(); } else if(isEmpty()) { return r; } else if(r.isEmpty()) { return *this; } double _x = std::min(x, r.x); double _y = std::min(y, r.y); double _w = std::max(x + width, r.x + r.width) - _x; double _h = std::max(y + height, r.y + r.height) - _y; return Rectangle(_x, _y, _w, _h); } Rectangle translate(double dx, double dy) const { return Rectangle(x + dx, y + dy, width, height); } bool isEmpty() const { return width < 0. || height < 0.; } Point topLeft() const { return Point(x, y); } Point topRight() const { return Point(x + width, y); } Point bottomLeft() const { return Point(x, y + height); } Point bottomRight() const { return Point(x + width, y + height); } double left() const { return x; } double right() const { return x + width; } double top() const { return y; } double bottom() const { return y + height; } void setTop(double y1) { double y2 = y + height; y = std::min(y1, y2); height = std::abs(y2 - y1); } void setBottom(double y2) { double y1 = y; y = std::min(y1, y2); height = std::abs(y2 - y1); } void setLeft(double x1) { double x2 = x + width; x = std::min(x1, x2); width = std::abs(x2 - x1); } void setRight(double x2) { double x1 = x; x = std::min(x1, x2); width = std::abs(x2 - x1); } }; } #endif // GEOMETRY_HH gImageReader-3.4.0/gtk/src/Image.cc000066400000000000000000000163411417507262200167520ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Geometry.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Image.hh" #include #include #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ # define PIXEL_A(x) x[3] # define PIXEL_R(x) x[2] # define PIXEL_G(x) x[1] # define PIXEL_B(x) x[0] #else # define PIXEL_A(x) x[3] # define PIXEL_R(x) x[2] # define PIXEL_G(x) x[1] # define PIXEL_B(x) x[0] #endif static inline uint8_t clamp(int val) { return val > 255 ? 255 : val < 0 ? 0 : val; } Image::Image(Cairo::RefPtr src, Format targetFormat, ConversionFlags flags) { width = src->get_width(); height = src->get_height(); format = targetFormat; int stride = src->get_stride(); if(format == Format_RGB24) { sampleSize = 8; bytesPerLine = 3 * width; data = new uint8_t[width * height * 3]; #pragma omp parallel for schedule(static) for(int y = 0; y < height; ++y) { for(int x = 0; x < width; ++x) { uint8_t* srcpx = &src->get_data()[y * stride + 4 * x]; uint8_t* dstpx = &data[y * bytesPerLine + 3 * x]; dstpx[0] = PIXEL_R(srcpx); dstpx[1] = PIXEL_G(srcpx); dstpx[2] = PIXEL_B(srcpx); } } } else if(format == Format_Gray8 || format == Format_Mono) { sampleSize = 8; bytesPerLine = width; data = new uint8_t[width * height]; #pragma omp parallel for schedule(static) for(int y = 0; y < height; ++y) { for(int x = 0; x < width; ++x) { uint8_t* srcpx = &src->get_data()[y * stride + 4 * x]; data[y * bytesPerLine + x] = 0.21 * PIXEL_R(srcpx) + 0.72 * PIXEL_G(srcpx) + 0.07 * PIXEL_B(srcpx); } } if(format == Format_Mono) { sampleSize = 1; bytesPerLine = width / 8 + (width % 8 != 0); uint8_t* newdata = new uint8_t[height * bytesPerLine]; std::memset(newdata, 0, std::size_t(height) * bytesPerLine); // Dithering: https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering for(int y = 0; y < height; ++y) { for(int x = 0; x < width; ++x) { uint8_t oldpixel = data[y * width + x]; uint8_t newpixel = oldpixel > 127 ? 255 : 0; int err = int(oldpixel) - int(newpixel); if(newpixel == 255) { newdata[y * bytesPerLine + x / 8] |= 0x80 >> x % 8; } if(flags == DiffuseDithering) { if(x + 1 < width) { // right neighbor uint8_t& pxr = data[y * width + (x + 1)]; pxr = clamp(pxr + ((err * 7) >> 4)); } if(y + 1 == height) { continue; // last line } if(x > 0) { // bottom left and bottom neighbor uint8_t& pxbl = data[(y + 1) * width + (x - 1)]; pxbl = clamp(pxbl + ((err * 3) >> 4)); uint8_t& pxb = data[(y + 1) * width + x]; pxb = clamp(pxb + ((err * 5) >> 4)); } if(x + 1 < width) { // bottom right neighbor uint8_t& pxbr = data[(y + 1) * width + (x + 1)]; pxbr = clamp(pxbr + ((err * 1) >> 4)); } } } } delete[] data; data = newdata; } } } void Image::writeJpeg(int quality, uint8_t*& buf, unsigned long& bufLen) { buf = nullptr; bufLen = 0; if(format == Format_Mono) { return; // not supported by jpeg } // https://github.com/LuaDist/libjpeg/blob/master/example.c jpeg_compress_struct cinfo; jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_mem_dest(&cinfo, &buf, &bufLen); cinfo.image_width = width; cinfo.image_height = height; cinfo.input_components = format == Format_RGB24 ? 3 : 1; cinfo.in_color_space = format == Format_RGB24 ? JCS_RGB : JCS_GRAYSCALE; jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, true); jpeg_start_compress(&cinfo, true); JSAMPROW row_pointer[1]; while (cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = &data[cinfo.next_scanline * bytesPerLine]; jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); } Cairo::RefPtr Image::simulateFormat(Cairo::RefPtr src, Format format, ConversionFlags flags) { int imgw = src->get_width(); int imgh = src->get_height(); int stride = src->get_stride(); if(format == Format_Gray8 || format == Format_Mono) { Cairo::RefPtr dst = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, imgw, imgh); dst->flush(); #pragma omp parallel for schedule(static) for(int y = 0; y < imgh; ++y) { for(int x = 0; x < imgw; ++x) { int offset = y * stride + 4 * x; uint8_t* srcpx = &src->get_data()[offset]; uint8_t* dstpx = &dst->get_data()[offset]; uint8_t gray = 0.21 * PIXEL_R(srcpx) + 0.72 * PIXEL_G(srcpx) + 0.07 * PIXEL_B(srcpx); PIXEL_A(dstpx) = 255; PIXEL_R(dstpx) = gray; PIXEL_G(dstpx) = gray; PIXEL_B(dstpx) = gray; } } if(format == Format_Mono) { // Dithering: https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering for(int y = 0; y < imgh; ++y) { for(int x = 0; x < imgw; ++x) { uint8_t* px = &dst->get_data()[y * stride + 4 * x]; uint8_t newpixel = PIXEL_R(px) > 127 ? 255 : 0; int err = int(PIXEL_R(px)) - int(newpixel); PIXEL_R(px) = PIXEL_G(px) = PIXEL_B(px) = newpixel; if(flags == DiffuseDithering) { if(x + 1 < imgw) { // right neighbor px = &dst->get_data()[y * stride + 4 * (x + 1)]; PIXEL_R(px) = PIXEL_G(px) = PIXEL_B(px) = clamp(PIXEL_R(px) + ((err * 7) >> 4)); } if(y + 1 == imgh) { continue; // last line } if(x > 0) { // bottom left and bottom neighbor px = &dst->get_data()[(y + 1) * stride + 4 * (x - 1)]; PIXEL_R(px) = PIXEL_G(px) = PIXEL_B(px) = clamp(PIXEL_R(px) + ((err * 3) >> 4)); px = &dst->get_data()[(y + 1) * stride + 4 * x]; PIXEL_R(px) = PIXEL_G(px) = PIXEL_B(px) = clamp(PIXEL_R(px) + ((err * 5) >> 4)); } if(x + 1 < imgw) { // bottom right neighbor px = &dst->get_data()[(y + 1) * stride + 4 * (x + 1)]; PIXEL_R(px) = PIXEL_G(px) = PIXEL_B(px) = clamp(PIXEL_R(px) + ((err * 1) >> 4)); } } } } } dst->mark_dirty(); return dst; } return src; } Cairo::RefPtr Image::scale(Cairo::RefPtr src, double scaleFactor) { if(scaleFactor == 1.0) { return src; } Cairo::RefPtr dst = Cairo::ImageSurface::create(src->get_format(), std::ceil(src->get_width() * scaleFactor), std::ceil(src->get_height() * scaleFactor)); Cairo::RefPtr ctx = Cairo::Context::create(dst); ctx->scale(scaleFactor, scaleFactor); ctx->set_source(src, 0, 0); Cairo::RefPtr::cast_static(ctx->get_source())->set_filter(Cairo::FILTER_BEST); ctx->paint(); dst->flush(); return dst; } gImageReader-3.4.0/gtk/src/Image.hh000066400000000000000000000032531417507262200167620ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Geometry.hh * Copyright (C) 2016-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef IMAGE_HH #define IMAGE_HH #include class Image { public: enum Format {Format_RGB24 = 0, Format_Gray8 = 1, Format_Mono = 2} format; // This order needs to be the same as combo:pdfoptions.imageformat enum ConversionFlags { AutoColor = 0, ThresholdDithering = 1, DiffuseDithering = 2} conversionFlags; int width; int height; int sampleSize; int bytesPerLine; unsigned char* data = nullptr; Image(Cairo::RefPtr src, Format targetFormat, ConversionFlags flags); ~Image() { delete[] data; } void writeJpeg(int quality, uint8_t*& buf, unsigned long& bufLen); static Cairo::RefPtr simulateFormat(Cairo::RefPtr src, Format format, ConversionFlags flags); static Cairo::RefPtr scale(Cairo::RefPtr src, double scaleFactor); }; #endif // IMAGEUTILS_HH gImageReader-3.4.0/gtk/src/MainWindow.cc000066400000000000000000000564271417507262200200150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * MainWindow.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Application.hh" #include "MainWindow.hh" #include "Acquirer.hh" #include "Config.hh" #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayerToolHOCR.hh" #include "DisplayerToolSelect.hh" #include "OutputEditorHOCR.hh" #include "OutputEditorText.hh" #include "HOCRBatchExportDialog.hh" #include "RecognitionMenu.hh" #include "Recognizer.hh" #include "SourceManager.hh" #include "TessdataManager.hh" #include "Utils.hh" #include #include #include #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif #ifdef G_OS_UNIX #include #endif #ifdef __linux__ #include #include #endif #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #if ENABLE_VERSIONCHECK #define CHECKURL "https://raw.githubusercontent.com/manisandro/gImageReader/master/LATEST" #define DOWNLOADURL "https://github.com/manisandro/gImageReader/releases" #define CHANGELOGURL "https://raw.githubusercontent.com/manisandro/gImageReader/master/NEWS" #endif // ENABLE_VERSIONCHECK static Glib::Quark notificationHandleKey("handle"); void MainWindow::signalHandler(int sig) { signalHandlerExec(sig, false); } void MainWindow::tesseractCrash(int signal) { signalHandlerExec(signal, true); } void MainWindow::signalHandlerExec(int sig, bool tesseractCrash) { std::signal(sig, nullptr); std::string filename; if(MAIN->getOutputEditor()) { filename = Glib::build_filename(g_get_home_dir(), Glib::ustring::compose("%1_crash-save.txt", PACKAGE_NAME)); int i = 0; while(Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) { ++i; filename = Glib::build_filename(g_get_home_dir(), Glib::ustring::compose("%1_crash-save_%2.txt", PACKAGE_NAME, i)); } if(!MAIN->getOutputEditor()->crashSave(filename)) { filename.clear(); } } Glib::Pid pid; Glib::spawn_async("", std::vector {pkgExePath, "crashhandle", Glib::ustring::compose("%1", getpid()), Glib::ustring::compose("%1", tesseractCrash), filename}, Glib::SPAWN_DO_NOT_REAP_CHILD, sigc::slot(), &pid); #ifdef G_OS_WIN32 WaitForSingleObject((HANDLE)pid, 0); #elif __linux__ // Allow crash handler spawned debugger to attach to the crashed process prctl(PR_SET_PTRACER, pid, 0, 0, 0); waitpid(pid, 0, 0); #endif std::raise(sig); } #if !(defined(__ARMEL__) || defined(__LCC__) && __LCC__ <= 121) static void terminateHandler() { std::set_terminate(nullptr); std::exception_ptr exptr = std::current_exception(); if (exptr != 0) { try { std::rethrow_exception(exptr); } catch (std::exception& ex) { std::cerr << "Terminated due to exception: " << ex.what() << std::endl; } catch (...) { std::cerr << "Terminated due to unknown exception" << std::endl; } } else { std::cerr << "Terminated due to unknown reason:" << std::endl; } MainWindow::signalHandler(SIGABRT); } #endif MainWindow* MainWindow::s_instance = nullptr; MainWindow::MainWindow() { s_instance = this; std::signal(SIGSEGV, signalHandler); std::signal(SIGABRT, signalHandler); #if !(defined(__ARMEL__) || defined(__LCC__) && __LCC__ <= 121) std::set_terminate(terminateHandler); #endif ui.setupUi(); ui.windowMain->set_icon_name("gimagereader"); ui.dialogAbout->set_version(Glib::ustring::compose("%1 (%2)", PACKAGE_VERSION, Glib::ustring(PACKAGE_REVISION).substr(0, 7))); ui.labelAboutTesseractver->set_markup(Glib::ustring::compose("%1 %2", _("Using tesseract"), TESSERACT_VERSION_STR)); m_config = new Config; m_acquirer = new Acquirer(ui); m_displayer = new Displayer(ui); m_recognitionMenu = new RecognitionMenu(); m_recognizer = new Recognizer(ui); m_sourceManager = new SourceManager(ui); m_idlegroup.push_back(ui.buttonZoomin); m_idlegroup.push_back(ui.buttonZoomout); m_idlegroup.push_back(ui.buttonZoomnorm); m_idlegroup.push_back(ui.buttonZoomfit); m_idlegroup.push_back(ui.buttonRecognize); m_idlegroup.push_back(ui.menubuttonRotateMode); m_idlegroup.push_back(ui.spinRotate); m_idlegroup.push_back(ui.spinPage); m_idlegroup.push_back(ui.spinBrightness); m_idlegroup.push_back(ui.spinContrast); m_idlegroup.push_back(ui.spinResolution); m_idlegroup.push_back(ui.buttonAutolayout); CONNECT(ui.windowMain, delete_event, [this](GdkEventAny * ev) { return closeEvent(ev); }); CONNECT(ui.buttonControls, toggled, [this] { ui.toolbarDisplay->set_visible(ui.buttonControls->get_active()); }); CONNECT(m_acquirer, scanPageAvailable, [this](const std::string & filename) { m_sourceManager->addSources({Gio::File::create_for_path(filename)}); }); CONNECT(m_sourceManager, sourceChanged, [this] { onSourceChanged(); }); CONNECT(ui.buttonOutputpane, toggled, [this] { if(m_outputEditor) m_outputEditor->getUI()->set_visible(ui.buttonOutputpane->get_active()); }); m_connection_setOCRMode = CONNECT(ui.comboOcrmode, changed, [this] { setOutputMode(static_cast(ui.comboOcrmode->get_active_row_number())); }); CONNECT(m_recognitionMenu, languageChanged, [this] (const Config::Lang & lang) { languageChanged(lang); }); CONNECT(ConfigSettings::get("outputorient"), changed, [this] { ui.panedOutput->set_orientation(static_cast(!ConfigSettings::get("outputorient")->getValue())); }); CONNECT(ui.buttonProgressCancel, clicked, [this] { progressCancel(); }); CONNECT(ui.buttonAutolayout, clicked, [this] { m_displayer->autodetectOCRAreas(); }); CONNECT(ui.buttonBatchExport, clicked, [this] { batchExport(); }); ADD_SETTING(VarSetting>("wingeom")); ADD_SETTING(SwitchSettingT("showcontrols", ui.buttonControls)); ADD_SETTING(ComboSetting("outputeditor", ui.comboOcrmode)); ui.menubuttonLanguages->set_menu(*m_recognitionMenu); m_recognitionMenu->rebuild(); pushState(State::Idle, _("Select an image to begin...")); const std::vector& geom = ConfigSettings::get>>("wingeom")->getValue(); if(geom.size() == 4) { ui.windowMain->resize(geom[2], geom[3]); ui.windowMain->move(geom[0], geom[1]); } ui.panedOutput->set_orientation(static_cast(!ConfigSettings::get("outputorient")->getValue())); #if ENABLE_VERSIONCHECK if(ConfigSettings::get("updatecheck")->getValue()) { m_newVerThread = new std::thread(&MainWindow::getNewestVersion, this); } #endif } MainWindow::~MainWindow() { #if ENABLE_VERSIONCHECK if(m_newVerThread) { m_newVerThread->join(); delete m_newVerThread; } #endif delete m_acquirer; delete m_outputEditor; delete m_sourceManager; m_displayer->setTool(nullptr); delete m_displayerTool; delete m_displayer; delete m_recognizer; delete m_config; delete m_recognitionMenu; s_instance = nullptr; } void MainWindow::setMenuModel(const Glib::RefPtr& menuModel) { ui.menubuttonOptions->set_menu_model(menuModel); ui.menubuttonOptions->set_visible(true); } void MainWindow::openFiles(const std::vector>& files) { std::vector> hocrFiles; std::vector> otherFiles; for(const Glib::RefPtr& file : files) { std::string filename = file->get_path(); if(Glib::ustring(filename.substr(filename.length() - 5)).lowercase() == ".html") { hocrFiles.push_back(file); } else { otherFiles.push_back(file); } } m_sourceManager->addSources(otherFiles); if(!hocrFiles.empty()) { if(setOutputMode(OutputModeHOCR)) { static_cast(m_outputEditor)->open(OutputEditorHOCR::InsertMode::Append, hocrFiles); m_outputEditor->getUI()->set_visible(true); } } } void MainWindow::openOutput(const std::string& filename) { if(Utils::string_endswith(Glib::ustring(filename).lowercase(), ".txt")) { if(setOutputMode(OutputModeText)) { m_outputEditor->open(filename); } } else if(Utils::string_endswith(Glib::ustring(filename).lowercase(), ".html")) { if(setOutputMode(OutputModeHOCR)) { m_outputEditor->open(filename); } } } void MainWindow::setOutputPaneVisible(bool visible) { ui.buttonOutputpane->set_active(visible); } void MainWindow::pushState(State state, const Glib::ustring& msg) { m_stateStack.push_back(state); ui.statusbar->push(msg); setState(state); } void MainWindow::popState() { ui.statusbar->pop(); m_stateStack.pop_back(); setState(m_stateStack.back()); } void MainWindow::setState(State state) { bool isIdle = state == State::Idle; bool isBusy = state == State::Busy; for(Gtk::Widget* w : m_idlegroup) { w->set_sensitive(!isIdle); } ui.panedOutput->set_sensitive(!isBusy); ui.headerbar->set_sensitive(!isBusy); if(ui.windowMain->get_window()) { ui.windowMain->get_window()->set_cursor(isBusy ? Gdk::Cursor::create(Gdk::WATCH) : Glib::RefPtr()); } } void MainWindow::showProgress(ProgressMonitor* monitor, int updateInterval) { m_progressMonitor = monitor; m_connection_progressUpdate = Glib::signal_timeout().connect([this] { progressUpdate(); return true; }, updateInterval); ui.progressbarProgress->set_fraction(0); ui.buttonProgressCancel->set_sensitive(true); ui.boxProgress->set_visible(true); } void MainWindow::hideProgress() { ui.boxProgress->set_visible(false); m_connection_progressUpdate.disconnect(); m_progressMonitor = nullptr; } void MainWindow::progressCancel() { if(m_progressMonitor) { ui.buttonProgressCancel->set_sensitive(true); m_progressMonitor->cancel(); } } void MainWindow::progressUpdate() { if(m_progressMonitor) { ui.progressbarProgress->set_fraction(m_progressMonitor->getProgress() / 100.); } } bool MainWindow::closeEvent(GdkEventAny*) { if(!m_outputEditor->clear()) { return true; } if((ui.windowMain->get_window()->get_state() & Gdk::WINDOW_STATE_MAXIMIZED) == 0) { std::vector geom(4); ui.windowMain->get_position(geom[0], geom[1]); ui.windowMain->get_size(geom[2], geom[3]); ConfigSettings::get>>("wingeom")->setValue(geom); } ui.windowMain->hide(); return false; } void MainWindow::onSourceChanged() { std::vector sources = m_sourceManager->getSelectedSources(); if(m_displayer->setSources(sources) && !sources.empty()) { ui.headerbar->set_subtitle(sources.size() == 1 ? Glib::ustring(sources.front()->displayname) : Glib::ustring::compose(_("Multiple sources (%1)"), sources.size())); if(m_stateStack.back() == State::Idle) { pushState(State::Normal, _("Ready")); } } else { if(m_stateStack.back() == State::Normal) { popState(); } ui.headerbar->set_subtitle(""); } } void MainWindow::showAbout() { ui.dialogAbout->run(); ui.dialogAbout->hide(); } void MainWindow::showHelp(const std::string& chapter) { #ifdef G_OS_WIN32 // Always use relative path on Windows std::string manualDirPath; char* locale = g_win32_getlocale(); std::string language(locale, 2); g_free(locale); #else std::string manualDirPath = MANUAL_DIR; std::string language = Glib::getenv("LANG").substr(0, 2); #endif if(manualDirPath.empty()) { manualDirPath = Glib::build_filename(pkgDir, "share", "doc", "gimagereader"); } std::string manualFile = Utils::make_absolute_path(Glib::build_filename(manualDirPath, Glib::ustring::compose("manual-%1.html", language)), Glib::get_current_dir()); if(!Glib::file_test(manualFile, Glib::FILE_TEST_EXISTS)) { manualFile = Utils::make_absolute_path(Glib::build_filename(manualDirPath, "manual.html"), Glib::get_current_dir()); } Utils::openUri(Glib::filename_to_uri(manualFile) + chapter); } void MainWindow::showConfig() { m_config->showDialog(); m_recognitionMenu->rebuild(); } bool MainWindow::setOutputMode(OutputMode mode) { if(m_outputEditor && !m_outputEditor->clear()) { m_connection_setOCRMode.block(true); if(dynamic_cast(m_outputEditor)) { ui.comboOcrmode->set_active(OutputModeText); } else if(dynamic_cast(m_outputEditor)) { ui.comboOcrmode->set_active(OutputModeHOCR); } m_connection_setOCRMode.block(false); return false; } else { if(m_outputEditor) { ui.panedOutput->remove(*m_outputEditor->getUI()); delete m_outputEditor; } delete m_displayerTool; if(mode == OutputModeText) { m_displayerTool = new DisplayerToolSelect(m_displayer); m_outputEditor = new OutputEditorText(); } else { /*if(mode == OutputModeHOCR)*/ m_displayerTool = new DisplayerToolHOCR(m_displayer); m_outputEditor = new OutputEditorHOCR(static_cast(m_displayerTool)); } ui.buttonAutolayout->set_visible(m_displayerTool->allowAutodetectOCRAreas()); m_displayer->setTool(m_displayerTool); m_outputEditor->setLanguage(m_recognitionMenu->getRecognitionLanguage()); ui.panedOutput->pack2(*m_outputEditor->getUI(), true, false); m_outputEditor->getUI()->set_visible(ui.buttonOutputpane->get_active()); m_connection_setOCRMode.block(true); ui.comboOcrmode->set_active(mode); m_connection_setOCRMode.block(false); return true; } } void MainWindow::redetectLanguages() { m_recognitionMenu->rebuild(); } void MainWindow::manageLanguages() { TessdataManager::exec(); } void MainWindow::addNotification(const Glib::ustring& title, const Glib::ustring& message, const std::vector& actions, Notification* handle) { Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); frame->set_data(notificationHandleKey, handle); frame->set_shadow_type(Gtk::SHADOW_OUT); Gtk::Box* box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 5)); box->override_background_color(Gdk::RGBA("#FFD000"), Gtk::STATE_FLAG_NORMAL); frame->add(*box); Gtk::Label* titlelabel = Gtk::manage(new Gtk::Label); titlelabel->set_markup(Glib::ustring::compose("%1:", title)); box->pack_start(*titlelabel, false, true); box->pack_start(*Gtk::manage(new Gtk::Label(message, Gtk::ALIGN_START)), true, true); Gtk::Button* closebtn = Gtk::manage(new Gtk::Button()); closebtn->set_image_from_icon_name("window-close", Gtk::ICON_SIZE_MENU); CONNECT(closebtn, clicked, [this, frame] { hideNotification(frame); }); box->pack_end(*closebtn, false, true); for(const NotificationAction& action : actions) { Gtk::Button* btn = Gtk::manage(new Gtk::Button(action.label)); btn->set_relief(Gtk::RELIEF_NONE); CONNECT(btn, clicked, [this, frame, action] { if(action.action()) { hideNotification(frame); } }); box->pack_start(*btn, false, true); btn->get_child()->override_color(Gdk::RGBA("#0000FF"), Gtk::STATE_FLAG_NORMAL); } frame->show_all(); ui.boxMain->pack_end(*frame, false, true); if(handle != nullptr) { *handle = frame; } } void MainWindow::hideNotification(Notification handle) { if(handle) { Gtk::Frame* frame = static_cast(handle); Notification* h = reinterpret_cast(frame->get_data(notificationHandleKey)); if(h) { *h = nullptr; } ui.boxMain->remove(*frame); delete frame; } } #if ENABLE_VERSIONCHECK void MainWindow::getNewestVersion() { char buf[16] = {}; try { Glib::RefPtr file = Gio::File::create_for_uri(CHECKURL); Glib::RefPtr stream = file->read(); stream->read(buf, 16); } catch (const Glib::Error& e) { return; } std::string newver(buf); g_debug("Newest version is: %s", newver.c_str()); newver.erase(std::remove_if(newver.begin(), newver.end(), ::isspace), newver.end()); if(Glib::Regex::create(R"(^[\d+\.]+\d+$)")->match(newver, 0, Glib::RegexMatchFlags(0))) { Glib::signal_idle().connect_once([this, newver] { checkVersion(newver); }); } } void MainWindow::checkVersion(const Glib::ustring& newver) { m_newVerThread->join(); m_newVerThread = nullptr; Glib::ustring curver = PACKAGE_VERSION; if(newver.compare(curver) > 0) { addNotification(_("New version"), Glib::ustring::compose(_("gImageReader %1 is available"), newver), { {_("Download"), [ = ]{ Utils::openUri(DOWNLOADURL); return false; }}, {_("Changelog"), [ = ]{ Utils::openUri(CHANGELOGURL); return false; }}, {_("Don't notify again"), []{ ConfigSettings::get("updatecheck")->setValue(false); return true; }} }); } } #endif // ENABLE_VERSIONCHECK void MainWindow::languageChanged(const Config::Lang& lang) { if(m_outputEditor) { m_outputEditor->setLanguage(lang); } hideNotification(m_notifierHandle); m_notifierHandle = nullptr; std::string code = lang.code; if(code.empty()) { return; } GtkSpell::Checker checker; try { checker.set_language(code); } catch(const GtkSpell::Error& /*e*/) { if(ConfigSettings::get("dictinstall")->getValue()) { NotificationAction actionDontShowAgain = {_("Don't show again"), []{ ConfigSettings::get("dictinstall")->setValue(false); return true; }}; NotificationAction actionInstall = NotificationAction{_("Install"), [this, lang]{ dictionaryAutoinstall(lang.code); return false; }}; #ifdef G_OS_UNIX if(getConfig()->useSystemDataLocations()) { // Try initiating a DBUS connection for PackageKit Glib::RefPtr proxy; Glib::ustring service_owner; try { proxy = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SESSION, "org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify"); service_owner = proxy->get_name_owner(); } catch(...) { } if(!service_owner.empty()) { actionInstall = MainWindow::NotificationAction{_("Install"), [this, proxy, lang]{ dictionaryAutoinstall(proxy, lang.code); return false; }}; } else { actionInstall = {_("Help"), [this]{ showHelp("#InstallSpelling"); return false; }}; g_warning("Could not find PackageKit on DBus, dictionary autoinstallation will not work"); } } #endif addNotification(_("Spelling dictionary missing"), Glib::ustring::compose(_("The spellcheck dictionary for %1 is not installed"), lang.name), {actionInstall, actionDontShowAgain}, &m_notifierHandle); } } } #ifdef G_OS_UNIX void MainWindow::dictionaryAutoinstall(Glib::RefPtr proxy, const Glib::ustring& code) { pushState(State::Busy, Glib::ustring::compose(_("Installing spelling dictionary for '%1'"), code)); std::uint32_t xid = gdk_x11_window_get_xid(getWindow()->get_window()->gobj()); std::vector files; for(const Glib::ustring& langCulture : m_config->searchLangCultures(code)) { files.push_back("/usr/share/myspell/" + langCulture + ".dic"); files.push_back("/usr/share/hunspell/" + langCulture + ".dic"); } std::vector params = { Glib::Variant::create(xid), Glib::Variant>::create(files), Glib::Variant::create("always") }; proxy->call("InstallProvideFiles", [proxy, this](Glib::RefPtr r) { dictionaryAutoinstallDone(proxy, r); }, Glib::VariantContainerBase::create_tuple(params), 3600000); } void MainWindow::dictionaryAutoinstallDone(Glib::RefPtr proxy, Glib::RefPtr& result) { try { proxy->call_finish(result); } catch (const Glib::Error& e) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), Glib::ustring::compose(_("Failed to install spelling dictionary: %1"), e.what())); } m_recognitionMenu->rebuild(); popState(); } #endif void MainWindow::dictionaryAutoinstall(Glib::ustring code) { pushState(State::Busy, Glib::ustring::compose(_("Installing spelling dictionary for '%1'"), code)); Glib::ustring url = "https://cgit.freedesktop.org/libreoffice/dictionaries/tree/"; Glib::ustring plainurl = "https://cgit.freedesktop.org/libreoffice/dictionaries/plain/"; std::string spellingDir = getConfig()->spellingLocation(); Glib::RefPtr dir = Gio::File::create_for_path(spellingDir); bool dirExists = false; try { dirExists = dir->make_directory_with_parents(); } catch(...) { dirExists = dir->query_exists(); } if(!dirExists) { popState(); Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), _("Failed to create directory for spelling dictionaries.")); return; } Glib::ustring messages; Glib::RefPtr htmlData = Utils::download(url, messages); if(!htmlData) { popState(); Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), Glib::ustring::compose(_("Could not read %1: %2."), url, messages)); return; } Glib::ustring html(reinterpret_cast(htmlData->get_data()), htmlData->size()); std::string langCode = code.substr(0, 2); Glib::RefPtr langPat = Glib::Regex::create(Glib::ustring::compose(">(%1_?[A-Z]*)<", langCode)); Glib::RefPtr dictPat = Glib::Regex::create(Glib::ustring::compose(">(%1_?[\\w_]*\\.(dic|aff))<", langCode)); std::vector downloaded; std::vector failed; int pos = 0; Glib::MatchInfo langMatchInfo; while(langPat->match(html, pos, langMatchInfo)) { Glib::ustring lang = langMatchInfo.fetch(1); int start; langMatchInfo.fetch_pos(0, start, pos); Glib::RefPtr dictHtmlData = Utils::download(url + lang + "/", messages); if(!dictHtmlData) { continue; } Glib::ustring dictHtml(reinterpret_cast(dictHtmlData->get_data()), dictHtmlData->size()); int dictPos = 0; Glib::MatchInfo dictMatchInfo; while(dictPat->match(dictHtml, dictPos, dictMatchInfo)) { Glib::ustring filename = dictMatchInfo.fetch(1); pushState(State::Busy, Glib::ustring::compose(_("Downloading '%1'..."), filename)); Glib::RefPtr data = Utils::download(plainurl + lang + "/" + filename, messages); if(data) { std::ofstream file(Glib::build_filename(spellingDir, filename), std::ios::binary); if(file.is_open()) { file.write(reinterpret_cast(data->get_data()), data->size()); downloaded.push_back(filename); } else { failed.push_back(filename); } } else { failed.push_back(filename); } popState(); int start; dictMatchInfo.fetch_pos(0, start, dictPos); } } popState(); if(!failed.empty()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), Glib::ustring::compose(_("The following dictionaries could not be downloaded:\n%1\n\nCheck the connectivity and directory permissions.\nHint: If you don't have write permissions in system folders, you can switch to user paths in the settings dialog."), Utils::string_join(failed, "\n"))); } else if(!downloaded.empty()) { m_recognitionMenu->rebuild(); Utils::messageBox(Gtk::MESSAGE_INFO, _("Dictionaries installed"), Glib::ustring::compose(_("The following dictionaries were installed:\n%1"), Utils::string_join(downloaded, "\n"))); } else { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), Glib::ustring::compose(_("No spelling dictionaries found for '%1'."), code)); } } void MainWindow::batchExport() { HOCRBatchExportDialog dialog; dialog.run(); } gImageReader-3.4.0/gtk/src/MainWindow.hh000066400000000000000000000113361417507262200200150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * MainWindow.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef MAINWINDOW_HH #define MAINWINDOW_HH #include "common.hh" #include "Config.hh" #include "ui_MainWindow.hh" #define MAIN MainWindow::getInstance() namespace std { class thread; } class Acquirer; class Displayer; class DisplayerTool; class OutputEditor; class Recognizer; class RecognitionMenu; class Source; class SourceManager; class MainWindow { public: enum class State { Idle, Normal, Busy }; enum OutputMode {OutputModeText = 0, OutputModeHOCR = 1}; struct NotificationAction { Glib::ustring label; std::function action; }; class ProgressMonitor { public: ProgressMonitor(int total) : m_total(total) {} virtual ~ProgressMonitor() {} void increaseProgress() { std::lock_guard lock(m_mutex); ++m_progress; } virtual int getProgress() const { std::lock_guard lock(m_mutex); return (m_progress * 100) / m_total; } virtual void cancel() { std::lock_guard lock(m_mutex); m_cancelled = true; } bool cancelled() const { std::lock_guard lock(m_mutex); return m_cancelled; } protected: mutable std::mutex m_mutex; const int m_total; int m_progress = 0; bool m_cancelled = false; }; typedef void* Notification; static MainWindow* getInstance() { return s_instance; } static void signalHandler(int signal); static void tesseractCrash(int signal); MainWindow(); ~MainWindow(); Config* getConfig() const { return m_config; } Displayer* getDisplayer() const { return m_displayer; } OutputEditor* getOutputEditor() const { return m_outputEditor; } Recognizer* getRecognizer() const { return m_recognizer; } SourceManager* getSourceManager() const { return m_sourceManager; } RecognitionMenu* getRecognitionMenu() const { return m_recognitionMenu; } Gtk::Window* getWindow() const { return ui.windowMain; } void setMenuModel(const Glib::RefPtr& menuModel); void redetectLanguages(); void manageLanguages(); void showConfig(); void showHelp(const std::string& chapter = ""); void showAbout(); void addNotification(const Glib::ustring& title, const Glib::ustring& message, const std::vector& actions, Notification* handle = nullptr); void hideNotification(Notification handle); void openFiles(const std::vector>& files); void openOutput(const std::string& filename); bool setOutputMode(OutputMode mode); void setOutputPaneVisible(bool visible); void pushState(State state, const Glib::ustring& msg); void popState(); void showProgress(ProgressMonitor* monitor, int updateInterval = 500); void hideProgress(); private: static void signalHandlerExec(int signal, bool tesseractCrash); static MainWindow* s_instance; Ui::MainWindow ui; ClassData m_classdata; Config* m_config = nullptr; Acquirer* m_acquirer = nullptr; Displayer* m_displayer = nullptr; DisplayerTool* m_displayerTool = nullptr; OutputEditor* m_outputEditor = nullptr; RecognitionMenu* m_recognitionMenu = nullptr; Recognizer* m_recognizer = nullptr; SourceManager* m_sourceManager = nullptr; std::thread* m_newVerThread = nullptr; MainWindow::Notification m_notifierHandle = nullptr; ProgressMonitor* m_progressMonitor = nullptr; std::vector m_idlegroup; std::vector m_stateStack; sigc::connection m_connection_setOCRMode; sigc::connection m_connection_progressUpdate; bool closeEvent(GdkEventAny*); void languageChanged(const Config::Lang& lang); void onSourceChanged(); void setState(State state); void progressCancel(); void progressUpdate(); #if ENABLE_VERSIONCHECK void getNewestVersion(); void checkVersion(const Glib::ustring& newver); #endif #ifdef G_OS_UNIX void dictionaryAutoinstall(Glib::RefPtr proxy, const Glib::ustring& lang); void dictionaryAutoinstallDone(Glib::RefPtr proxy, Glib::RefPtr& result); #endif void dictionaryAutoinstall(Glib::ustring lang); void batchExport(); }; #endif gImageReader-3.4.0/gtk/src/OutputBuffer.cc000066400000000000000000000135331417507262200203620ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputBuffer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include "ConfigSettings.hh" #include "MainWindow.hh" #include "OutputBuffer.hh" OutputBuffer::OutputBuffer() : Gsv::Buffer() { m_regionBeginMark = Gtk::TextMark::create(true); m_regionEndMark = Gtk::TextMark::create(false); add_mark(m_regionBeginMark, begin()); add_mark(m_regionEndMark, end()); set_highlight_matching_brackets(false); m_regionTag = create_tag("selection"); Gtk::Label label; Glib::RefPtr styleContext = label.get_style_context(); styleContext->set_state(Gtk::STATE_FLAG_SELECTED); Gdk::RGBA selColor = styleContext->get_background_color(styleContext->get_state()); selColor.set_red(std::min(1.0, selColor.get_red() * 1.6)); selColor.set_green(std::min(1.0, selColor.get_green() * 1.6)); selColor.set_blue(std::min(1.0, selColor.get_blue() * 1.6)); m_regionTag->property_background_rgba() = selColor; setHightlightLanguage(ConfigSettings::get>("highlightmode")->getValue()); } void OutputBuffer::save_region_bounds(bool viewSelected) { Gtk::TextIter start = get_iter_at_mark(get_insert()); Gtk::TextIter stop = get_iter_at_mark(get_selection_bound()); if(viewSelected) { bool entireRegion = false; if(start.get_offset() > stop.get_offset()) { std::swap(start, stop); } // If nothing or only one word is selected, set region to entire document if(start.get_offset() == stop.get_offset() || !Glib::Regex::create("\\s")->match(get_text(start, stop))) { start = begin(); stop = end(); entireRegion = true; } remove_tag(m_regionTag, get_iter_at_mark(m_regionBeginMark), get_iter_at_mark(m_regionEndMark)); move_mark(m_regionBeginMark, start); move_mark(m_regionEndMark, stop); if(!entireRegion) { apply_tag(m_regionTag, start, stop); } } } void OutputBuffer::get_region_bounds(Gtk::TextIter& start, Gtk::TextIter& stop) { start = get_iter_at_mark(m_regionBeginMark); stop = get_iter_at_mark(m_regionEndMark); } Gtk::TextIter OutputBuffer::replace_range(const Glib::ustring& text, const Gtk::TextIter& start, const Gtk::TextIter& end) { return insert(erase(start, end), text); } bool OutputBuffer::findReplace(bool backwards, bool replace, bool matchCase, const Glib::ustring& searchstr, const Glib::ustring& replacestr, Gtk::TextView* view) { if(searchstr.empty()) { return false; } Gtk::TextSearchFlags flags = Gtk::TEXT_SEARCH_VISIBLE_ONLY | Gtk::TEXT_SEARCH_TEXT_ONLY; auto comparator = matchCase ? [](const Glib::ustring & s1, const Glib::ustring & s2) { return s1 == s2; } : [](const Glib::ustring & s1, const Glib::ustring & s2) { return s1.lowercase() == s2.lowercase(); }; if(!matchCase) { flags |= Gtk::TEXT_SEARCH_CASE_INSENSITIVE; } Gtk::TextIter rstart, rend; get_region_bounds(rstart, rend); Gtk::TextIter start, end; get_selection_bounds(start, end); if(comparator(get_text(start, end, false), searchstr)) { if(replace) { start = end = insert(erase(start, end), replacestr); start.backward_chars(replacestr.length()); select_range(start, end); view->scroll_to(end); return true; } if(backwards) { end.backward_char(); } else { start.forward_char(); } } Gtk::TextIter matchStart, matchEnd; if(backwards) { if(!end.backward_search(searchstr, flags, matchStart, matchEnd, rstart) && !rend.backward_search(searchstr, flags, matchStart, matchEnd, rstart)) { return false; } } else { if(!start.forward_search(searchstr, flags, matchStart, matchEnd, rend) && !rstart.forward_search(searchstr, flags, matchStart, matchEnd, rend)) { return false; } } // FIXME: backward_search appears to be buggy? matchEnd = matchStart; matchEnd.forward_chars(searchstr.length()); select_range(matchStart, matchEnd); view->scroll_to(matchStart); return true; } int OutputBuffer::replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase) { Gtk::TextIter start, end; get_region_bounds(start, end); int startpos = start.get_offset(); int endpos = end.get_offset(); Gtk::TextSearchFlags flags = Gtk::TEXT_SEARCH_VISIBLE_ONLY | Gtk::TEXT_SEARCH_TEXT_ONLY; if(!matchCase) { flags |= Gtk::TEXT_SEARCH_CASE_INSENSITIVE; } int diff = replacestr.length() - searchstr.length(); int count = 0; Gtk::TextIter it = get_iter_at_offset(startpos); while(true) { Gtk::TextIter matchStart, matchEnd; if(!it.forward_search(searchstr, flags, matchStart, matchEnd) || matchEnd.get_offset() > endpos) { break; } it = insert(erase(matchStart, matchEnd), replacestr); endpos += diff; ++count; while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } } if(count == 0) { return count; } return count; } void OutputBuffer::setHightlightLanguage(const std::string& lang_id) { Glib::RefPtr language_manager = Gsv::LanguageManager::get_default(); auto highlight_lang = language_manager->get_language(lang_id); if (!highlight_lang) { set_highlight_syntax(false); } else { set_highlight_syntax(true); set_language(highlight_lang); } ConfigSettings::get>("highlightmode")->setValue(lang_id); } gImageReader-3.4.0/gtk/src/OutputBuffer.hh000066400000000000000000000036551417507262200204000ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputBuffer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTBUFFER_HH #define OUTPUTBUFFER_HH #include "common.hh" #include class OutputBuffer : public Gsv::Buffer { public: void save_region_bounds(bool viewSelected); void get_region_bounds(Gtk::TextIter& start, Gtk::TextIter& stop); Gtk::TextIter replace_range(const Glib::ustring& text, const Gtk::TextIter& start, const Gtk::TextIter& end); bool findReplace(bool backwards, bool replace, bool matchCase, const Glib::ustring& searchstr, const Glib::ustring& replacestr, Gtk::TextView* view); int replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase); void setHightlightLanguage(const std::string& lang_id); const std::string getFilename() const { return m_filename; } void setFilename(const std::string& filename) { m_filename = filename; } static Glib::RefPtr create() { return Glib::RefPtr(new OutputBuffer()); } private: OutputBuffer(); Glib::RefPtr m_regionTag; Glib::RefPtr m_regionBeginMark; Glib::RefPtr m_regionEndMark; std::string m_filename; }; #endif // OUTPUTBUFFER_HH gImageReader-3.4.0/gtk/src/OutputEditor.hh000066400000000000000000000047741417507262200204200ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditor.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITOR_HH #define OUTPUTEDITOR_HH #include #include #include "Config.hh" namespace tesseract { class TessBaseAPI; } class OutputEditor { public: struct PageInfo { std::string filename; int page; double angle; int resolution; }; struct ReadSessionData { virtual ~ReadSessionData() = default; bool prependFile; bool prependPage; PageInfo pageInfo; }; class BatchProcessor { public: virtual ~BatchProcessor() = default; virtual std::string fileSuffix() const = 0; virtual void writeHeader(std::ostream& /*dev*/, tesseract::TessBaseAPI* /*tess*/, const PageInfo& /*pageInfo*/) const {} virtual void writeFooter(std::ostream& /*dev*/) const {} virtual void appendOutput(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const = 0; }; OutputEditor() {} virtual ~OutputEditor() {} virtual Gtk::Box* getUI() const = 0; virtual ReadSessionData* initRead(tesseract::TessBaseAPI& tess) = 0; virtual void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) = 0; virtual void readError(const Glib::ustring& errorMsg, ReadSessionData* data) = 0; virtual void finalizeRead(ReadSessionData* data) { delete data; } virtual BatchProcessor* createBatchProcessor(const std::map& options) const = 0; virtual void onVisibilityChanged(bool /*visible*/) {} virtual bool open(const std::string& filename) = 0; virtual bool clear(bool hide = true) = 0; virtual bool crashSave(const std::string& filename) const = 0; virtual void setLanguage(const Config::Lang& /*lang*/) {} virtual bool containsSource(const std::string& source, int sourcePage) const { return false; } }; #endif // OUTPUTEDITOR_HH gImageReader-3.4.0/gtk/src/OutputEditorText.cc000066400000000000000000000607241417507262200212500ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorText.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "OutputBuffer.hh" #include "OutputEditorText.hh" #include "Recognizer.hh" #include "SearchReplaceFrame.hh" #include "Utils.hh" #include #include void OutputEditorText::TextBatchProcessor::appendOutput(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const { char* text = tess->GetUTF8Text(); if(firstArea && m_prependPage) { dev << Glib::ustring::compose(_("Page: %1\n"), pageInfo.page).raw(); } dev << text; dev << "\n"; delete[] text; } OutputEditorText::OutputEditorText() { ui.setupUi(); m_searchFrame = new SearchReplaceFrame(); ui.boxSearch->pack_start(*Gtk::manage(m_searchFrame->getWidget())); m_searchFrame->getWidget()->set_visible(false); m_spell.property_decode_language_codes() = true; Glib::RefPtr recentFilter = Gtk::RecentFilter::create(); recentFilter->add_mime_type("text/plain"); recentFilter->add_pattern("*.txt"); Gtk::RecentChooserMenu* recentChooser = Gtk::manage(new Gtk::RecentChooserMenu()); recentChooser->set_filter(recentFilter); recentChooser->set_local_only(false); recentChooser->set_show_not_found(false); recentChooser->set_show_tips(true); recentChooser->set_sort_type(Gtk::RECENT_SORT_MRU); ui.menuButtonOpenRecent->set_menu(*recentChooser); Glib::RefPtr group = MAIN->getWindow()->get_accel_group(); ui.buttonUndo->add_accelerator("clicked", group, GDK_KEY_Z, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); ui.buttonRedo->add_accelerator("clicked", group, GDK_KEY_Z, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK, Gtk::AccelFlags(0)); ui.buttonFindreplace->add_accelerator("clicked", group, GDK_KEY_F, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); ui.buttonSave->add_accelerator("clicked", group, GDK_KEY_S, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); ui.buttonOpen->add_accelerator("clicked", group, GDK_KEY_O, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); m_insertMode = InsertMode::Append; ADD_SETTING(SwitchSettingT("keepdot", ui.menuitemStripcrlfKeependmark)); ADD_SETTING(SwitchSettingT("keepquote", ui.menuitemStripcrlfKeepquote)); ADD_SETTING(SwitchSettingT("joinhyphen", ui.menuitemStripcrlfJoinhyphen)); ADD_SETTING(SwitchSettingT("joinspace", ui.menuitemStripcrlfJoinspace)); ADD_SETTING(SwitchSettingT("keepparagraphs", ui.menuitemStripcrlfKeepparagraphs)); ADD_SETTING(SwitchSettingT("drawwhitespace", ui.menuitemStripcrlfDrawwhitespace)); ADD_SETTING(VarSetting("highlightmode")); CONNECT(recentChooser, item_activated, [this, recentChooser] { open(Glib::filename_from_uri(recentChooser->get_current_uri())); }); CONNECT(ui.menuitemInsertAppend, activate, [this] { setInsertMode(InsertMode::Append, "ins_append.png"); }); CONNECT(ui.menuitemInsertCursor, activate, [this] { setInsertMode(InsertMode::Cursor, "ins_cursor.png"); }); CONNECT(ui.menuitemInsertReplace, activate, [this] { setInsertMode(InsertMode::Replace, "ins_replace.png"); }); CONNECT(ui.buttonStripcrlf, clicked, [this] { filterBuffer(); }); CONNECT(ui.buttonFindreplace, toggled, [this] { m_searchFrame->clear(); m_searchFrame->getWidget()->set_visible(ui.buttonFindreplace->get_active()); }); CONNECT(ui.buttonUndo, clicked, [this] { textBuffer()->undo(); scrollCursorIntoView(); }); CONNECT(ui.buttonRedo, clicked, [this] { textBuffer()->redo(); scrollCursorIntoView(); }); CONNECT(ui.buttonSave, clicked, [this] { save(); }); CONNECT(ui.buttonOpen, clicked, [this] { open(); }); CONNECT(ui.buttonAddTab, clicked, [this] { addTab(); }); CONNECT(ui.buttonClear, clicked, [this] { clear(); }); CONNECT(ui.notebook, switch_page, [this](Gtk::Widget*, int) { tabChanged(); }); CONNECT(m_searchFrame, find_replace, sigc::mem_fun(this, &OutputEditorText::findReplace)); CONNECT(m_searchFrame, replace_all, sigc::mem_fun(this, &OutputEditorText::replaceAll)); CONNECT(m_searchFrame, apply_substitutions, sigc::mem_fun(this, &OutputEditorText::applySubstitutions)); CONNECT(ConfigSettings::get("customoutputfont"), changed, [this] { setFont(); }); CONNECT(ConfigSettings::get("systemoutputfont"), changed, [this] { setFont(); }); CONNECT(ui.menuitemStripcrlfDrawwhitespace, toggled, [this] { setDrawWhitspace(ui.menuitemStripcrlfDrawwhitespace->get_active()); }); ui.notebook->set_current_page(addTab()); } OutputEditorText::~OutputEditorText() { delete m_searchFrame; } int OutputEditorText::addTab(const Glib::ustring& title) { int page = ui.notebook->get_n_pages(); Glib::RefPtr textBuffer = OutputBuffer::create(); Gsv::View* textView = Gtk::make_managed(textBuffer); if(ConfigSettings::get("systemoutputfont")->getValue()) { textView->unset_font(); } else { Glib::ustring fontName = ConfigSettings::get("customoutputfont")->getValue(); textView->override_font(Pango::FontDescription(fontName)); } textView->set_wrap_mode(Gtk::WRAP_WORD); Gtk::ScrolledWindow* scrollWin = Gtk::make_managed(); scrollWin->add(*textView); scrollWin->show_all(); Gtk::Button* button = Gtk::make_managed(); button->set_image_from_icon_name("window-close-symbolic", (Gtk::BuiltinIconSize) GTK_ICON_SIZE_MENU); button->set_tooltip_text (_("Close document")); button->set_relief((Gtk::ReliefStyle) GTK_RELIEF_NONE); CONNECT(button, clicked, [this, scrollWin] { closeTab(scrollWin); }); Gtk::Label* tabLabel = Gtk::make_managed(title.empty() ? Glib::ustring::compose(_("Untitled %1"), ++m_tabCounter) : title); Gtk::HBox* hbox = Gtk::make_managed(false, 0); hbox->pack_start(*tabLabel); hbox->pack_end(*button, false, false, 0); hbox->show_all(); ui.notebook->append_page(*scrollWin, *hbox); CONNECT(textView, populate_popup, [this](Gtk::Menu * menu) { completeTextViewMenu(menu); }); CONNECT(textBuffer, modified_changed, [tabLabel, textBuffer] { Glib::ustring tabText = tabLabel->get_text(); if (textBuffer->get_modified()) { tabLabel->set_text(Utils::string_rstrip(tabText, "*") + "*"); } else { tabLabel->set_text(Utils::string_rstrip(tabText, "*")); } }); // If the insert or selection mark change save the bounds either if the view is focused or the selection is non-empty CONNECTP(textBuffer, cursor_position, [textBuffer, textView] { textBuffer->save_region_bounds(textView->is_focus()); }); CONNECTP(textBuffer, has_selection, [textBuffer, textView] { textBuffer->save_region_bounds(textView->is_focus()); }); CONNECTP(textBuffer, can_undo, [this, textBuffer] { ui.buttonUndo->set_sensitive(textBuffer->can_undo()); }); CONNECTP(textBuffer, can_redo, [this, textBuffer] { ui.buttonRedo->set_sensitive(textBuffer->can_redo()); }); ui.notebook->set_current_page(page); return page; } void OutputEditorText::tabChanged() { if (m_spellHaveLang) { m_spell.detach(); m_spell.attach(*textView()); } OutputBuffer* buffer = textBuffer(); ui.buttonUndo->set_sensitive(buffer->can_undo()); ui.buttonRedo->set_sensitive(buffer->can_redo()); setDrawWhitspace(ui.menuitemStripcrlfDrawwhitespace->get_active()); Gsv::View* view = textView(); view->grab_focus(); } void OutputEditorText::closeTab(Gtk::Widget* pageWidget) { int page = -1; for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { if (ui.notebook->get_nth_page(i) == pageWidget) { page = i; break; } } if (page == -1) { return; } if(textBuffer(page)->get_modified()) { int response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Document not saved"), _("Save document before proceeding?"), "", Utils::Button::Save | Utils::Button::Discard | Utils::Button::Cancel); if (response == Utils::Button::Cancel) { return; } if (response == Utils::Button::Save && !save(page, textBuffer(page)->getFilename())) { return; } } ui.notebook->remove_page(page); if (ui.notebook->get_n_pages() == 0) { m_tabCounter = 0; addTab(); } } Glib::ustring OutputEditorText::tabName(int page) const { Gtk::Label* label = static_cast(static_cast(ui.notebook->get_tab_label(*ui.notebook->get_nth_page(page)))->get_children()[0]); return Utils::string_rstrip(label->get_text(), "*"); } void OutputEditorText::setTabName(int page, const Glib::ustring& title) { Gtk::Label* label = static_cast(static_cast(ui.notebook->get_tab_label(*ui.notebook->get_nth_page(page)))->get_children()[0]); label->set_text(title); } Gsv::View* OutputEditorText::textView(int page) const { page = page == -1 ? ui.notebook->get_current_page() : page; return static_cast((static_cast (ui.notebook->get_nth_page(page)))->get_child()); } OutputBuffer* OutputEditorText::textBuffer(int page) const { page = page == -1 ? ui.notebook->get_current_page() : page; return static_cast(textView(page)->get_buffer().get()); } void OutputEditorText::setFont() { if(ConfigSettings::get("systemoutputfont")->getValue()) { for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { textView(i)->unset_font(); } } else { Glib::ustring fontName = ConfigSettings::get("customoutputfont")->getValue(); const Pango::FontDescription& desc = Pango::FontDescription(fontName); for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { textView(i)->override_font(desc); } } } void OutputEditorText::scrollCursorIntoView() { Gsv::View* view = textView(); view->scroll_to(view->get_buffer()->get_insert()); view->grab_focus(); } void OutputEditorText::setInsertMode(InsertMode mode, const std::string& iconName) { m_insertMode = mode; ui.imageInsert->set(Gdk::Pixbuf::create_from_resource(Glib::ustring::compose("/org/gnome/gimagereader/%1", iconName))); } void OutputEditorText::setDrawWhitspace(bool enable) { #if GTK_SOURCE_MAJOR_VERSION >= 4 GtkSourceSpaceDrawer* space_drawer = gtk_source_view_get_space_drawer(getView()->gobj()); gtk_source_space_drawer_set_types_for_locations (space_drawer, GTK_SOURCE_SPACE_LOCATION_ALL, GTK_SOURCE_SPACE_TYPE_ALL); gtk_source_space_drawer_set_enable_matrix (space_drawer, enable ? TRUE : FALSE); #else textView()->set_draw_spaces(enable ? (Gsv::DRAW_SPACES_NEWLINE | Gsv::DRAW_SPACES_TAB | Gsv::DRAW_SPACES_SPACE) : Gsv::DrawSpacesFlags(0)); #endif } void OutputEditorText::filterBuffer() { OutputBuffer* buffer = textBuffer(); Gtk::TextIter start, end; buffer->get_region_bounds(start, end); Glib::ustring txt = buffer->get_text(start, end); Utils::busyTask([this, &txt] { // Always remove trailing whitespace txt = Glib::Regex::create("\\s+$")->replace(txt, 0, "", static_cast(0)); if(ui.menuitemStripcrlfJoinhyphen->get_active()) { txt = Glib::Regex::create("[-\u2014]\\s*\\n\\s*")->replace(txt, 0, "", static_cast(0)); } Glib::ustring preChars, sucChars; if(ui.menuitemStripcrlfKeepparagraphs->get_active()) { preChars += "\\n"; // Keep if preceded by line break } if(ui.menuitemStripcrlfKeependmark->get_active()) { preChars += "\\.\\?!"; // Keep if preceded by end mark (.?!) } if(ui.menuitemStripcrlfKeepquote->get_active()) { preChars += "'\"\u00BB\u00AB"; // Keep if preceded by quote sucChars += "'\"\u00AB\u00BB"; // Keep if succeeded by quote } if(ui.menuitemStripcrlfKeepparagraphs->get_active()) { sucChars += "\\n"; // Keep if succeeded by line break } if(!preChars.empty()) { preChars = "([^" + preChars + "])"; } if(!sucChars.empty()) { sucChars = "(?![" + sucChars + "])"; } Glib::ustring expr = preChars + "\\n" + sucChars; txt = Glib::Regex::create(expr)->replace(txt, 0, preChars.empty() ? " " : "\\1 ", static_cast(0)); if(ui.menuitemStripcrlfJoinspace->get_active()) { txt = Glib::Regex::create("[ \t]+")->replace(txt, 0, " ", static_cast(0)); } return true; }, _("Stripping line breaks...")); start = end = buffer->insert(buffer->erase(start, end), txt); start.backward_chars(txt.size()); buffer->select_range(start, end); } void OutputEditorText::completeTextViewMenu(Gtk::Menu* menu) { OutputBuffer* buffer = textBuffer(); Gtk::Menu* highlightmenu = Gtk::manage(new Gtk::Menu); Gtk::RadioMenuItem* nolangitem = Gtk::manage(new Gtk::RadioMenuItem(_("No highlight"))); CONNECT(nolangitem, toggled, [nolangitem, buffer] { if (nolangitem->get_active()) { buffer->setHightlightLanguage(""); } }); nolangitem->set_active(!buffer->get_highlight_syntax()); highlightmenu->append(*nolangitem); highlightmenu->append(*Gtk::manage(new Gtk::SeparatorMenuItem())); Glib::RefPtr language_manager = Gsv::LanguageManager::get_default(); for(const std::string& lang_id : language_manager->get_language_ids()) { Gtk::RadioMenuItem* langitem = Gtk::manage(new Gtk::RadioMenuItem(lang_id)); CONNECT(langitem, toggled, [buffer, langitem, lang_id] { if (langitem->get_active()) { buffer->setHightlightLanguage(lang_id); } }); langitem->set_active(buffer->get_highlight_syntax() && buffer->get_language() && (buffer->get_language()->get_id() == lang_id)); highlightmenu->append(*langitem); } Gtk::MenuItem* highlightitem = Gtk::manage(new Gtk::MenuItem(_("Highlight mode"))); highlightitem->set_submenu(*highlightmenu); menu->prepend(*Gtk::manage(new Gtk::SeparatorMenuItem())); menu->prepend(*highlightitem); Gtk::CheckMenuItem* item = Gtk::manage(new Gtk::CheckMenuItem(_("Check spelling"))); item->set_active(bool(GtkSpell::Checker::get_from_text_view(*textView()))); CONNECT(item, toggled, [this, item] { if(item->get_active()) { m_spell.attach(*textView()); } else { m_spell.detach(); } }); menu->prepend(*Gtk::manage(new Gtk::SeparatorMenuItem())); menu->prepend(*item); menu->show_all(); } void OutputEditorText::findReplace(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace) { m_searchFrame->clearErrorState(); if(!textBuffer()->findReplace(backwards, replace, matchCase, searchstr, replacestr, textView())) { m_searchFrame->setErrorState(); } } void OutputEditorText::replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Replacing...")); int count(textBuffer()->replaceAll(searchstr, replacestr, matchCase)); if(!count) { m_searchFrame->setErrorState(); } MAIN->popState(); Gtk::Popover* popover = Gtk::manage(new Gtk::Popover); popover->add(*Gtk::manage(new Gtk::Label(Glib::ustring::compose(_("%1 occurrences replaced"), count)))); popover->set_relative_to(*m_searchFrame->replaceAllButton()); popover->set_modal(false); popover->show_all(); Glib::signal_timeout().connect_once([popover] { popover->popdown(); delete popover; }, 4000); } void OutputEditorText::applySubstitutions(const std::map& substitutions, bool matchCase) { OutputBuffer* buffer = textBuffer(); MAIN->pushState(MainWindow::State::Busy, _("Applying substitutions...")); Gtk::TextIter start, end; buffer->get_region_bounds(start, end); int startpos = start.get_offset(); int endpos = end.get_offset(); Gtk::TextSearchFlags flags = Gtk::TEXT_SEARCH_VISIBLE_ONLY | Gtk::TEXT_SEARCH_TEXT_ONLY; if(!matchCase) { flags |= Gtk::TEXT_SEARCH_CASE_INSENSITIVE; } for(auto sit = substitutions.begin(), sitEnd = substitutions.end(); sit != sitEnd; ++sit) { Glib::ustring search = sit->first; Glib::ustring replace = sit->second; int diff = replace.length() - search.length(); Gtk::TextIter it = buffer->get_iter_at_offset(startpos); while(true) { Gtk::TextIter matchStart, matchEnd; if(!it.forward_search(search, flags, matchStart, matchEnd) || matchEnd.get_offset() > endpos) { break; } it = buffer->insert(buffer->erase(matchStart, matchEnd), replace); endpos += diff; } while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } } buffer->select_range(buffer->get_iter_at_offset(startpos), buffer->get_iter_at_offset(endpos)); MAIN->popState(); } void OutputEditorText::read(tesseract::TessBaseAPI& tess, ReadSessionData* data) { char* textbuf = tess.GetUTF8Text(); Glib::ustring text = Glib::ustring(textbuf); if(!text.empty() && *--text.end() != '\n') { text.append("\n"); } if(data->prependFile || data->prependPage) { std::vector prepend; if(data->prependFile) { prepend.push_back(Glib::ustring::compose(_("File: %1"), data->pageInfo.filename)); } if(data->prependPage) { prepend.push_back(Glib::ustring::compose(_("Page: %1"), data->pageInfo.page)); } text = Glib::ustring::compose("[%1]\n", Utils::string_join(prepend, "; ")) + text; } bool& insertText = static_cast(data)->insertText; Utils::runInMainThreadBlocking([&] { addText(text, insertText); }); delete[] textbuf; insertText = true; } void OutputEditorText::readError(const Glib::ustring& errorMsg, ReadSessionData* data) { bool& insertText = static_cast(data)->insertText; Utils::runInMainThreadBlocking([&] { addText(Glib::ustring::compose(_("\n[Failed to recognize page %1]\n"), errorMsg), insertText); }); insertText = true; } OutputEditorText::BatchProcessor* OutputEditorText::createBatchProcessor(const std::map& options) const { return new TextBatchProcessor(Utils::get_default(options, Glib::ustring("prependPage"), Glib::ustring("0")) == "1"); } void OutputEditorText::addText(const Glib::ustring& text, bool insert) { OutputBuffer* buffer = textBuffer(); if(insert) { buffer->insert_at_cursor(text); } else { if(m_insertMode == InsertMode::Append) { buffer->place_cursor(buffer->insert(buffer->end(), text)); } else if(m_insertMode == InsertMode::Cursor) { Gtk::TextIter start, end; buffer->get_region_bounds(start, end); buffer->place_cursor(buffer->insert(buffer->erase(start, end), text)); } else if(m_insertMode == InsertMode::Replace) { buffer->place_cursor(buffer->insert(buffer->erase(buffer->begin(), buffer->end()), text)); } } MAIN->setOutputPaneVisible(true); } bool OutputEditorText::open(const std::string& filename) { std::vector > files; if (filename.empty()) { FileDialogs::FileFilter filter = {_("Text Files"), {"text/plain"}, {"*.txt"}}; files = FileDialogs::open_dialog(_("Select Files"), "", "outputdir", filter, true); if (files.empty()) { return false; } } else { try { files.push_back(Gio::File::create_for_path(filename)); } catch(const Glib::Error&) { Glib::ustring errorMsg = Glib::ustring::compose(_("The following files could not be opened:\n%1"), filename); Utils::messageBox(Gtk::MESSAGE_ERROR, _("Unable to open files"), errorMsg); return false; } } int currentPage = -1; std::vector failed; for(const auto& file : files) { Glib::ustring contents; try { contents = Glib::file_get_contents(file->get_path()); } catch(const Glib::Error&) { failed.push_back(file->get_path()); continue; } Gtk::RecentManager::get_default()->add_item(file->get_uri()); // Look if document already opened, if so, switch to that tab bool alreadyOpen = false; for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { if (textBuffer(i)->getFilename() == file->get_path()) { currentPage = i; alreadyOpen = true; break; } } if (!alreadyOpen) { OutputBuffer* buffer = textBuffer(); int page = ui.notebook->get_current_page(); // Only add new tab if current tab is not empty if (buffer->get_modified() == true || !buffer->getFilename().empty()) { page = addTab(Glib::path_get_basename(file->get_path())); buffer = textBuffer(page); } else { setTabName(page, Glib::path_get_basename(file->get_path())); } buffer->begin_not_undoable_action(); buffer->set_text(contents); buffer->end_not_undoable_action(); buffer->set_modified(false); buffer->setFilename(file->get_path()); currentPage = page; } } if (currentPage >= 0) { ui.notebook->set_current_page(currentPage); } if (!failed.empty()) { Glib::ustring filenames = Utils::string_join(failed, "\n"); Glib::ustring errorMsg = Glib::ustring::compose(_("The following files could not be opened:\n%1"), filenames); Utils::messageBox(Gtk::MESSAGE_ERROR, _("Unable to open files"), errorMsg); } MAIN->setOutputPaneVisible(true); return failed.empty(); } bool OutputEditorText::save(int page, const std::string& filename) { std::string outname = filename; page = page == -1 ? ui.notebook->get_current_page() : page; if(outname.empty()) { Glib::ustring suggestion = textBuffer(page)->getFilename(); suggestion = suggestion.empty() ? tabName(page) + ".txt" : suggestion; FileDialogs::FileFilter filter = {_("Text Files"), {"text/plain"}, {"*.txt"}}; outname = FileDialogs::save_dialog(_("Save Output..."), suggestion, "outputdir", filter); if(outname.empty()) { return false; } } std::ofstream file(outname); if(!file.is_open()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Failed to save output"), _("Check that you have writing permissions in the selected folder.")); return false; } OutputBuffer* buffer = textBuffer(page); Glib::ustring txt = buffer->get_text(false); file.write(txt.data(), txt.bytes()); buffer->set_modified(false); buffer->setFilename(outname); Gtk::RecentManager::get_default()->add_item(Gio::File::create_for_path(outname)->get_uri()); setTabName(page, Glib::path_get_basename(outname)); return true; } bool OutputEditorText::crashSave(const std::string& filename) const { std::ofstream file(filename); if(file.is_open()) { for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { Glib::ustring txt = textBuffer(i)->get_text(false); file.write(txt.data(), txt.bytes()); file.write("\n\n", 2); } return true; } return false; } bool OutputEditorText::clear(bool hide) { if(!ui.boxEditorText->get_visible()) { return true; } std::map changed; for(int i = 0, n = ui.notebook->get_n_pages(); i < n; ++i) { if (textBuffer(i)->get_modified()) { changed.insert(std::make_pair(i, true)); } } if(!changed.empty()) { Gtk::ListBox listDocuments; for(auto it = changed.begin(), itEnd = changed.end(); it != itEnd; ++it) { Gtk::CheckButton* checkButton = Gtk::make_managed(tabName(it->first)); checkButton->set_active(true); CONNECT(checkButton, toggled, [it, &changed, checkButton] { changed[it->first] = checkButton->get_active(); }); listDocuments.append(*checkButton); } int response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Unsaved documents"), _("The following documents have unsaved changes. Which documents do you want to save before proceeding?"), "", Utils::Button::Save | Utils::Button::DiscardAll | Utils::Button::Cancel, nullptr, &listDocuments); if (response == Utils::Button::Cancel) { return false; } if (response == Utils::Button::Save) { for(auto it = changed.begin(), itEnd = changed.end(); it != itEnd; ++it) { if(it->second && !save(it->first, textBuffer(it->first)->getFilename())) { return false; } } } } for(int i = ui.notebook->get_n_pages(); i >= 0; --i) { ui.notebook->remove_page(i); } m_tabCounter = 0; addTab(); // Add one empty tab if(hide) { MAIN->setOutputPaneVisible(false); } return true; } void OutputEditorText::onVisibilityChanged(bool /*visible*/) { m_searchFrame->hideSubstitutionsManager(); } void OutputEditorText::setLanguage(const Config::Lang& lang) { try { m_spell.set_language(lang.code.empty() ? Utils::getSpellingLanguage(lang.prefix) : lang.code); m_spell.detach(); m_spell.attach(*textView()); m_spellHaveLang = true; } catch(const GtkSpell::Error& /*e*/) { m_spellHaveLang = false; } } gImageReader-3.4.0/gtk/src/OutputEditorText.hh000066400000000000000000000070111417507262200212500ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorText.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITORTEXT_HH #define OUTPUTEDITORTEXT_HH #include #include #include "MainWindow.hh" #include "OutputBuffer.hh" #include "OutputEditor.hh" #include "ui_OutputEditorText.hh" class SearchReplaceFrame; class OutputEditorText : public OutputEditor { public: class TextBatchProcessor : public BatchProcessor { public: TextBatchProcessor(bool prependPage) : m_prependPage(prependPage) {} std::string fileSuffix() const override { return std::string(".txt"); } void appendOutput(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const override; private: bool m_prependPage = false; }; OutputEditorText(); ~OutputEditorText(); Gtk::Box* getUI() const override { return ui.boxEditorText; } ReadSessionData* initRead(tesseract::TessBaseAPI& /*tess*/) override { return new TextReadSessionData; } bool clear(bool hide = true) override; void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) override; void readError(const Glib::ustring& errorMsg, ReadSessionData* data) override; BatchProcessor* createBatchProcessor(const std::map& options) const override; void onVisibilityChanged(bool visible) override; void setLanguage(const Config::Lang& lang) override; bool open(const std::string& filename = "") override; bool crashSave(const std::string& filename) const override; bool save(int page = -1, const std::string& filename = ""); private: struct TextReadSessionData : ReadSessionData { bool insertText = false; }; enum class InsertMode { Append, Cursor, Replace }; Ui::OutputEditorText ui; ClassData m_classdata; SearchReplaceFrame* m_searchFrame; InsertMode m_insertMode; GtkSpell::Checker m_spell; bool m_spellHaveLang = false; int m_tabCounter = 0; int addTab(const Glib::ustring& title = Glib::ustring()); void tabChanged(); void closeTab(Gtk::Widget* pageWidget); Glib::ustring tabName(int page) const; void setTabName(int page, const Glib::ustring& title); Gsv::View* textView(int page = -1) const; OutputBuffer* textBuffer(int page = -1) const; void addText(const Glib::ustring& text, bool insert); void completeTextViewMenu(Gtk::Menu* menu); void filterBuffer(); void findReplace(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace); void replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase); void applySubstitutions(const std::map& substitutions, bool matchCase); void scrollCursorIntoView(); void setFont(); void setInsertMode(InsertMode mode, const std::string& iconName); void setDrawWhitspace(bool enable); }; #endif // OUTPUTEDITORTEXT_HH gImageReader-3.4.0/gtk/src/RecognitionMenu.cc000066400000000000000000000306411417507262200210340ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * RecognitionMenu.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include "ConfigSettings.hh" #include "MainWindow.hh" #include "RecognitionMenu.hh" #include "Utils.hh" class RecognitionMenu::MultilingualMenuItem : public Gtk::RadioMenuItem { public: MultilingualMenuItem(Group& groupx, const Glib::ustring& label) : Gtk::RadioMenuItem(groupx, label) { CONNECT(this, select, [this] { if(!m_selected) { m_ignoreNextActivate = true; } m_selected = true; }); CONNECT(this, deselect, [this] { m_selected = false; m_ignoreNextActivate = false; }); this->signal_button_press_event().connect([this](GdkEventButton* /*ev*/) { set_active(true); return true; }, false); } protected: void on_activate() override { if(!m_ignoreNextActivate) { Gtk::RadioMenuItem::on_activate(); } m_ignoreNextActivate = false; } private: ClassData m_classdata; bool m_selected = false; bool m_ignoreNextActivate = false; }; RecognitionMenu::RecognitionMenu() { m_charListDialogUi.setupUi(); m_charListDialogUi.dialogCharacterLists->set_transient_for(*MAIN->getWindow()); CONNECT(m_charListDialogUi.radioButtonBlacklist, toggled, [this] { m_charListDialogUi.entryBlacklist->set_sensitive(m_charListDialogUi.radioButtonBlacklist->get_active()); }); CONNECT(m_charListDialogUi.radioButtonWhitelist, toggled, [this] { m_charListDialogUi.entryWhitelist->set_sensitive(m_charListDialogUi.radioButtonWhitelist->get_active()); }); ADD_SETTING(VarSetting("language")); ADD_SETTING(VarSetting("psm")); ADD_SETTING(EntrySetting("ocrcharwhitelist", m_charListDialogUi.entryWhitelist)); ADD_SETTING(EntrySetting("ocrcharblacklist", m_charListDialogUi.entryBlacklist)); ADD_SETTING(SwitchSettingT("ocrblacklistenabled", m_charListDialogUi.radioButtonBlacklist)); ADD_SETTING(SwitchSettingT("ocrwhitelistenabled", m_charListDialogUi.radioButtonWhitelist)); } void RecognitionMenu::rebuild() { foreach([this](Gtk::Widget& w) { remove(w); }); m_langMenuRadioGroup = Gtk::RadioButtonGroup(); m_langMenuCheckGroup = std::map>(); m_psmRadioGroup = Gtk::RadioButtonGroup(); m_curLang = Config::Lang(); m_signal_languageChanged.emit(m_curLang); Gtk::RadioMenuItem* curitem = nullptr; Gtk::RadioMenuItem* activeitem = nullptr; bool haveOsd = false; std::vector parts = Utils::string_split(ConfigSettings::get>("language")->getValue(), ':'); Config::Lang curlang = {parts.empty() ? "eng" : parts[0], parts.size() < 2 ? "" : parts[1]}; std::vector dicts = GtkSpell::Checker::get_language_list(); std::vector availLanguages = Config::getAvailableLanguages(); if(availLanguages.empty()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("No languages available"), _("No tesseract languages are available for use. Recognition will not work.")); } // Add menu items for languages, with spelling submenu if available for(const Glib::ustring& langprefix : availLanguages) { if(langprefix == "osd") { haveOsd = true; continue; } Config::Lang lang = {langprefix}; if(!MAIN->getConfig()->searchLangSpec(lang)) { lang.name = lang.prefix; } std::vector spelldicts; if(!lang.code.empty()) { for(const Glib::ustring& dict : dicts) { if(dict.substr(0, 2) == lang.code.substr(0, 2)) { spelldicts.push_back(dict); } } std::sort(spelldicts.begin(), spelldicts.end()); } if(!spelldicts.empty()) { Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(lang.name)); Gtk::Menu* submenu = Gtk::manage(new Gtk::Menu); for(const Glib::ustring& dict : spelldicts) { Config::Lang itemlang = {lang.prefix, dict, lang.name}; curitem = Gtk::manage(new Gtk::RadioMenuItem(m_langMenuRadioGroup, GtkSpell::Checker::decode_language_code(dict))); CONNECT(curitem, toggled, [this, curitem, itemlang] { setLanguage(curitem, itemlang); }); if(curlang.prefix == lang.prefix && ( curlang.code == dict || (!activeitem && (curlang.code == dict.substr(0, 2) || curlang.code.empty())))) { curlang = itemlang; activeitem = curitem; } submenu->append(*curitem); } item->set_submenu(*submenu); append(*item); } else { curitem = Gtk::manage(new Gtk::RadioMenuItem(m_langMenuRadioGroup, lang.name)); CONNECT(curitem, toggled, [this, curitem, lang] { setLanguage(curitem, lang); }); if(curlang.prefix == lang.prefix) { curlang = lang; activeitem = curitem; } append(*curitem); } } // Add multilanguage menu bool isMultilingual = false; if(!availLanguages.empty()) { append(*Gtk::manage(new Gtk::SeparatorMenuItem())); m_multilingualRadio = Gtk::manage(new MultilingualMenuItem(m_langMenuRadioGroup, _("Multilingual"))); Gtk::Menu* submenu = Gtk::manage(new Gtk::Menu); isMultilingual = curlang.prefix.find('+') != curlang.prefix.npos; std::vector sellangs = Utils::string_split(curlang.prefix, '+', false); for(const Glib::ustring& langprefix : availLanguages) { if(langprefix == "osd") { continue; } Config::Lang lang = {langprefix}; if(!MAIN->getConfig()->searchLangSpec(lang)) { lang.name = lang.prefix; } Gtk::CheckMenuItem* item = Gtk::manage(new Gtk::CheckMenuItem(lang.name)); auto it = std::find(sellangs.begin(), sellangs.end(), lang.prefix); item->set_active(isMultilingual && it != sellangs.end()); CONNECT(item, button_press_event, [this, item](GdkEventButton * ev) { return onMultilingualItemButtonEvent(ev, item); }, false); CONNECT(item, button_release_event, [this, item](GdkEventButton * ev) { return onMultilingualItemButtonEvent(ev, item); }, false); submenu->append(*item); m_langMenuCheckGroup.insert(std::make_pair(item, std::make_pair(lang.prefix, it != sellangs.end() ? std::distance(sellangs.begin(), it) : -1))); } m_multilingualRadio->set_submenu(*submenu); CONNECT(m_multilingualRadio, toggled, [this] { if(m_multilingualRadio->get_active()) setMultiLanguage(); }); CONNECT(submenu, button_press_event, [this](GdkEventButton * ev) { return onMultilingualMenuButtonEvent(ev); }, false); CONNECT(submenu, button_release_event, [this](GdkEventButton * ev) { return onMultilingualMenuButtonEvent(ev); }, false); append(*m_multilingualRadio); } if(isMultilingual) { activeitem = m_multilingualRadio; setMultiLanguage(); } else if(activeitem == nullptr) { activeitem = curitem; } // Add PSM items append(*Gtk::manage(new Gtk::SeparatorMenuItem())); Gtk::Menu* psmMenu = Gtk::manage(new Gtk::Menu); int activePsm = ConfigSettings::get>("psm")->getValue(); struct PsmEntry { Glib::ustring label; tesseract::PageSegMode psmMode; bool requireOsd; }; std::vector psmModes = { PsmEntry{_("Automatic page segmentation"), tesseract::PSM_AUTO, false}, PsmEntry{_("Page segmentation with orientation and script detection"), tesseract::PSM_AUTO_OSD, true}, PsmEntry{_("Assume single column of text"), tesseract::PSM_SINGLE_COLUMN, false}, PsmEntry{_("Assume single block of vertically aligned text"), tesseract::PSM_SINGLE_BLOCK_VERT_TEXT, false}, PsmEntry{_("Assume a single uniform block of text"), tesseract::PSM_SINGLE_BLOCK, false}, PsmEntry{_("Assume a line of text"), tesseract::PSM_SINGLE_LINE, false}, PsmEntry{_("Assume a single word"), tesseract::PSM_SINGLE_WORD, false}, PsmEntry{_("Assume a single word in a circle"), tesseract::PSM_CIRCLE_WORD, false}, PsmEntry{_("Sparse text in no particular order"), tesseract::PSM_SPARSE_TEXT, false}, PsmEntry{_("Sparse text with orientation and script detection"), tesseract::PSM_SPARSE_TEXT_OSD, true} }; for(const auto& entry : psmModes) { Gtk::RadioMenuItem* item = Gtk::manage(new Gtk::RadioMenuItem(m_psmRadioGroup, entry.label)); item->set_sensitive(!entry.requireOsd || haveOsd); item->set_active(entry.psmMode == activePsm); CONNECT(item, toggled, [entry, item] { if(item->get_active()) { ConfigSettings::get>("psm")->setValue(entry.psmMode); } }); psmMenu->append(*item); } Gtk::MenuItem* psmItem = Gtk::manage(new Gtk::MenuItem(_("Page segmentation mode"))); psmItem->set_submenu(*psmMenu); append(*psmItem); Gtk::MenuItem* charlistItem = Gtk::manage(new Gtk::MenuItem(_("Character whitelist / blacklist..."))); CONNECT(charlistItem, activate, [this] { manageCharaterLists(); }); append(*charlistItem); // Add installer item append(*Gtk::manage(new Gtk::SeparatorMenuItem())); Gtk::MenuItem* manageItem = Gtk::manage(new Gtk::MenuItem(_("Manage languages..."))); CONNECT(manageItem, activate, [this] { MAIN->manageLanguages(); }); append(*manageItem); show_all(); if(activeitem) { activeitem->set_active(true); activeitem->toggled(); // Ensure signal is emitted } } bool RecognitionMenu::onMultilingualMenuButtonEvent(GdkEventButton* ev) { Gtk::Allocation alloc = m_multilingualRadio->get_allocation(); int radio_x_root, radio_y_root; m_multilingualRadio->get_window()->get_root_coords(alloc.get_x(), alloc.get_y(), radio_x_root, radio_y_root); if(ev->x_root >= radio_x_root && ev->x_root <= radio_x_root + alloc.get_width() && ev->y_root >= radio_y_root && ev->y_root <= radio_y_root + alloc.get_height()) { if(ev->type == GDK_BUTTON_PRESS) { m_multilingualRadio->set_active(true); } return true; } return false; } bool RecognitionMenu::onMultilingualItemButtonEvent(GdkEventButton* ev, Gtk::CheckMenuItem* item) { Gtk::Allocation alloc = item->get_allocation(); int item_x_root, item_y_root; item->get_window()->get_root_coords(alloc.get_x(), alloc.get_y(), item_x_root, item_y_root); if(ev->x_root >= item_x_root && ev->x_root <= item_x_root + alloc.get_width() && ev->y_root >= item_y_root && ev->y_root <= item_y_root + alloc.get_height()) { if(ev->type == GDK_BUTTON_RELEASE) { m_langMenuCheckGroup[item].second = Glib::DateTime::create_now_utc().to_unix(); item->set_active(!item->get_active()); setMultiLanguage(); } return true; } return false; } tesseract::PageSegMode RecognitionMenu::getPageSegmentationMode() const { return static_cast(ConfigSettings::get>("psm")->getValue()); } Glib::ustring RecognitionMenu::getCharacterWhitelist() const { return m_charListDialogUi.radioButtonWhitelist->get_active() ? m_charListDialogUi.entryWhitelist->get_text() : Glib::ustring(); } Glib::ustring RecognitionMenu::getCharacterBlacklist() const { return m_charListDialogUi.radioButtonBlacklist->get_active() ? m_charListDialogUi.entryBlacklist->get_text() : Glib::ustring(); } void RecognitionMenu::setLanguage(const Gtk::RadioMenuItem* item, const Config::Lang& lang) { if(item->get_active()) { m_curLang = lang; ConfigSettings::get>("language")->setValue(lang.prefix + ":" + lang.code); m_signal_languageChanged.emit(m_curLang); } } void RecognitionMenu::setMultiLanguage() { m_multilingualRadio->set_active(true); std::vector> langs; for(const auto& pair : m_langMenuCheckGroup) { if(pair.first->get_active()) { langs.push_back(std::make_pair(pair.second.first, pair.second.second)); } } std::sort(langs.begin(), langs.end(), [](auto a, auto b) { return a.second < b.second; }); Glib::ustring lang; if(langs.empty()) { lang = "eng+"; } else { for(const auto& pair : langs) { lang += pair.first + "+"; } } lang = lang.substr(0, lang.length() - 1); m_curLang = {lang, "", "Multilingual"}; ConfigSettings::get>("language")->setValue(lang + ":"); m_signal_languageChanged.emit(m_curLang); } void RecognitionMenu::manageCharaterLists() { m_charListDialogUi.dialogCharacterLists->run(); m_charListDialogUi.dialogCharacterLists->hide(); } gImageReader-3.4.0/gtk/src/RecognitionMenu.hh000066400000000000000000000042451417507262200210470ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * RecognitionMenu.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef RECOGNITIONMENU_HH #define RECOGNITIONMENU_HH #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "Config.hh" #include "ui_CharacterListDialog.hh" class RecognitionMenu : public Gtk::Menu { public: RecognitionMenu(); void rebuild(); const Config::Lang& getRecognitionLanguage() const { return m_curLang; } tesseract::PageSegMode getPageSegmentationMode() const; Glib::ustring getCharacterWhitelist() const; Glib::ustring getCharacterBlacklist() const; sigc::signal signal_languageChanged() { return m_signal_languageChanged; } private: class MultilingualMenuItem; ClassData m_classdata; Config::Lang m_curLang; Gtk::Menu* m_menuMultilanguage = nullptr; Gtk::RadioButtonGroup m_langMenuRadioGroup; Gtk::RadioButtonGroup m_psmRadioGroup; std::map> m_langMenuCheckGroup; MultilingualMenuItem* m_multilingualRadio = nullptr; Ui::CharacterListDialog m_charListDialogUi; sigc::signal m_signal_languageChanged; void setLanguage(const Gtk::RadioMenuItem* item, const Config::Lang& lang); void setMultiLanguage(); bool onMultilingualMenuButtonEvent(GdkEventButton* ev); bool onMultilingualItemButtonEvent(GdkEventButton* ev, Gtk::CheckMenuItem* item); void manageCharaterLists(); }; #endif // RECOGNITIONMENU_HH gImageReader-3.4.0/gtk/src/Recognizer.cc000066400000000000000000000406021417507262200200340ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Recognizer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "Displayer.hh" #include "MainWindow.hh" #include "OutputEditor.hh" #include "RecognitionMenu.hh" #include "Recognizer.hh" #include "Utils.hh" #include #include #include #include #define USE_STD_NAMESPACE #include #if TESSERACT_MAJOR_VERSION < 5 #include #endif #include #undef USE_STD_NAMESPACE #include #include #ifdef G_OS_WIN32 #include #define pipe(fds) _pipe(fds, 5000, _O_BINARY) #endif class Recognizer::ProgressMonitor : public MainWindow::ProgressMonitor { public: #if TESSERACT_MAJOR_VERSION < 5 ETEXT_DESC desc; #else tesseract::ETEXT_DESC desc; #endif ProgressMonitor(int nPages) : MainWindow::ProgressMonitor(nPages) { desc.progress = 0; desc.cancel = cancelCallback; desc.cancel_this = this; } int getProgress() const override { std::lock_guard lock(m_mutex); return 100.0 * ((m_progress + desc.progress / 100.0) / m_total); } static bool cancelCallback(void* instance, int /*words*/) { ProgressMonitor* monitor = reinterpret_cast(instance); std::lock_guard lock(monitor->m_mutex); return monitor->m_cancelled; } }; Recognizer::Recognizer(const Ui::MainWindow& _ui) : ui(_ui) { ui.menubuttonLanguages->set_menu(*MAIN->getRecognitionMenu()); ui.comboBoxExisting->append("overwrite", _("Overwrite existing output")); ui.comboBoxExisting->append("skip", _("Skip processing source")); ui.comboBoxExisting->set_active(0); CONNECT(ui.buttonRecognize, clicked, [this] { recognizeButtonClicked(); }); CONNECT(ui.menuitemRecognizeCurrent, activate, [this] { recognizeCurrentPage(); }); CONNECT(ui.menuitemRecognizeMultiple, activate, [this] { recognizeMultiplePages(); }); CONNECT(ui.menuitemRecognizeBatch, activate, [this] { recognizeBatch(); }); CONNECT(ui.entryPageRange, focus_in_event, [this](GdkEventFocus*) { Utils::clear_error_state(ui.entryPageRange); return false; }); CONNECT(MAIN->getRecognitionMenu(), languageChanged, [this](const Config::Lang & lang) { recognitionLanguageChanged(lang); }); ADD_SETTING(ComboSetting("ocrregionstrategy", ui.comboPageRangeRegions)); ADD_SETTING(SwitchSettingT("ocraddsourcefilename", ui.checkPageRangePrependFile)); ADD_SETTING(SwitchSettingT("ocraddsourcepage", ui.checkPageRangePrependPage)); } void Recognizer::setRecognizeMode(const Glib::ustring& mode) { ui.labelRecognizeMode->set_markup(Glib::ustring::compose("%1", mode)); } void Recognizer::recognitionLanguageChanged(const Config::Lang& lang) { Glib::ustring langLabel; if(!lang.code.empty()) { langLabel = Glib::ustring::compose("%1 (%2)", lang.name, lang.code); } else if(lang.name == "Multilingual") { langLabel = lang.prefix; } else { langLabel = lang.name; } ui.labelRecognizeLang->set_markup(Glib::ustring::compose("%1", langLabel)); } std::vector Recognizer::selectPages(bool& autodetectLayout) { int nPages = MAIN->getDisplayer()->getNPages(); ui.entryPageRange->set_text(Glib::ustring::compose("1-%1", nPages)); ui.entryPageRange->grab_focus(); ui.labelPageRangeRegions->set_visible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); ui.comboPageRangeRegions->set_visible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); ui.boxPageRangePrepend->set_visible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); Glib::RefPtr store = Glib::RefPtr::cast_static(ui.comboPageRangeRegions->get_model()); int col = ui.comboPageRangeRegions->get_entry_text_column(); store->children()[0]->set_value(col, MAIN->getDisplayer()->hasMultipleOCRAreas() ? _("Current selection") : _("Entire page")); static Glib::RefPtr validateRegEx = Glib::Regex::create("^[\\d,\\-\\s]+$"); std::vector pages; while(ui.dialogPageRange->run() == Gtk::RESPONSE_OK) { pages.clear(); Glib::ustring text = ui.entryPageRange->get_text(); if(validateRegEx->match(text)) { text = Glib::Regex::create("\\s+")->replace(text, 0, "", static_cast(0)); std::vector blocks = Utils::string_split(text, ',', false); for(const Glib::ustring& block : blocks) { std::vector ranges = Utils::string_split(block, '-', false); if(ranges.size() == 1) { int page = Utils::parseInt(ranges[0]); if(page > 0 && page <= nPages) { pages.push_back(page); } } else if(ranges.size() == 2) { int start = std::max(1, Utils::parseInt(ranges[0])); int end = std::min(nPages, Utils::parseInt(ranges[1])); for(int page = start; page <= end; ++page) { pages.push_back(page); } } else { pages.clear(); break; } } } if(pages.empty()) { Utils::set_error_state(ui.entryPageRange); } else { break; } } autodetectLayout = ui.comboPageRangeRegions->get_visible() ? ui.comboPageRangeRegions->get_active_row_number() == 1 : false; ui.dialogPageRange->hide(); std::sort(pages.begin(), pages.end()); return pages; } void Recognizer::recognizeButtonClicked() { int nPages = MAIN->getDisplayer()->getNPages(); if(nPages == 1) { recognize({MAIN->getDisplayer()->getCurrentPage()}); } else { ui.menuitemRecognizeBatch->set_visible(MAIN->getDisplayer()->getNSources() > 1); auto positioner = sigc::bind(sigc::ptr_fun(Utils::popup_positioner), ui.buttonRecognize, ui.menuRecognizePages, false, true); ui.menuRecognizePages->popup(positioner, 0, gtk_get_current_event_time()); } } void Recognizer::recognizeCurrentPage() { recognize({MAIN->getDisplayer()->getCurrentPage()}); } void Recognizer::recognizeMultiplePages() { bool autodetectLayout = false; std::vector pages = selectPages(autodetectLayout); recognize(pages, autodetectLayout); } std::unique_ptr Recognizer::setupTesseract() { Config::Lang lang = MAIN->getRecognitionMenu()->getRecognitionLanguage(); auto tess = std::unique_ptr(new Utils::TesseractHandle(lang.prefix.c_str())); if(tess->get()) { tess->get()->SetPageSegMode(MAIN->getRecognitionMenu()->getPageSegmentationMode()); tess->get()->SetVariable("tessedit_char_whitelist", MAIN->getRecognitionMenu()->getCharacterWhitelist().c_str()); tess->get()->SetVariable("tessedit_char_blacklist", MAIN->getRecognitionMenu()->getCharacterBlacklist().c_str()); #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(5, 0, 0) tess->get()->SetVariable("thresholding_method", "1"); #endif } else { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Recognition errors occurred"), _("Failed to initialize tesseract")); } return tess; } void Recognizer::recognize(const std::vector& pages, bool autodetectLayout) { bool prependFile = pages.size() > 1 && ConfigSettings::get("ocraddsourcefilename")->getValue(); bool prependPage = pages.size() > 1 && ConfigSettings::get("ocraddsourcepage")->getValue(); auto tess = setupTesseract(); if(!tess->get()) { return; } bool contains = false; for(int page : pages) { std::string source; int sourcePage; if(MAIN->getDisplayer()->resolvePage(page, source, sourcePage)) { if(MAIN->getOutputEditor()->containsSource(source, sourcePage)) { contains = true; break; } } } if(contains) { if(Utils::Button::No == Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Source already recognized"), _("One or more selected sources were already recognized. Proceed anyway?"), "", Utils::Button::Yes | Utils::Button::No)) { return; } } std::vector errors; tess->get()->SetPageSegMode(MAIN->getRecognitionMenu()->getPageSegmentationMode()); tess->get()->SetVariable("tessedit_char_whitelist", MAIN->getRecognitionMenu()->getCharacterWhitelist().c_str()); tess->get()->SetVariable("tessedit_char_blacklist", MAIN->getRecognitionMenu()->getCharacterBlacklist().c_str()); OutputEditor::ReadSessionData* readSessionData = MAIN->getOutputEditor()->initRead(*tess->get()); ProgressMonitor monitor(pages.size()); MAIN->showProgress(&monitor); MAIN->getDisplayer()->setBlockAutoscale(true); Utils::busyTask([&] { int npages = pages.size(); int idx = 0; std::string prevFile; for(int page : pages) { monitor.desc.progress = 0; ++idx; Glib::signal_idle().connect_once([ = ] { MAIN->pushState(MainWindow::State::Busy, Glib::ustring::compose(_("Recognizing page %1 (%2 of %3)"), page, idx, npages)); }); PageData pageData; Utils::runInMainThreadBlocking([&] { pageData = setPage(page, autodetectLayout); }); if(!pageData.success) { errors.push_back(Glib::ustring::compose(_("- Page %1: failed to render page"), page)); MAIN->getOutputEditor()->readError(_("\n[Failed to recognize page %1]\n"), readSessionData); continue; } readSessionData->pageInfo = pageData.pageInfo; bool firstChunk = true; bool newFile = readSessionData->pageInfo.filename != prevFile; prevFile = readSessionData->pageInfo.filename; for(const Cairo::RefPtr& image : pageData.ocrAreas) { readSessionData->prependPage = prependPage && firstChunk; readSessionData->prependFile = prependFile && (readSessionData->prependPage || newFile); firstChunk = false; newFile = false; tess->get()->SetImage(image->get_data(), image->get_width(), image->get_height(), 4, image->get_stride()); tess->get()->SetSourceResolution(MAIN->getDisplayer()->getCurrentResolution()); tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { MAIN->getOutputEditor()->read(*tess->get(), readSessionData); } } Glib::signal_idle().connect_once([] { MAIN->popState(); }); monitor.increaseProgress(); if(monitor.cancelled()) { break; } } return true; }, _("Recognizing...")); MAIN->getDisplayer()->setBlockAutoscale(false); MAIN->hideProgress(); MAIN->getOutputEditor()->finalizeRead(readSessionData); if(!errors.empty()) { showRecognitionErrorsDialog(errors); } } void Recognizer::recognizeImage(const Cairo::RefPtr& img, OutputDestination dest) { auto tess = setupTesseract(); if(!tess->get()) { return; } tess->get()->SetImage(img->get_data(), img->get_width(), img->get_height(), 4, 4 * img->get_width()); ProgressMonitor monitor(1); MAIN->showProgress(&monitor); if(dest == OutputDestination::Buffer) { OutputEditor::ReadSessionData* readSessionData = MAIN->getOutputEditor()->initRead(*tess->get()); readSessionData->pageInfo.filename = MAIN->getDisplayer()->getCurrentImage(readSessionData->pageInfo.page); readSessionData->pageInfo.angle = MAIN->getDisplayer()->getCurrentAngle(); readSessionData->pageInfo.resolution = MAIN->getDisplayer()->getCurrentResolution(); Utils::busyTask([&] { tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { MAIN->getOutputEditor()->read(*tess->get(), readSessionData); } return true; }, _("Recognizing...")); MAIN->getOutputEditor()->finalizeRead(readSessionData); } else if(dest == OutputDestination::Clipboard) { Glib::ustring output; if(Utils::busyTask([&] { tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { char* text = tess->get()->GetUTF8Text(); output = text; delete[] text; return true; } return false; }, _("Recognizing..."))) { Gtk::Clipboard::get()->set_text(output); } } MAIN->hideProgress(); } void Recognizer::recognizeBatch() { ui.checkBoxPrependPage->set_visible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); ui.checkBoxAutolayout->set_visible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); int response = ui.dialogBatch->run(); ui.dialogBatch->hide(); if(response != Gtk::RESPONSE_OK) { return; } Glib::ustring existingBehaviour = ui.comboBoxExisting->get_active_id(); bool prependPage = MAIN->getDisplayer()->allowAutodetectOCRAreas() && ui.checkBoxPrependPage->get_active(); bool autolayout = MAIN->getDisplayer()->allowAutodetectOCRAreas() && ui.checkBoxAutolayout->get_active(); int nPages = MAIN->getDisplayer()->getNPages(); auto tess = setupTesseract(); if(!tess->get()) { return; } std::map batchOptions; batchOptions["prependPage"] = prependPage ? "1" : "0"; OutputEditor::BatchProcessor* batchProcessor = MAIN->getOutputEditor()->createBatchProcessor(batchOptions); std::vector errors; ProgressMonitor monitor(nPages); MAIN->showProgress(&monitor); MAIN->getDisplayer()->setBlockAutoscale(true); Utils::busyTask([&] { int idx = 0; std::string currFilename; std::ofstream outputFile; for(int page = 1; page <= nPages; ++page) { monitor.desc.progress = 0; ++idx; Glib::signal_idle().connect_once([ = ] { MAIN->pushState(MainWindow::State::Busy, Glib::ustring::compose(_("Recognizing page %1 (%2 of %3)"), page, idx, nPages)); }); PageData pageData; pageData.success = false; Utils::runInMainThreadBlocking([&] { pageData = setPage(page, autolayout); }); if(!pageData.success) { errors.push_back(Glib::ustring::compose(_("- %1:%2: failed to render page"), Glib::path_get_basename(pageData.pageInfo.filename), page)); continue; } if(pageData.pageInfo.filename != currFilename) { if(outputFile.is_open()) { batchProcessor->writeFooter(outputFile); outputFile.close(); } currFilename = pageData.pageInfo.filename; std::string fileName = Utils::split_filename(currFilename).first + batchProcessor->fileSuffix(); bool exists = Glib::file_test(fileName, Glib::FILE_TEST_EXISTS); if(exists && existingBehaviour == "skip") { errors.push_back(Glib::ustring::compose(_("- %1: output already exists, skipping"), Glib::path_get_basename(fileName))); } else { outputFile.open(fileName); if(!outputFile.is_open()) { errors.push_back(Glib::ustring::compose(_("- %1: failed to create output file"), Glib::path_get_basename(fileName), page)); } else { batchProcessor->writeHeader(outputFile, tess->get(), pageData.pageInfo); } } } if(outputFile.is_open()) { bool firstChunk = true; for(const Cairo::RefPtr& image : pageData.ocrAreas) { tess->get()->SetImage(image->get_data(), image->get_width(), image->get_height(), 4, image->get_stride()); tess->get()->SetSourceResolution(MAIN->getDisplayer()->getCurrentResolution()); tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { batchProcessor->appendOutput(outputFile, tess->get(), pageData.pageInfo, firstChunk); } firstChunk = false; } } Glib::signal_idle().connect_once([] { MAIN->popState(); }); monitor.increaseProgress(); if(monitor.cancelled()) { break; } } if(outputFile.is_open()) { batchProcessor->writeFooter(outputFile); outputFile.close(); } return true; }, _("Recognizing...")); MAIN->getDisplayer()->setBlockAutoscale(false); MAIN->hideProgress(); if(!errors.empty()) { showRecognitionErrorsDialog(errors); } delete batchProcessor; } Recognizer::PageData Recognizer::setPage(int page, bool autodetectLayout) { PageData pageData; pageData.success = MAIN->getDisplayer()->setup(&page); if(pageData.success) { if(autodetectLayout) { MAIN->getDisplayer()->autodetectOCRAreas(); } pageData.pageInfo.filename = MAIN->getDisplayer()->getCurrentImage(pageData.pageInfo.page); pageData.pageInfo.angle = MAIN->getDisplayer()->getCurrentAngle(); pageData.pageInfo.resolution = MAIN->getDisplayer()->getCurrentResolution(); pageData.ocrAreas = MAIN->getDisplayer()->getOCRAreas(); } return pageData; } void Recognizer::showRecognitionErrorsDialog(const std::vector& errors) { Utils::messageBox(Gtk::MESSAGE_WARNING, _("Recognition errors occurred"), _("The following errors occurred:"), Utils::string_join(errors, "\n")); } gImageReader-3.4.0/gtk/src/Recognizer.hh000066400000000000000000000041521417507262200200460ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Recognizer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef RECOGNIZER_HH #define RECOGNIZER_HH #include "Config.hh" #include "OutputEditor.hh" #include #include namespace Ui { class MainWindow; } namespace Utils { class TesseractHandle; } class Recognizer { public: enum class OutputDestination { Buffer, Clipboard }; Recognizer(const Ui::MainWindow& _ui); void setRecognizeMode(const Glib::ustring& mode); void recognizeImage(const Cairo::RefPtr& img, OutputDestination dest); private: class ProgressMonitor; enum class PageArea { EntirePage, Autodetect }; enum class TaskState { Waiting, Succeeded, Failed }; struct PageData { bool success; std::vector> ocrAreas; OutputEditor::PageInfo pageInfo; }; const Ui::MainWindow& ui; ClassData m_classdata; void recognitionLanguageChanged(const Config::Lang& lang); void recognizeButtonClicked(); void recognizeCurrentPage(); void recognizeMultiplePages(); void recognizeBatch(); std::unique_ptr setupTesseract(); void recognize(const std::vector& pages, bool autodetectLayout = false); std::vector selectPages(bool& autodetectLayout); PageData setPage(int page, bool autodetectLayout); void showRecognitionErrorsDialog(const std::vector& errors); }; #endif // RECOGNIZER_HH gImageReader-3.4.0/gtk/src/Scanner.hh000066400000000000000000000044721417507262200173350ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Scanner.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_HH #define SCANNER_HH #include "common.hh" class Scanner { public: enum class State { IDLE = 0, OPEN, SET_OPTIONS, START, GET_PARAMETERS, READ }; enum class ScanMode { DEFAULT = 0, COLOR, GRAY, LINEART }; enum class ScanType { SINGLE = 0, ADF_FRONT, ADF_BACK, ADF_BOTH }; struct Device { std::string name; std::string label; }; struct Params { std::string device; std::string filename; double dpi; ScanMode scan_mode; int depth; ScanType type; int page_width; int page_height; }; virtual ~Scanner() { } virtual void init() = 0; virtual void redetect() = 0; virtual void scan(const Params& params) = 0; virtual void cancel() = 0; virtual void close() = 0; sigc::signal signal_initFailed() const { return m_signal_initFailed; } sigc::signal> signal_devicesDetected() const { return m_signal_devicesDetected; } sigc::signal signal_scanFailed() const { return m_signal_scanFailed; } sigc::signal signal_scanStateChanged() const { return m_signal_scanStateChanged; } sigc::signal signal_pageAvailable() const { return m_signal_pageAvailable; } protected: sigc::signal m_signal_initFailed; sigc::signal> m_signal_devicesDetected; sigc::signal m_signal_scanFailed; sigc::signal m_signal_scanStateChanged; sigc::signal m_signal_pageAvailable; }; #endif // SCANNER_HH gImageReader-3.4.0/gtk/src/SearchReplaceFrame.cc000066400000000000000000000045451417507262200214070ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SearchReplaceFrame.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "SearchReplaceFrame.hh" #include "SubstitutionsManager.hh" #include "Utils.hh" SearchReplaceFrame::SearchReplaceFrame() { ui.setupUi(); m_substitutionsManager = new SubstitutionsManager(); CONNECT(ui.checkbuttonMatchcase, toggled, [this] { clearErrorState(); }); CONNECT(ui.entrySearch, changed, [this] { clearErrorState(); }); CONNECT(ui.entrySearch, activate, [this] { findNext(); }); CONNECT(ui.entryReplace, activate, [this] { replaceNext(); }); CONNECT(ui.buttonSearchnext, clicked, [this] { findNext(); }); CONNECT(ui.buttonSearchprev, clicked, [this] { findPrev(); }); CONNECT(ui.buttonReplace, clicked, [this] { replaceNext(); }); CONNECT(ui.buttonReplaceall, clicked, [this] { emitReplaceAll(); }); CONNECT(ui.buttonSubstitutions, clicked, [this] { m_substitutionsManager->set_visible(true); }); CONNECT(m_substitutionsManager, apply_substitutions, [this]( const std::map& substitutions) { emitApplySubstitutions(substitutions); }); ADD_SETTING(SwitchSettingT("searchmatchcase", ui.checkbuttonMatchcase)); } SearchReplaceFrame::~SearchReplaceFrame() { delete m_substitutionsManager; } void SearchReplaceFrame::clear() { ui.entrySearch->set_text(""); ui.entryReplace->set_text(""); } void SearchReplaceFrame::clearErrorState() { Utils::clear_error_state(ui.entrySearch); } void SearchReplaceFrame::setErrorState() { Utils::set_error_state(ui.entrySearch); } void SearchReplaceFrame::hideSubstitutionsManager() { m_substitutionsManager->set_visible(false); } gImageReader-3.4.0/gtk/src/SearchReplaceFrame.hh000066400000000000000000000056621417507262200214220ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SearchReplaceFrame.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SEARCHREPLACEFRAME_HH #define SEARCHREPLACEFRAME_HH #include "common.hh" #include "ui_SearchReplaceFrame.hh" class SubstitutionsManager; class SearchReplaceFrame { public: explicit SearchReplaceFrame(); ~SearchReplaceFrame(); Gtk::Box* getWidget() const { return ui.boxSearchreplace; } Gtk::Button* replaceAllButton() const { return ui.buttonReplaceall; } void clear(); void clearErrorState(); void setErrorState(); void hideSubstitutionsManager(); sigc::signal signal_find_replace() { return m_signal_find_replace; } sigc::signal signal_replace_all() { return m_signal_replace_all; } sigc::signal&, bool> signal_apply_substitutions() { return m_signal_apply_substitutions; } private: sigc::signal m_signal_find_replace; sigc::signal m_signal_replace_all; sigc::signal&, bool> m_signal_apply_substitutions; Ui::SearchReplaceFrame ui; ClassData m_classdata; SubstitutionsManager* m_substitutionsManager; private: void findNext() { m_signal_find_replace.emit(ui.entrySearch->get_text(), ui.entryReplace->get_text(), ui.checkbuttonMatchcase->get_active(), false, false); } void findPrev() { m_signal_find_replace.emit(ui.entrySearch->get_text(), ui.entryReplace->get_text(), ui.checkbuttonMatchcase->get_active(), true, false); } void replaceNext() { m_signal_find_replace.emit(ui.entrySearch->get_text(), ui.entryReplace->get_text(), ui.checkbuttonMatchcase->get_active(), false, true); } void emitReplaceAll() { m_signal_replace_all.emit(ui.entrySearch->get_text(), ui.entryReplace->get_text(), ui.checkbuttonMatchcase->get_active()); } void emitApplySubstitutions(const std::map& substitutions) { m_signal_apply_substitutions.emit(substitutions, ui.checkbuttonMatchcase->get_active()); } }; #endif // SEARCHREPLACEFRAME_HH gImageReader-3.4.0/gtk/src/SourceManager.cc000066400000000000000000000543401417507262200204640ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SourceManager.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "FileDialogs.hh" #include "FileTreeModel.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "Utils.hh" #include #include SourceManager::SourceManager(const Ui::MainWindow& _ui) : ui(_ui) { // Document tree view m_fileTreeModel = Glib::RefPtr(new FileTreeModel()); ui.treeviewSources->set_model(m_fileTreeModel); ui.treeviewSources->get_selection()->set_mode(Gtk::SELECTION_MULTIPLE); ui.treeviewSources->set_tooltip_column(FileTreeModel::COLUMN_TOOLTIP); // First column: [icon][text] Gtk::TreeViewColumn* itemViewCol1 = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererPixbuf& iconRenderer = *Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererText& textRenderer = *Gtk::manage(new Gtk::CellRendererText); textRenderer.property_ellipsize() = Pango::ELLIPSIZE_END; itemViewCol1->pack_start(iconRenderer, false); itemViewCol1->pack_start(textRenderer, true); itemViewCol1->add_attribute(iconRenderer, "pixbuf", FileTreeModel::COLUMN_ICON); itemViewCol1->add_attribute(textRenderer, "text", FileTreeModel::COLUMN_TEXT); itemViewCol1->add_attribute(textRenderer, "style", FileTreeModel::COLUMN_TEXTSTYLE); ui.treeviewSources->append_column(*itemViewCol1); ui.treeviewSources->set_expander_column(*itemViewCol1); itemViewCol1->set_expand(true); itemViewCol1->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); // Second column: editable icon Gtk::TreeViewColumn* itemViewCol2 = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererPixbuf& editiconRenderer = *Gtk::manage(new Gtk::CellRendererPixbuf); itemViewCol2->pack_start(editiconRenderer, true); itemViewCol2->add_attribute(editiconRenderer, "pixbuf", FileTreeModel::COLUMN_EDITICON); ui.treeviewSources->append_column(*itemViewCol2); itemViewCol2->set_fixed_width(32); itemViewCol2->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); ui.treeviewSources->set_fixed_height_mode(); ui.treeviewSources->property_activate_on_single_click() = true; Glib::RefPtr recentFilter = Gtk::RecentFilter::create(); recentFilter->add_pixbuf_formats(); recentFilter->add_mime_type("application/pdf"); recentFilter->add_pattern("*.pdf"); recentFilter->add_mime_type("image/vnd.djvu"); recentFilter->add_pattern("*.djvu"); Gtk::RecentChooserMenu* recentChooser = Gtk::manage(new Gtk::RecentChooserMenu()); recentChooser->set_filter(recentFilter); recentChooser->set_local_only(false); recentChooser->set_show_not_found(false); recentChooser->set_show_tips(true); recentChooser->set_sort_type(Gtk::RECENT_SORT_MRU); ui.menubuttonSourcesAdd->set_menu(*recentChooser); m_clipboard = Gtk::Clipboard::get_for_display(Gdk::Display::get_default()); CONNECT(ui.buttonSources, toggled, [this] { ui.notebookSources->set_visible(ui.buttonSources->get_active()); }); CONNECT(ui.buttonSourcesAdd, clicked, [this] { openSources(); }); CONNECT(m_clipboard, owner_change, [this](GdkEventOwnerChange*) { ui.buttonSourcePaste->set_sensitive(m_clipboard->wait_is_image_available()); }); CONNECT(ui.buttonSourceFolder, clicked, [this] { addFolder(); }); CONNECT(ui.buttonSourcePaste, clicked, [this] { pasteClipboard(); }); CONNECT(ui.buttonSourceScreenshot, clicked, [this] { takeScreenshot(); }); CONNECT(ui.buttonSourcesRemove, clicked, [this] { removeSource(false); }); CONNECT(ui.buttonSourcesDelete, clicked, [this] { removeSource(true); }); CONNECT(ui.buttonSourcesClear, clicked, [this] { clearSources(); }); m_connectionSelectionChanged = CONNECT(ui.treeviewSources->get_selection(), changed, [this] { selectionChanged(); }); CONNECT(ui.treeviewSources, row_activated, [this] (const Gtk::TreePath & path, Gtk::TreeViewColumn * col) { indexClicked(path, col); }); CONNECT(recentChooser, item_activated, [this, recentChooser] { addSources({Gio::File::create_for_uri(recentChooser->get_current_uri())}); }); CONNECT(m_fileTreeModel, row_inserted, [this] (const Gtk::TreePath&, const Gtk::TreeIter&) { ui.buttonSourcesClear->set_sensitive(!m_fileTreeModel->empty()); }); CONNECT(m_fileTreeModel, row_deleted, [this] (const Gtk::TreePath&) { ui.buttonSourcesClear->set_sensitive(!m_fileTreeModel->empty()); }); // Handle drops on the scrolled window ui.scrollwinSources->drag_dest_set({Gtk::TargetEntry("text/uri-list")}, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP, Gdk::ACTION_COPY | Gdk::ACTION_MOVE); CONNECT(ui.scrollwinSources, drag_data_received, sigc::ptr_fun(Utils::handle_drag_drop)); } SourceManager::~SourceManager() { clearSources(); } int SourceManager::addSources(const std::vector>& files, bool suppressWarnings) { std::vector failed; int added = 0; PdfWithTextAction textAction = suppressWarnings ? PdfWithTextAction::Add : PdfWithTextAction::Ask; std::vector selectIters; for(Glib::RefPtr file : files) { std::string filename = file->get_path(); if(!file->query_exists()) { failed.push_back(filename); continue; } Gtk::TreeIter index = m_fileTreeModel->findFile(filename); if(index) { selectIters.push_back(index); ++added; continue; } Source* source = new Source(file, file->get_basename(), file->monitor_file(Gio::FILE_MONITOR_SEND_MOVED), false); #ifdef G_OS_WIN32 if(Glib::ustring(filename.substr(filename.length() - 4)).lowercase() == ".pdf" && !checkPdfSource(source, textAction, failed)) { #else if(Utils::get_content_type(filename) == "application/pdf" && !checkPdfSource(source, textAction, failed)) { #endif delete source; continue; } index = m_fileTreeModel->insertFile(filename, source); std::string dir = Glib::path_get_dirname(filename); if(m_watchedDirectories.find(dir) == m_watchedDirectories.end()) { Glib::RefPtr dirmonitor = Gio::File::create_for_path(dir)->monitor_directory(Gio::FILE_MONITOR_SEND_MOVED); CONNECT(dirmonitor, changed, sigc::mem_fun(*this, &SourceManager::dirChanged)); m_watchedDirectories.insert(std::make_pair(dir, std::make_pair(1, dirmonitor))); } else { m_watchedDirectories[dir].first += 1; } std::string base = Utils::split_filename(filename).first; if(Glib::file_test(base + ".txt", Glib::FILE_TEST_EXISTS) || Glib::file_test(base + ".html", Glib::FILE_TEST_EXISTS)) { m_fileTreeModel->setFileEditable(index, true); } selectIters.push_back(index); CONNECT(source->monitor, changed, sigc::mem_fun(*this, &SourceManager::fileChanged)); Gtk::RecentManager::get_default()->add_item(file->get_uri()); ++added; } m_connectionSelectionChanged.block(true); if(added > 0) { ui.treeviewSources->get_selection()->unselect_all(); Glib::RefPtr selection = ui.treeviewSources->get_selection(); bool scrolled = false; for(const Gtk::TreeIter& it : selectIters) { Gtk::TreePath path = m_fileTreeModel->get_path(it); ui.treeviewSources->expand_to_path(path); if(!scrolled) { ui.treeviewSources->scroll_to_row(path); scrolled = true; } selection->select(it); } } m_connectionSelectionChanged.block(false); selectionChanged(); if(!failed.empty() && !suppressWarnings) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Unable to open files"), Glib::ustring::compose(_("The following files could not be opened:\n%1"), Utils::string_join(failed, "\n"))); } return added; } bool SourceManager::checkPdfSource(Source* source, PdfWithTextAction& textAction, std::vector& failed) const { GError* err = nullptr; std::string filename = source->file->get_path(); PopplerDocument* document = poppler_document_new_from_file(Glib::filename_to_uri(filename).c_str(), 0, &err); // Unlock if necessary if(err && g_error_matches (err, POPPLER_ERROR, POPPLER_ERROR_ENCRYPTED)) { g_error_free(err); err = nullptr; ui.labelPdfpassword->set_text(Glib::ustring::compose(_("Enter password for file '%1':"), source->file->get_basename())); ui.entryPdfpassword->set_text(""); while(true) { ui.entryPdfpassword->select_region(0, -1); ui.entryPdfpassword->grab_focus(); int response = ui.dialogPdfpassword->run(); ui.dialogPdfpassword->hide(); if(response != Gtk::RESPONSE_OK) { return false; } Glib::ustring pass = ui.entryPdfpassword->get_text(); document = poppler_document_new_from_file(Glib::filename_to_uri(filename).c_str(), pass.c_str(), &err); if(!err) { source->password = pass; break; } else if(!g_error_matches (err, POPPLER_ERROR, POPPLER_ERROR_ENCRYPTED)) { break; } g_error_free(err); err = nullptr; } } if(err) { g_error_free(err); err = nullptr; failed.push_back(filename); } // Check whether the PDF already contains text if(textAction != PdfWithTextAction::Add) { bool haveText = false; for (int i = 0, n = poppler_document_get_n_pages(document); i < n; ++i) { PopplerPage* poppage = poppler_document_get_page(document, i); bool hasText = poppler_page_get_text(poppage) != nullptr; g_object_unref(poppage); if(hasText) { haveText = true; break; } } if(haveText && textAction == PdfWithTextAction::Skip) { return false; } int response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("PDF with text"), Glib::ustring::compose(_("The PDF file already contains text:\n%1\nOpen it regardless?"), filename), "", Utils::Button::Yes | Utils::Button::YesAll | Utils::Button::No | Utils::Button::NoAll); if(response == Utils::Button::No) { return false; } else if(response == Utils::Button::NoAll) { textAction = PdfWithTextAction::Skip; return false; } else if(response == Utils::Button::YesAll) { textAction = PdfWithTextAction::Add; } } // Extract document metadata source->author = poppler_document_get_author(document) ? poppler_document_get_author(document) : ""; source->creator = poppler_document_get_creator(document) ? poppler_document_get_creator(document) : ""; source->keywords = poppler_document_get_keywords(document) ? poppler_document_get_keywords(document) : ""; source->producer = poppler_document_get_producer(document) ? poppler_document_get_producer(document) : ""; source->title = poppler_document_get_title(document) ? poppler_document_get_title(document) : ""; source->subject = poppler_document_get_subject(document) ? poppler_document_get_subject(document) : ""; poppler_document_get_pdf_version(document, &source->pdfVersionMajor, &source->pdfVersionMinor); return true; } std::vector SourceManager::getSelectedSources() const { std::vector selectedSources; for(const Gtk::TreeModel::Path& path : ui.treeviewSources->get_selection()->get_selected_rows()) { Source* source = m_fileTreeModel->fileData(m_fileTreeModel->get_iter(path)); if(source) { selectedSources.push_back(source); } } return selectedSources; } void SourceManager::addFolder() { std::vector current = getSelectedSources(); std::string initialFolder = Utils::get_documents_dir(); if(!current.empty() && !current.front()->isTemp) { initialFolder = current.front()->file->get_parent()->get_path(); } std::string path = FileDialogs::open_folder_dialog(_("Select folder..."), initialFolder, "sourcedir"); if(path.empty()) { return; } std::set filters; for(const Gdk::PixbufFormat& format : Gdk::Pixbuf::get_formats()) { for(const Glib::ustring& extension : format.get_extensions()) { filters.insert(extension); } } filters.insert("pdf"); filters.insert("djvu"); std::vector> filenames; Utils::list_dir(path, filters, filenames); if(!filenames.empty()) { addSources(filenames); } } void SourceManager::openSources() { std::vector curSrc = getSelectedSources(); std::string initialFolder = !curSrc.empty() ? Glib::path_get_dirname(curSrc.front()->file->get_path()) : Utils::get_documents_dir(); FileDialogs::FileFilter filter = FileDialogs::FileFilter::pixbuf_formats(); filter.name = _("Images and PDFs"); filter.mime_types.push_back("application/pdf"); filter.patterns.push_back("*.pdf"); filter.mime_types.push_back("image/vnd.djvu"); filter.patterns.push_back("*.djvu"); addSources(FileDialogs::open_dialog(_("Select Files"), initialFolder, "sourcedir", filter, true)); } void SourceManager::pasteClipboard() { Glib::RefPtr pixbuf = m_clipboard->wait_for_image(); if(!pixbuf) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Clipboard Error"), _("Failed to read the clipboard.")); return; } ++m_pasteCount; std::string displayname = Glib::ustring::compose(_("Pasted %1"), m_pasteCount); savePixbuf(pixbuf, displayname); } void SourceManager::takeScreenshot() { MAIN->getWindow()->iconify(); while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } Glib::signal_timeout().connect_once([this] { Glib::RefPtr root = Gdk::Window::get_default_root_window(); int x, y, w, h; root->get_origin(x, y); w = root->get_width(); h = root->get_height(); Glib::RefPtr pixbuf = Gdk::Pixbuf::create(root, x, y, w, h); MAIN->getWindow()->deiconify(); if(!pixbuf) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Screenshot Error"), _("Failed to take screenshot.")); return; } ++m_screenshotCount; std::string displayname = Glib::ustring::compose(_("Screenshot %1"), m_screenshotCount); savePixbuf(pixbuf, displayname); }, 250); } void SourceManager::savePixbuf(const Glib::RefPtr& pixbuf, const std::string& displayname) { MAIN->pushState(MainWindow::State::Busy, _("Saving image...")); std::string filename; try { int fd = Glib::file_open_tmp(filename, PACKAGE_NAME); close(fd); pixbuf->save(filename, "png"); } catch(Glib::FileError&) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Cannot Write File"), Glib::ustring::compose(_("Could not write to %1."), filename)); MAIN->popState(); return; } MAIN->popState(); Glib::RefPtr file = Gio::File::create_for_path(filename); Source* source = new Source(file, displayname, file->monitor_file(Gio::FILE_MONITOR_SEND_MOVED), true); Gtk::TreeIter it = m_fileTreeModel->insertFile(filename, source, displayname); CONNECT(source->monitor, changed, sigc::mem_fun(*this, &SourceManager::fileChanged)); std::string dir = Glib::path_get_dirname(filename); if(m_watchedDirectories.find(dir) == m_watchedDirectories.end()) { Glib::RefPtr dirmonitor = Gio::File::create_for_path(dir)->monitor_directory(Gio::FILE_MONITOR_SEND_MOVED); CONNECT(dirmonitor, changed, sigc::mem_fun(*this, &SourceManager::dirChanged)); m_watchedDirectories.insert(std::make_pair(dir, std::make_pair(1, dirmonitor))); } else { m_watchedDirectories[dir].first += 1; } m_connectionSelectionChanged.block(true); ui.treeviewSources->get_selection()->unselect_all(); m_connectionSelectionChanged.block(false); Gtk::TreePath path = m_fileTreeModel->get_path(it); ui.treeviewSources->expand_to_path(path); ui.treeviewSources->get_selection()->select(it); ui.treeviewSources->scroll_to_row(path); } void SourceManager::removeSource(bool deleteFile) { std::vector paths; std::vector treePaths; for(const Gtk::TreeModel::Path& path : ui.treeviewSources->get_selection()->get_selected_rows()) { Source* source = m_fileTreeModel->fileData(m_fileTreeModel->get_iter(path)); if(source) { paths.push_back(source->file->get_path()); treePaths.push_back(path); } } if(paths.empty()) { return; } if(deleteFile && Utils::Button::Yes != Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Delete File?"), _("Delete the following files?"), Utils::string_join(paths, "\n"), Utils::Button::Yes | Utils::Button::No)) { return; } // Avoid multiple sourceChanged emissions when removing items m_connectionSelectionChanged.block(true); // Selection returns ordered tree paths - remove them in reverse order so that the previous ones stay valid for(Gtk::TreePath treePath : Utils::reverse(treePaths)) { Gtk::TreeIter index = m_fileTreeModel->get_iter(treePath); Source* source = m_fileTreeModel->fileData(index); if(source && deleteFile) { source->file->remove(); std::string dir = Glib::path_get_dirname(source->file->get_path()); auto it = m_watchedDirectories.find(dir); if(it != m_watchedDirectories.end()) { if(it->second.first == 1) { m_watchedDirectories.erase(it); } else { it->second.first -= 1; } } } m_fileTreeModel->removeIndex(index); } m_connectionSelectionChanged.block(false); selectionChanged(); } void SourceManager::clearSources() { m_fileTreeModel->clear(); m_watchedDirectories.clear(); selectionChanged(); } void SourceManager::indexClicked(const Gtk::TreePath& path, Gtk::TreeViewColumn* col) { Gtk::TreeIter index = m_fileTreeModel->get_iter(path); Source* source = m_fileTreeModel->fileData(index); if(col == ui.treeviewSources->get_column(1) && source && m_fileTreeModel->isFileEditable(index)) { std::string base = Utils::split_filename(source->file->get_path()).first; bool hasTxt = Glib::file_test(base + ".txt", Glib::FILE_TEST_EXISTS); bool hasHtml = Glib::file_test(base + ".html", Glib::FILE_TEST_EXISTS); if(hasTxt && hasHtml) { Utils::Button::Type response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Open output"), _("Both a text and a hOCR output were found. Which one do you want to open?"), "", Utils::Button::Text | Utils::Button::HOCR | Utils::Button::Cancel); if(response == Utils::Button::Text) { MAIN->openOutput(base + ".txt"); } else if(response == Utils::Button::HOCR) { MAIN->openOutput(base + ".html"); } } else if(hasTxt) { MAIN->openOutput(base + ".txt"); } else if(hasHtml) { MAIN->openOutput(base + ".html"); } } } void SourceManager::selectRecursive(const Gtk::TreeIter& iter, std::vector& selection) const { for(const Gtk::TreeIter& child : iter->children()) { selection.push_back(child); selectRecursive(child, selection); } } void SourceManager::selectionChanged() { if(m_inSelectionChanged) { return; } m_inSelectionChanged = true; // Merge selection of all children of selected items std::vector selection; for(const Gtk::TreePath& path : ui.treeviewSources->get_selection()->get_selected_rows()) { selectRecursive(m_fileTreeModel->get_iter(path), selection); } for(const Gtk::TreeIter& iter : selection) { ui.treeviewSources->expand_to_path(m_fileTreeModel->get_path(iter)); ui.treeviewSources->get_selection()->select(iter); } bool enabled = !ui.treeviewSources->get_selection()->get_selected_rows().empty(); ui.buttonSourcesRemove->set_sensitive(enabled); ui.buttonSourcesDelete->set_sensitive(enabled); m_signal_sourceChanged.emit(); m_inSelectionChanged = false; } void SourceManager::fileChanged(const Glib::RefPtr& file, const Glib::RefPtr& otherFile, Gio::FileMonitorEvent event) { Gtk::TreeIter it = m_fileTreeModel->findFile(file->get_path()); if(!it) { return; } if(event == Gio::FILE_MONITOR_EVENT_MOVED) { bool wasSelected = ui.treeviewSources->get_selection()->is_selected(it); if(wasSelected) { ui.treeviewSources->get_selection()->unselect(it); } m_fileTreeModel->removeIndex(it); std::string dir = Glib::path_get_dirname(file->get_path()); auto watchIt = m_watchedDirectories.find(dir); if(watchIt != m_watchedDirectories.end()) { if(watchIt->second.first == 1) { m_watchedDirectories.erase(watchIt); } else { watchIt->second.first -= 1; } } Source* newSource = new Source(otherFile, otherFile->get_basename(), otherFile->monitor_file(Gio::FILE_MONITOR_SEND_MOVED)); CONNECT(newSource->monitor, changed, sigc::mem_fun(*this, &SourceManager::fileChanged)); it = m_fileTreeModel->insertFile(otherFile->get_path(), newSource); if(wasSelected) { ui.treeviewSources->get_selection()->select(it); } dir = Glib::path_get_dirname(otherFile->get_path()); if(m_watchedDirectories.find(dir) == m_watchedDirectories.end()) { Glib::RefPtr dirmonitor = Gio::File::create_for_path(dir)->monitor_directory(Gio::FILE_MONITOR_SEND_MOVED); CONNECT(dirmonitor, changed, sigc::mem_fun(*this, &SourceManager::dirChanged)); m_watchedDirectories.insert(std::make_pair(dir, std::make_pair(1, dirmonitor))); } else { m_watchedDirectories[dir].first += 1; } std::string base = Utils::split_filename(otherFile->get_path()).first; m_fileTreeModel->setFileEditable(it, Glib::file_test(base + ".txt", Glib::FILE_TEST_EXISTS) || Glib::file_test(base + ".html", Glib::FILE_TEST_EXISTS)); } else if(event == Gio::FILE_MONITOR_EVENT_DELETED) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Missing File"), Glib::ustring::compose(_("The following file has been deleted or moved:\n%1"), file->get_path())); m_fileTreeModel->removeIndex(it); std::string dir = Glib::path_get_dirname(file->get_path()); auto watchIt = m_watchedDirectories.find(dir); if(watchIt != m_watchedDirectories.end()) { if(watchIt->second.first == 1) { m_watchedDirectories.erase(watchIt); } else { watchIt->second.first -= 1; } } } } void SourceManager::dirChanged(const Glib::RefPtr& file, const Glib::RefPtr& /*otherFile*/, Gio::FileMonitorEvent event) { if(event == Gio::FILE_MONITOR_EVENT_CREATED || event == Gio::FILE_MONITOR_EVENT_DELETED) { std::string dir = Glib::path_get_dirname(file->get_path()); // Update editable status of files in directory Gtk::TreeIter index = m_fileTreeModel->findFile(dir, false); if(index) { for(const Gtk::TreeIter& child : index->children()) { Source* source = m_fileTreeModel->fileData(child); if(source) { std::string base = Utils::split_filename(source->file->get_path()).first; m_fileTreeModel->setFileEditable(child, Glib::file_test(base + ".txt", Glib::FILE_TEST_EXISTS) || Glib::file_test(base + ".html", Glib::FILE_TEST_EXISTS)); } } } } } gImageReader-3.4.0/gtk/src/SourceManager.hh000066400000000000000000000066401417507262200204760ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SourceManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SOURCEMANAGER_HH #define SOURCEMANAGER_HH #include "common.hh" #include namespace Ui { class MainWindow; } class DisplayRenderer; class FileTreeModel; struct Source : public DataObject { Source(const Glib::RefPtr& _file, const std::string& _displayname, const Glib::RefPtr& _monitor, bool _isTemp = false) : file(_file), displayname(_displayname), monitor(_monitor), isTemp(_isTemp) {} ~Source() { if(isTemp && file) { file->remove(); } } Glib::RefPtr file; std::string displayname; Glib::ustring password; Glib::RefPtr monitor; bool isTemp; int brightness = 0; int contrast = 0; int resolution = -1; int page = 1; std::vector angle; bool invert = false; //Additional info from original file Glib::ustring author, title, creator, producer, keywords, subject; guint pdfVersionMajor = -1, pdfVersionMinor = -1; }; class SourceManager { public: SourceManager(const Ui::MainWindow& _ui); ~SourceManager(); int addSources(const std::vector>& files, bool suppressWarnings = false); bool addSource(Glib::RefPtr file, bool suppressWarnings) { return addSources({file}, suppressWarnings) == 1; } std::vector getSelectedSources() const; sigc::signal signal_sourceChanged() { return m_signal_sourceChanged; } private: enum class PdfWithTextAction {Ask, Add, Skip}; const Ui::MainWindow& ui; ClassData m_classdata; Glib::RefPtr m_fileTreeModel; std::map>> m_watchedDirectories; Glib::RefPtr m_clipboard; int m_screenshotCount = 0; int m_pasteCount = 0; sigc::signal m_signal_sourceChanged; sigc::connection m_connectionSelectionChanged; bool m_inSelectionChanged = false; void clearSources(); void indexClicked(const Gtk::TreePath& path, Gtk::TreeViewColumn* col); void fileChanged(const Glib::RefPtr& file, const Glib::RefPtr& otherFile, Gio::FileMonitorEvent event); void dirChanged(const Glib::RefPtr& file, const Glib::RefPtr& otherFile, Gio::FileMonitorEvent event); void addFolder(); void openSources(); void pasteClipboard(); bool checkPdfSource(Source* source, PdfWithTextAction& textAction, std::vector& failed) const; void removeSource(bool deleteFile); void savePixbuf(const Glib::RefPtr& pixbuf, const std::string& displayname); void selectionChanged(); void selectRecursive(const Gtk::TreeIter& iter, std::vector& selection) const; void takeScreenshot(); }; #endif // SOURCEMANAGER_HH gImageReader-3.4.0/gtk/src/SubstitutionsManager.cc000066400000000000000000000141231417507262200221160ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SubstitutionsManager.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "SubstitutionsManager.hh" #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "OutputBuffer.hh" #include "Utils.hh" #include SubstitutionsManager::SubstitutionsManager() { ui.setupUi(); m_listStore = Gtk::ListStore::create(m_viewCols); ui.treeview->set_model(m_listStore); ui.treeview->append_column_editable(_("Search for"), m_viewCols.search); ui.treeview->append_column_editable(_("Replace with"), m_viewCols.replace); ui.treeview->get_column(0)->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); ui.treeview->get_column(1)->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); ui.treeview->get_column(0)->set_expand(true); ui.treeview->get_column(1)->set_expand(true); ui.treeview->set_fixed_height_mode(); CONNECT(ui.toolbuttonOpen, clicked, [this] { openList(); }); CONNECT(ui.toolbuttonSave, clicked, [this] { saveList(); }); CONNECT(ui.toolbuttonClear, clicked, [this] { clearList(); }); CONNECT(ui.toolbuttonAdd, clicked, [this] { addRow(); }); CONNECT(ui.toolbuttonRemove, clicked, [this] { removeRows(); }); CONNECT(ui.buttonApply, clicked, [this] { applySubstitutions(); }); CONNECT(ui.buttonClose, clicked, [this] { ui.windowSubstitutions->hide(); }); CONNECT(ui.treeview->get_selection(), changed, [this] { ui.toolbuttonRemove->set_sensitive(ui.treeview->get_selection()->count_selected_rows() != 0); }); ADD_SETTING(ListStoreSetting("replacelist", Glib::RefPtr::cast_static(ui.treeview->get_model()))); } SubstitutionsManager::~SubstitutionsManager() { ConfigSettings::get("replacelist")->serialize(); } void SubstitutionsManager::set_visible(bool visible) { ui.windowSubstitutions->set_visible(visible); if(visible) { ui.windowSubstitutions->raise(); } } void SubstitutionsManager::openList() { if(!clearList()) { return; } std::string dir = !m_currentFile.empty() ? Glib::path_get_dirname(m_currentFile) : ""; FileDialogs::FileFilter filter = { _("Substitutions List"), {"text/plain"}, {"*.txt"}}; std::vector> files = FileDialogs::open_dialog(_("Open Substitutions List"), dir, "auxdir", filter, false, ui.windowSubstitutions); if(!files.empty()) { std::ifstream file(files.front()->get_path()); if(!file.is_open()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error Reading File"), Glib::ustring::compose(_("Unable to read '%1'."), files.front()->get_path())); return; } m_currentFile = files.front()->get_path(); std::string line; bool errors = false; while(std::getline(file, line)) { Glib::ustring text = line.data(); if(text.empty()) { continue; } std::vector fields = Utils::string_split(text, '\t', true); if(fields.size() < 2) { errors = true; continue; } Gtk::TreeIter it = m_listStore->append(); (*it)[m_viewCols.search] = fields[0]; (*it)[m_viewCols.replace] = fields[1]; } if(errors) { Utils::messageBox(Gtk::MESSAGE_WARNING, _("Errors Occurred Reading File"), _("Some entries of the substitutions list could not be read.")); } } } bool SubstitutionsManager::saveList() { FileDialogs::FileFilter filter = { _("Substitutions List"), {"text/plain"}, {"*.txt"} }; std::string filename = FileDialogs::save_dialog(_("Save Substitutions List"), m_currentFile, "auxdir", filter, false, ui.windowSubstitutions); if(filename.empty()) { return false; } std::ofstream file(filename); if(!file.is_open()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error Saving File"), Glib::ustring::compose(_("Unable to write to '%1'."), filename)); return false; } m_currentFile = filename; Glib::ustring str; for(const Gtk::TreeModel::Row& row : m_listStore->children()) { Glib::ustring search, replace; row.get_value(0, search); row.get_value(1, replace); str += Glib::ustring::compose("%1\t%2\n", search, replace); } file.write(str.data(), str.bytes()); return true; } bool SubstitutionsManager::clearList() { if(m_listStore->children().size() > 0) { int response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Save List?"), _("Do you want to save the current list?"), "", Utils::Button::Save | Utils::Button::Discard | Utils::Button::Cancel, ui.windowSubstitutions); if(response == Utils::Button::Save) { if(!saveList()) { return false; } } else if(response != Utils::Button::Discard) { return false; } } m_listStore->clear(); return true; } void SubstitutionsManager::addRow() { Gtk::TreeIter it = m_listStore->append(); ui.treeview->set_cursor(m_listStore->get_path(it), *ui.treeview->get_column(0), true); } void SubstitutionsManager::removeRows() { if(ui.treeview->get_selection()->count_selected_rows() != 0) { std::vector rows; for(const Gtk::ListStore::TreeModel::Path& path : ui.treeview->get_selection()->get_selected_rows()) { rows.push_back(Gtk::ListStore::RowReference(m_listStore, path)); } for(const Gtk::ListStore::RowReference& row : rows) { m_listStore->erase(m_listStore->get_iter(row.get_path())); } } } void SubstitutionsManager::applySubstitutions() { std::map substitutions; for(const Gtk::TreeModel::Row& row : m_listStore->children()) { Glib::ustring search, replace; row.get_value(0, search); row.get_value(1, replace); substitutions.insert(std::make_pair(search, replace)); } m_signal_apply_substitutions.emit(substitutions); } gImageReader-3.4.0/gtk/src/SubstitutionsManager.hh000066400000000000000000000035361417507262200221360ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SubstitutionsManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SUBSTITUTIONS_MANAGER_HH #define SUBSTITUTIONS_MANAGER_HH #include "common.hh" #include "ui_SubstitutionsManager.hh" class OutputBuffer; class SubstitutionsManager { public: SubstitutionsManager(); ~SubstitutionsManager(); void set_visible(bool visible); sigc::signal&> signal_apply_substitutions() { return m_signal_apply_substitutions; } private: struct ReplaceListColumns : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn search; Gtk::TreeModelColumn replace; ReplaceListColumns() { add(search); add(replace); } }; sigc::signal&> m_signal_apply_substitutions; Ui::SubstitutionsManager ui; ClassData m_classdata; std::string m_currentFile; ReplaceListColumns m_viewCols; Glib::RefPtr m_listStore; void addRow(); void applySubstitutions(); bool clearList(); void openList(); void removeRows(); bool saveList(); }; #endif // SUBSTITUTIONS_MANAGER_HH gImageReader-3.4.0/gtk/src/TessdataManager.cc000066400000000000000000000336341417507262200207770ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * TessdataManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "MainWindow.hh" #include "RecognitionMenu.hh" #include "TessdataManager.hh" #include "Utils.hh" #include #include #ifdef G_OS_UNIX #include #endif #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE void TessdataManager::exec() { static TessdataManager instance; instance.run(); } TessdataManager::TessdataManager() { ui.setupUi(); ui.dialogTessdatamanager->set_transient_for(*MAIN->getWindow()); m_languageListStore = Gtk::ListStore::create(m_viewCols); ui.treeview->set_model(m_languageListStore); ui.treeview->append_column_editable("selected", m_viewCols.selected); ui.treeview->append_column("label", m_viewCols.label); } void TessdataManager::run() { #ifdef G_OS_UNIX if(MAIN->getConfig()->useSystemDataLocations()) { Glib::ustring service_owner; try { m_dbusProxy = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SESSION, "org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify"); service_owner = m_dbusProxy->get_name_owner(); } catch(...) { } if(service_owner.empty()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), _("A session connection to the PackageKit backend is required for managing system-wide tesseract language packs, but it was not found. This service is usually provided by a software-management application such as Gnome Software. Please install software which provides the necessary PackageKit interface, use other system package management software to manage the tesseract language packs directly, or switch to using the user tessdata path in the configuration dialog.")); return; } } #endif MAIN->pushState(MainWindow::State::Busy, _("Fetching available languages")); Glib::ustring messages; bool success = fetchLanguageList(messages); MAIN->popState(); if(!success) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), Glib::ustring::compose(_("Failed to fetch list of available languages: %1"), messages)); return; } while(true) { int response = ui.dialogTessdatamanager->run(); if(response == Gtk::RESPONSE_APPLY) { applyChanges(); } else if(response == 1) { refresh(); } else { break; } } ui.dialogTessdatamanager->hide(); } bool TessdataManager::fetchLanguageList(Glib::ustring& messages) { m_languageListStore->clear(); #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(4, 0, 0) std::string url("https://api.github.com/repos/tesseract-ocr/tessdata_fast/tags"); #else std::string url("https://api.github.com/repos/tesseract-ocr/tessdata/tags"); #endif Glib::RefPtr data = Utils::download(url, messages); if(!data) { return false; } JsonParser* parser = json_parser_new(); GError* parserError = nullptr; json_parser_load_from_data(parser, reinterpret_cast(data->get_data()), data->size(), &parserError); if(parserError) { messages = Glib::ustring::compose(_("Parsing error: %1"), parserError->message); g_object_unref(parser); return false; } Glib::ustring tessdataVer; int bestMatchDist = std::numeric_limits::max(); static const Glib::RefPtr verRegEx = Glib::Regex::create("^[vV]?(\\d+).(\\d+).(\\d+)-?(\\w?.*)$"); JsonNode* root = json_parser_get_root(parser); JsonArray* array = json_node_get_array(root); GList* elementArray = json_array_get_elements(array); for(GList* l = elementArray; l; l = l->next) { JsonNode* value = static_cast(l->data); JsonObject* tagObj = json_node_get_object(value); Glib::ustring tag = json_object_get_string_member(tagObj, "name"); Glib::MatchInfo matchInfo; if(verRegEx->match(tag, matchInfo)) { int tagVer = TESSERACT_MAKE_VERSION(std::atoi(matchInfo.fetch(1).c_str()), std::atoi(matchInfo.fetch(2).c_str()), std::atoi(matchInfo.fetch(3).c_str())); int dist = TESSERACT_VERSION - tagVer; if(dist >= 0 && dist < bestMatchDist) { bestMatchDist = dist; tessdataVer = tag; } } } g_list_free(elementArray); g_object_unref(parser); std::vector> extraFiles; std::vector dataUrls; #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(4, 0, 0) dataUrls.push_back(std::string("https://api.github.com/repos/tesseract-ocr/tessdata_fast/contents?ref=" + tessdataVer)); dataUrls.push_back(std::string("https://api.github.com/repos/tesseract-ocr/tessdata_fast/contents/script?ref=" + tessdataVer)); #else dataUrls.push_back(std::string("https://api.github.com/repos/tesseract-ocr/tessdata/contents?ref=" + tessdataVer)); #endif for(const std::string& url : dataUrls) { data = Utils::download(url, messages); if(!data) { continue; } parser = json_parser_new(); parserError = nullptr; json_parser_load_from_data(parser, reinterpret_cast(data->get_data()), data->size(), &parserError); if(parserError) { g_object_unref(parser); continue; } root = json_parser_get_root(parser); array = json_node_get_array(root); elementArray = json_array_get_elements(array); for(GList* l = elementArray; l; l = l->next) { JsonNode* value = static_cast(l->data); JsonObject* treeObj = json_node_get_object(value); Glib::ustring fileName = json_object_get_string_member(treeObj, "name"); if(!json_object_get_string_member(treeObj, "download_url")) { continue; } Glib::ustring url = json_object_get_string_member(treeObj, "download_url"); Glib::ustring subdir; // If filename starts with upper case letter, it is a script if(fileName.substr(0, 1).uppercase() == fileName.substr(0, 1)) { subdir = "script/"; } if(fileName.length() > 12 && fileName.compare(fileName.length() - 12, fileName.npos, "traineddata")) { Glib::ustring prefix = subdir + fileName.substr(0, fileName.find(".")); auto it = m_languageFiles.find(prefix); if(it == m_languageFiles.end()) { it = m_languageFiles.insert(std::make_pair(prefix, std::vector())).first; } it->second.push_back({subdir + fileName, url}); } else { // Delay decision to determine whether file is a supplementary language file extraFiles.push_back(std::make_pair(subdir + fileName, url)); } } g_list_free(elementArray); g_object_unref(parser); for(const std::pair& extraFile : extraFiles) { Glib::ustring lang = extraFile.first.substr(0, extraFile.first.find(".")); auto it = m_languageFiles.find(lang); if(it != m_languageFiles.end()) { it->second.push_back({extraFile.first, extraFile.second}); } } } if(m_languageFiles.empty()) { return false; } std::vector availableLanguages = MAIN->getConfig()->getAvailableLanguages(); typedef std::pair string_pair_t; std::vector languages; for(auto it : m_languageFiles) { Config::Lang lang; lang.prefix = it.first; if(MAIN->getConfig()->searchLangSpec(lang)) { languages.push_back(std::make_pair(lang.prefix, lang.name)); } else { languages.push_back(std::make_pair(lang.prefix, lang.prefix)); } } std::sort(languages.begin(), languages.end(), [](const string_pair_t& p1, const string_pair_t& p2) { bool p1Script = p1.first.substr(0, 6) == "script" || p1.first.substr(0, 1) == p1.first.substr(0, 1).uppercase(); bool p2Script = p2.first.substr(0, 6) == "script" || p2.first.substr(0, 1) == p2.first.substr(0, 1).uppercase(); if(p1Script != p2Script) { return !p1Script; } else { return p1.second.lowercase() < p2.second.lowercase(); } }); for(const string_pair_t& entry : languages) { Gtk::TreeIter it = m_languageListStore->append(); bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), entry.first) != availableLanguages.end(); (*it)[m_viewCols.selected] = installed; (*it)[m_viewCols.label] = entry.second; (*it)[m_viewCols.prefix] = entry.first; } return true; } void TessdataManager::applyChanges() { MAIN->pushState(MainWindow::State::Busy, _("Applying changes...")); ui.dialogTessdatamanager->set_sensitive(false); ui.dialogTessdatamanager->get_window()->set_cursor(Gdk::Cursor::create(Gdk::WATCH)); Glib::ustring errorMsg; std::vector availableLanguages = MAIN->getConfig()->getAvailableLanguages(); std::string tessDataPath = MAIN->getConfig()->tessdataLocation(); #ifdef G_OS_WIN32 bool isWindows = true; #else bool isWindows = false; #endif if(!isWindows && MAIN->getConfig()->useSystemDataLocations()) { // Place this in a ifdef since DBus stuff cannot be compiled on Windows #ifdef G_OS_UNIX std::vector installFiles; std::vector removeFiles; for(const Gtk::TreeModel::Row& row : m_languageListStore->children()) { Glib::ustring prefix = row.get_value(m_viewCols.prefix); bool selected = row.get_value(m_viewCols.selected); bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), prefix) != availableLanguages.end(); if(selected && !installed) { installFiles.push_back(Glib::build_filename(tessDataPath, prefix + ".traineddata")); } else if(!selected && installed) { removeFiles.push_back(Glib::build_filename(tessDataPath, prefix + ".traineddata")); } } std::uint32_t xid = gdk_x11_window_get_xid(ui.dialogTessdatamanager->get_window()->gobj()); if(!installFiles.empty()) { std::vector params = { Glib::Variant::create(xid), Glib::Variant>::create(installFiles), Glib::Variant::create("always") }; try { m_dbusProxy->call_sync("InstallProvideFiles", Glib::VariantContainerBase::create_tuple(params), 3600000); } catch(const Glib::Error& e) { errorMsg = e.what(); } } if(errorMsg.empty() && !removeFiles.empty()) { std::vector params = { Glib::Variant::create(xid), Glib::Variant>::create(removeFiles), Glib::Variant::create("always") }; try { m_dbusProxy->call_sync("RemovePackageByFiles", Glib::VariantContainerBase::create_tuple(params), 3600000); } catch(const Glib::Error& e) { errorMsg = e.what(); } } #endif } else { Glib::ustring errors; std::string scriptPath = Glib::build_filename(tessDataPath, "script"); Glib::RefPtr tessDataDir = Gio::File::create_for_path(scriptPath); bool dirExists = false; try { dirExists = tessDataDir->make_directory_with_parents(); } catch(...) { dirExists = tessDataDir->query_exists(); } if(!dirExists) { errors.append(Glib::ustring(_("Failed to create directory for tessdata files.")) + "\n"); } else { for(const Gtk::TreeModel::Row& row : m_languageListStore->children()) { Glib::ustring prefix = row.get_value(m_viewCols.prefix); bool selected = row.get_value(m_viewCols.selected); auto it = m_languageFiles.find(prefix); bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), prefix) != availableLanguages.end(); if(selected && !installed) { for(const LangFile& langFile : it->second) { MAIN->pushState(MainWindow::State::Busy, Glib::ustring::compose(_("Downloading %1..."), langFile.name)); Glib::ustring messages; Glib::RefPtr data = Utils::download(langFile.url, messages); std::ofstream file(Glib::build_filename(tessDataPath, langFile.name)); if(!data || !file.is_open()) { errors.append(langFile.name + "\n"); } else { file.write(reinterpret_cast(data->get_data()), data->size()); } MAIN->popState(); } } else if(!selected && installed) { auto it = m_languageFiles.find(prefix); if(it != m_languageFiles.end()) { for(const LangFile& langFile : it->second) { Glib::RefPtr file = Gio::File::create_for_path(Glib::build_filename(tessDataPath, langFile.name)); if(file->query_exists() && !file->remove()) { errors.append(langFile.name); } } } } } if(!errors.empty()) { errorMsg = Glib::ustring::compose(_("The following files could not be downloaded or removed:\n%1\n\nCheck the connectivity and directory permissions.\n\nHint: If you don't have write permissions in system folders, you can switch to user paths in the settings dialog."), errors); } } } ui.dialogTessdatamanager->get_window()->set_cursor(Glib::RefPtr()); ui.dialogTessdatamanager->set_sensitive(true); MAIN->popState(); refresh(); if(!errorMsg.empty()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Error"), errorMsg, "", Utils::Button::Ok, ui.dialogTessdatamanager); } } void TessdataManager::refresh() { MAIN->getRecognitionMenu()->rebuild(); std::vector availableLanguages = MAIN->getConfig()->getAvailableLanguages(); for(const Gtk::TreeModel::Row& row : m_languageListStore->children()) { Glib::ustring prefix = row.get_value(m_viewCols.prefix); bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), prefix) != availableLanguages.end(); row.set_value(m_viewCols.selected, installed); } } gImageReader-3.4.0/gtk/src/TessdataManager.hh000066400000000000000000000031711417507262200210020ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * TessdataManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef TESSDATAMANAGER_HH #define TESSDATAMANAGER_HH #include "ui_TessdataManager.hh" class TessdataManager { public: static void exec(); private: TessdataManager(); void run(); struct LangFile { Glib::ustring name; Glib::ustring url; }; struct ViewColumns : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn selected; Gtk::TreeModelColumn label; Gtk::TreeModelColumn prefix; ViewColumns() { add(selected); add(label); add(prefix); } } m_viewCols; Ui::TessdataManager ui; Glib::RefPtr m_languageListStore; std::map> m_languageFiles; Glib::RefPtr m_dbusProxy; bool fetchLanguageList(Glib::ustring& messages); void applyChanges(); void refresh(); }; #endif // TESSDATAMANAGER_HH gImageReader-3.4.0/gtk/src/Utils.cc000066400000000000000000000470421417507262200170320ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Utils.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Utils.hh" #include "Config.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include #include #include #ifdef G_OS_WIN32 #include #endif #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE void Utils::popup_positioner(int& x, int& y, bool& push_in, Gtk::Widget* ref, Gtk::Menu* menu, bool alignRight, bool alignBottom) { ref->get_window()->get_origin(x, y); x += ref->get_allocation().get_x(); if(alignRight) { x += ref->get_allocation().get_width(); x -= menu->get_width(); } y += ref->get_allocation().get_y(); if(alignBottom) { y += ref->get_allocation().get_height(); } push_in = true; } Utils::Button::Type Utils::messageBox(Gtk::MessageType type, const Glib::ustring& title, const Glib::ustring& text, const Glib::ustring& body, int buttons, Gtk::Window* parent, Gtk::Widget* bodyWidget) { if(!parent) { parent = MAIN->getWindow(); } Gtk::Dialog dialog; dialog.set_transient_for(*parent); dialog.set_title(title); dialog.get_content_area()->set_orientation(Gtk::ORIENTATION_VERTICAL); dialog.get_content_area()->set_spacing(6); dialog.get_content_area()->set_margin_left(6); dialog.get_content_area()->set_margin_right(6); dialog.get_content_area()->set_margin_top(6); dialog.get_content_area()->set_margin_bottom(6); Gtk::Grid grid; dialog.get_content_area()->pack_start(grid, true, true); Glib::ustring iconName; switch (type) { case Gtk::MESSAGE_INFO: iconName = "dialog-information-symbolic"; break; case Gtk::MESSAGE_WARNING: iconName = "dialog-warning-symbolic"; break; case Gtk::MESSAGE_QUESTION: iconName = "dialog-question-symbolic"; break; case Gtk::MESSAGE_ERROR: iconName = "dialog-error-symbolic"; break; case Gtk::MESSAGE_OTHER: break; } Gtk::Image icon(iconName, Gtk::ICON_SIZE_DIALOG); grid.attach(icon, 0, 0, 1, body.empty() ? 1 : 2); Gtk::Label label(text); label.set_xalign(0); grid.attach(label, 1, 0); grid.set_column_spacing(6); grid.set_row_spacing(6); Gtk::ScrolledWindow scrollArea; scrollArea.set_hexpand(true); scrollArea.set_vexpand(true); scrollArea.set_shadow_type(Gtk::SHADOW_IN); scrollArea.set_min_content_width(320); scrollArea.set_min_content_height(160); Gtk::TextView textView; if(!body.empty()) { textView.set_editable(false); textView.set_cursor_visible(false); Glib::RefPtr buffer = Gtk::TextBuffer::create(); buffer->set_text(body); textView.set_buffer(buffer); scrollArea.add(textView); grid.attach(scrollArea, 1, 1); } else if (bodyWidget) { scrollArea.add(*bodyWidget); grid.attach(scrollArea, 1, 1); } if((buttons & Button::Ok) != 0) { dialog.add_button(_("OK"), Button::Type::Ok); } if((buttons & Button::Yes) != 0) { dialog.add_button(_("Yes"), Button::Type::Yes); } if((buttons & Button::YesAll) != 0) { dialog.add_button(_("Yes to all"), Button::Type::YesAll); } if((buttons & Button::Save) != 0) { dialog.add_button(_("Save"), Button::Type::Save); } if((buttons & Button::No) != 0) { dialog.add_button(_("No"), Button::Type::No); } if((buttons & Button::NoAll) != 0) { dialog.add_button(_("No to all"), Button::Type::NoAll); } if((buttons & Button::Discard) != 0) { dialog.add_button(_("Discard"), Button::Type::Discard); } if((buttons & Button::DiscardAll) != 0) { dialog.add_button(_("Discard all"), Button::Type::DiscardAll); } if((buttons & Button::Text) != 0) { dialog.add_button(_("Text"), Button::Type::Text); } if((buttons & Button::HOCR) != 0) { dialog.add_button(_("hOCR"), Button::Type::HOCR); } if((buttons & Button::Cancel) != 0) { dialog.add_button(_("Cancel"), Button::Type::Cancel); } dialog.show_all(); return static_cast(dialog.run()); } void Utils::set_spin_blocked(Gtk::SpinButton* spin, double value, sigc::connection& conn) { conn.block(true); spin->set_value(value); conn.block(false); } static Glib::RefPtr createErrorStyleProvider() { Glib::RefPtr provider = Gtk::CssProvider::create(); provider->load_from_data(".error { background-color: #FF7777; color: #FFFFFF; }"); return provider; } static Glib::RefPtr getErrorStyleProvider() { static Glib::RefPtr provider = createErrorStyleProvider(); return provider; } void Utils::set_error_state(Gtk::Entry* entry) { entry->get_style_context()->add_provider(getErrorStyleProvider(), 10000); entry->get_style_context()->add_class("error"); } void Utils::clear_error_state(Gtk::Entry* entry) { entry->get_style_context()->remove_class("error"); entry->get_style_context()->remove_provider(getErrorStyleProvider()); } Glib::ustring Utils::get_content_type(const std::string& filename) { gboolean uncertain; gchar* type = g_content_type_guess(filename.c_str(), 0, 0, &uncertain); Glib::ustring contenttype(type); g_free(type); return contenttype; } std::pair Utils::split_filename(const std::string& filename) { std::string::size_type pos = filename.rfind('.'); if(pos == std::string::npos) { return std::make_pair(filename, std::string()); } std::pair parts = std::make_pair(filename.substr(0, pos), filename.substr(pos + 1)); if(parts.first.size() > 3 && parts.first.substr(pos - 4) == ".tar") { parts.first = parts.first.substr(0, pos - 4); parts.second = "tar." + parts.second; } return parts; } std::string Utils::make_absolute_path(const std::string& path, const std::string& basepath) { if(Glib::path_is_absolute(path)) { return path; } std::string abspath = Glib::build_filename(basepath, path); #ifdef G_OS_UNIX char* realabspath = realpath(abspath.c_str(), nullptr); abspath = std::string(realabspath); free(realabspath); #endif return abspath; } std::string Utils::make_relative_path(const std::string& path, const std::string& basepath) { if(!Glib::path_is_absolute(path)) { return path; } int pos = path.find(basepath); if(pos != 0) { return path; } return Glib::build_filename(".", path.substr(basepath.size())); } std::string Utils::get_documents_dir() { std::string dir = Glib::get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS); if(Glib::file_test(dir, Glib::FILE_TEST_IS_DIR)) { return dir; } return Glib::get_home_dir(); } std::string Utils::make_output_filename(const std::string& filename) { // Ensure directory exists std::string dirname = Glib::path_get_dirname(filename); std::string basename = Glib::path_get_basename(filename); if(!Glib::file_test(dirname, Glib::FILE_TEST_IS_DIR)) { dirname = get_documents_dir(); } std::string newfilename = Glib::build_filename(dirname, basename); // Generate non-existing file int i = 0; std::pair parts = split_filename(newfilename); parts.first = Glib::Regex::create(Glib::ustring::compose("_[0-9]+.%1$", parts.second))->replace(parts.first, 0, "", static_cast(0)); newfilename = Glib::ustring::compose("%1.%2", parts.first, parts.second); while(Glib::file_test(newfilename, Glib::FILE_TEST_EXISTS)) { newfilename = Glib::ustring::compose("%1_%2.%3", parts.first, ++i, parts.second); } return newfilename; } void Utils::list_dir(const std::string& path, const std::set& filters, std::vector>& output) { try { Glib::Dir dir(path); std::vector> files; for(const std::string& filename : dir) { std::string subpath = Glib::build_filename(path, filename); if(Glib::file_test(subpath, Glib::FILE_TEST_IS_DIR)) { list_dir(subpath, filters, output); } else { std::pair parts = Utils::split_filename(filename); if(filters.find(parts.second) != filters.end()) { output.push_back(Gio::File::create_for_path(subpath)); } } } } catch(const Glib::FileError& e) { } } std::vector Utils::string_split(const Glib::ustring& text, char delim, bool keepEmpty) { std::vector parts; Glib::ustring::size_type startPos = 0, endPos = 0; Glib::ustring::size_type npos = Glib::ustring::npos; if(text.empty()) { if(keepEmpty) { parts.push_back(""); } return parts; } while(true) { startPos = endPos; endPos = text.find(delim, startPos); Glib::ustring::size_type n = endPos == npos ? npos : endPos - startPos; if(n > 0 || keepEmpty) { parts.push_back(text.substr(startPos, n)); } if(endPos == npos) { break; } ++endPos; } return parts; } Glib::ustring Utils::string_join(const std::vector& strings, const Glib::ustring& joiner ) { Glib::ustring result; if(!strings.empty()) { result = strings.front(); for(std::size_t i = 1, n = strings.size(); i < n; ++i) { result += joiner + strings[i]; } } return result; } Glib::ustring Utils::string_trim(const Glib::ustring& str, const Glib::ustring& what) { Glib::ustring ret = str; ret.erase(0, ret.find_first_not_of(what)); std::size_t rpos = ret.find_last_not_of(what); if(rpos != Glib::ustring::npos) { ret.erase(rpos + 1); } return ret; } Glib::ustring Utils::string_rstrip(const Glib::ustring& str, const Glib::ustring& what) { Glib::ustring ret = str; std::size_t rpos = ret.find_last_not_of(what); if(rpos != Glib::ustring::npos) { ret.erase(rpos + 1); } return ret; } bool Utils::strings_equal(const Glib::ustring& str1, const Glib::ustring& str2, bool matchCase) { return matchCase ? (str1 == str2) : (str1.casefold() == str2.casefold()); } bool Utils::string_endswith(const Glib::ustring& str, const Glib::ustring& what) { int n = str.length(); int m = what.length(); return n >= m && str.substr(n - m) == what; } bool Utils::string_startswith(const Glib::ustring& str, const Glib::ustring& what) { int n = str.length(); int m = what.length(); return n >= m && str.substr(0, m) == what; } std::size_t Utils::string_firstIndex(const Glib::ustring& str, const Glib::ustring& search, int pos, bool matchCase) { std::size_t res = Glib::ustring::npos; if(matchCase) { res = str.find(search, pos); } else { res = str.lowercase().find(search.lowercase(), pos); } return res == Glib::ustring::npos ? -1 : res; } std::size_t Utils::string_lastIndex(const Glib::ustring& str, const Glib::ustring& search, int pos, bool matchCase) { std::size_t res = Glib::ustring::npos; if(matchCase) { res = str.rfind(search, pos); } else { res = str.lowercase().rfind(search.lowercase(), pos); } return res == Glib::ustring::npos ? -1 : res; } int Utils::string_replace(Glib::ustring& str, const Glib::ustring& search, const Glib::ustring& replace, bool matchCase) { int pos = 0; int count = 0; while(true) { pos = Utils::string_firstIndex(str, search, pos, matchCase); if(pos == -1) { break; } str = str.replace(pos, search.size(), replace); pos += replace.size(); ++count; } return count; } Glib::ustring Utils::string_html_escape(const Glib::ustring& str) { std::string result; result.reserve(str.bytes()); for(size_t pos = 0; pos != str.bytes(); ++pos) { switch(str[pos]) { case '&': result.append("&"); break; case '"': result.append("""); break; case '\'': result.append("'"); break; case '<': result.append("<"); break; case '>': result.append(">"); break; default: result.append(str.data() + pos, 1); break; } } return result; } std::vector> Utils::string_split_pos(const Glib::ustring& str, const Glib::RefPtr& splitRe) { Glib::ustring::size_type strpos = 0; Glib::MatchInfo info; std::vector> result; Glib::ustring matchstr = str; while(splitRe->match(matchstr, 0, info)) { // Fetch pos returns positions in bytes, no characters... Need to extract substring on raw string, and then deduce the new position by comparing the lengths int start = 0, end = 0; info.fetch_pos(0, start, end); result.push_back(std::make_pair(str.raw().substr(0, start), strpos)); Glib::ustring newmatchstr = matchstr.raw().substr(end); strpos += matchstr.length() - newmatchstr.length(); matchstr = newmatchstr; } if(strpos < str.length()) { result.push_back(std::make_pair(str.substr(strpos), strpos)); } return result; } int Utils::parseInt(const Glib::ustring& str, bool* ok) { static Glib::RefPtr nrRegEx = Glib::Regex::create("^\\d+$"); bool match = nrRegEx->match(str); if(ok) { *ok = match; } return match ? std::atoi(str.c_str()) : 0; } void Utils::handle_drag_drop(const Glib::RefPtr& context, int /*x*/, int /*y*/, const Gtk::SelectionData& selection_data, guint /*info*/, guint time) { if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8)) { std::vector> files; for(const Glib::ustring& uri : selection_data.get_uris()) { files.push_back(Gio::File::create_for_uri(uri)); } if(!files.empty()) { MAIN->getSourceManager()->addSources(files); } } context->drag_finish(false, false, time); } Glib::RefPtr Utils::download(const std::string& url, Glib::ustring& messages, unsigned timeout) { enum Status { Waiting, Ready, Failed, Eos } status = Waiting; Glib::RefPtr result = Glib::ByteArray::create(); Glib::RefPtr stream; Glib::RefPtr cancellable = Gio::Cancellable::create(); sigc::connection timeoutConnection; try { Glib::RefPtr file = Gio::File::create_for_uri(url); file->read_async([&](Glib::RefPtr& asyncResult) { try { stream = file->read_finish(asyncResult); status = stream ? Ready : Failed; } catch(Glib::Error& e) { messages = e.what(); status = Failed; } }, cancellable); timeoutConnection = Glib::signal_timeout().connect([&] { cancellable->cancel(); return false; }, timeout); while(status == Waiting) { Gtk::Main::iteration(); } timeoutConnection.disconnect(); if(status == Failed) { return Glib::RefPtr(); } while(true) { status = Waiting; stream->read_bytes_async(4096, [&](Glib::RefPtr& asyncResult) { try { Glib::RefPtr bytes = stream->read_bytes_finish(asyncResult); if(!bytes) { status = Eos; } gsize size; result->append(reinterpret_cast(bytes->get_data(size)), bytes->get_size()); status = size == 0 ? Eos : Ready; } catch(Glib::Error&) { status = Failed; } }, cancellable); timeoutConnection = Glib::signal_timeout().connect([&] { cancellable->cancel(); return false; }, timeout); while(status == Waiting) { Gtk::Main::iteration(); } timeoutConnection.disconnect(); if(status == Failed) { return Glib::RefPtr(); } else if(status == Eos) { break; } } } catch (const Glib::Error& e) { messages = e.what(); return Glib::RefPtr(); } return result; } Glib::ustring Utils::getSpellingLanguage(const Glib::ustring& lang, const Glib::ustring& defaultLanguage) { // If it is already a valid code, return it static Glib::RefPtr langPattern = Glib::Regex::create("^[a-z]{2}(_[A-Z]{2})?$"); if(langPattern->match(lang)) { return lang; } // Treat the language as a tesseract lang spec and try to find a matching code Config::Lang langspec = {lang, "", ""}; if(!lang.empty() && MAIN->getConfig()->searchLangSpec(langspec)) { // If default language starts with the returned code, return default language if(!defaultLanguage.empty() && Utils::string_startswith(defaultLanguage, langspec.code)) { return defaultLanguage; } // Return any one language culture code std::vector langCultures = MAIN->getConfig()->searchLangCultures(langspec.code); if(!langCultures.empty()) { return langCultures.front(); } // Return incomplete code (only country) return langspec.code; } // Return default language if specified if(!defaultLanguage.empty()) { return defaultLanguage; } // Use the application locale, if specified, otherwise fall back to en Glib::ustring syslocale = Glib::getenv("LANG"); if(syslocale == "c" || syslocale == "C" || syslocale.empty()) { return "en_US"; } return syslocale; } Glib::ustring Utils::resolveFontName(const Glib::ustring& family) { Glib::ustring resolvedName = family; FcPattern* pat = FcNameParse(reinterpret_cast(family.c_str())); FcConfigSubstitute (0, pat, FcMatchPattern); FcFontSet* fs = FcFontSetCreate(); FcResult result; FcPattern* match = FcFontMatch (0, pat, &result); if (match) { FcFontSetAdd (fs, match); } FcPatternDestroy (pat); FcObjectSet* os = 0; if(fs->nfont > 0) { FcPattern* font = FcPatternFilter (fs->fonts[0], os); FcChar8* s = FcPatternFormat (font, reinterpret_cast("%{family}")); resolvedName = Glib::ustring(reinterpret_cast(s)); FcStrFree (s); FcPatternDestroy (font); } FcFontSetDestroy (fs); if (os) { FcObjectSetDestroy (os); } return resolvedName; } void Utils::openUri(const std::string& uri) { #ifdef G_OS_WIN32 ShellExecute(nullptr, "open", uri.c_str(), nullptr, nullptr, SW_SHOWNORMAL); #else gtk_show_uri_on_window(MAIN->getWindow()->gobj(), uri.c_str(), GDK_CURRENT_TIME, 0); #endif } bool Utils::busyTask(const std::function& f, const Glib::ustring& msg) { enum class TaskState { Waiting, Succeeded, Failed }; TaskState taskState = TaskState::Waiting; Glib::Threads::Mutex mutex; MAIN->pushState(MainWindow::State::Busy, msg); Glib::Threads::Thread* thread = Glib::Threads::Thread::create([&] { bool success = f(); mutex.lock(); taskState = success ? TaskState::Succeeded : TaskState::Failed; mutex.unlock(); }); mutex.lock(); while(taskState == TaskState::Waiting) { mutex.unlock(); Gtk::Main::iteration(false); mutex.lock(); } mutex.unlock(); thread->join(); MAIN->popState(); return taskState == TaskState::Succeeded; } void Utils::runInMainThreadBlocking(const std::function& f) { Glib::Threads::Mutex mutex; Glib::Threads::Cond cond; bool finished = false; Glib::signal_idle().connect_once([&] { f(); mutex.lock(); finished = true; cond.signal(); mutex.unlock(); }); mutex.lock(); while(!finished) { cond.wait(mutex); } mutex.unlock(); } Utils::TesseractHandle::TesseractHandle(const char* language) { // unfortunately tesseract creates deliberate aborts when an error occurs std::signal(SIGABRT, MainWindow::tesseractCrash); std::string current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); m_tess = new tesseract::TessBaseAPI(); int ret = m_tess->Init(nullptr, language); setlocale(LC_ALL, current.c_str()); if(ret == -1) { delete m_tess; m_tess = nullptr; } } Utils::TesseractHandle::~TesseractHandle() { delete m_tess; std::signal(SIGABRT, MainWindow::signalHandler); } gImageReader-3.4.0/gtk/src/Utils.hh000066400000000000000000000143711417507262200170430ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Utils.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef UTILS_HH #define UTILS_HH #include #include #include #include #include #include #include #ifdef MAKE_VERSION #define TESSERACT_MAKE_VERSION(maj,min,patch) MAKE_VERSION((maj),(min),(patch)) #else #define TESSERACT_MAKE_VERSION(maj,min,patch) ((maj) << 16 | (min) << 8 | (patch)) #endif namespace tesseract { class TessBaseAPI; } namespace Utils { void popup_positioner(int& x, int& y, bool& push_in, Gtk::Widget* ref, Gtk::Menu* menu, bool alignRight, bool alignBottom); struct Button { enum Type { Ok = 1, Yes = 2, YesAll = 4, Save = 8, No = 16, NoAll = 32, Discard = 64, DiscardAll = 128, Text = 256, HOCR = 512, Cancel = 1024 }; }; Button::Type messageBox(Gtk::MessageType type, const Glib::ustring& title, const Glib::ustring& text, const Glib::ustring& body = "", int buttons = Button::Ok, Gtk::Window* parent = nullptr, Gtk::Widget* bodyWidget = nullptr); void set_spin_blocked(Gtk::SpinButton* spin, double value, sigc::connection& conn); void set_error_state(Gtk::Entry* entry); void clear_error_state(Gtk::Entry* entry); Glib::ustring get_content_type(const std::string& filename); std::pair split_filename(const std::string& filename); std::string make_absolute_path(const std::string& path, const std::string& basepath); std::string make_relative_path(const std::string& path, const std::string& basepath); std::string get_documents_dir(); std::string make_output_filename(const std::string& filename); void list_dir(const std::string& path, const std::set& filters, std::vector>& output); std::vector string_split(const Glib::ustring& text, char delim, bool keepEmpty = true); Glib::ustring string_join(const std::vector& strings, const Glib::ustring& joiner); Glib::ustring string_trim(const Glib::ustring& str, const Glib::ustring& what = " \t\n\r"); Glib::ustring string_rstrip(const Glib::ustring& str, const Glib::ustring& what = " \t\n\r"); bool strings_equal(const Glib::ustring& str1, const Glib::ustring& str2, bool matchCase); bool string_endswith(const Glib::ustring& str, const Glib::ustring& what); bool string_startswith(const Glib::ustring& str, const Glib::ustring& what); std::size_t string_firstIndex(const Glib::ustring& str, const Glib::ustring& search, int pos, bool matchCase); std::size_t string_lastIndex(const Glib::ustring& str, const Glib::ustring& search, int pos, bool matchCase); int string_replace(Glib::ustring& str, const Glib::ustring& search, const Glib::ustring& replace, bool matchCase); Glib::ustring string_html_escape(const Glib::ustring& str); std::vector> string_split_pos(const Glib::ustring& str, const Glib::RefPtr& splitRe); int parseInt(const Glib::ustring& str, bool* ok = nullptr); void handle_drag_drop(const Glib::RefPtr& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time); Glib::RefPtr download(const std::string& url, Glib::ustring& messages, unsigned timeout = 60000); Glib::ustring getSpellingLanguage(const Glib::ustring& lang = Glib::ustring(), const Glib::ustring& defaultLanguage = Glib::ustring()); Glib::ustring resolveFontName(const Glib::ustring& family); void openUri(const std::string& uri); template::value>::type> T round(T x) { return std::floor(x + T(0.5)); } template struct rev_iters { It _begin, _end; It begin() { return _begin; } It end() { return _end; } }; template std::vector vector_slice(const std::vector& vector, int start, int count = -1) { std::vector result; result.insert(result.end(), vector.begin() + start, count >= 0 ? vector.begin() + start + count : vector.end()); return result; } template> rev_iters reverse(T& t) { return { t.rbegin(), t.rend() }; } template> rev_iters reverse(const T& t) { return { t.crbegin(), t.crend() }; } template class C, typename K, typename V, typename... Args> V get_default(const C& m, K const& key, const V& defval) { typename C::const_iterator it = m.find( key ); return it == m.end() ? defval : it->second; } bool busyTask(const std::function& f, const Glib::ustring& msg); void runInMainThreadBlocking(const std::function& f); class TesseractHandle { public: TesseractHandle(const char* language = nullptr); ~TesseractHandle(); tesseract::TessBaseAPI* get() const { return m_tess; } private: tesseract::TessBaseAPI* m_tess; }; template> class AsyncQueue { std::queue m_queue; std::mutex m_mutex; std::condition_variable m_cond; public: bool empty() { std::unique_lock lock(m_mutex); return m_queue.empty(); } void enqueue(const T& item) { std::unique_lock lock(m_mutex); m_queue.push(item); lock.unlock(); m_cond.notify_one(); } T dequeue() { std::unique_lock lock(m_mutex); while ( m_queue.empty() ) { m_cond.wait(lock); } T result(m_queue.front()); m_queue.pop(); return result; } }; } #endif gImageReader-3.4.0/gtk/src/common.hh000066400000000000000000000037631417507262200172360ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * common.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef COMMON_HH #define COMMON_HH #include #include #include struct ClassDataItem { virtual ~ClassDataItem() = default; }; class ClassData { public: ~ClassData() { std::for_each(m_connections.begin(), m_connections.end(), [](sigc::connection conn) { conn.disconnect(); }); for(ClassDataItem* item : m_items) { delete item; } } template sigc::connection addConn(const T& conn) { m_connections.push_back(conn); return m_connections.back(); } void addItem(ClassDataItem* item) { m_items.push_back(item); } private: std::vector m_connections; std::vector m_items; }; class DataObject { public: virtual ~DataObject() = default; }; #define CONNECT(src, signal, ...) m_classdata.addConn((src)->signal_##signal().connect(__VA_ARGS__)) #define CONNECTP(src, property, ...) m_classdata.addConn((src)->property_##property().signal_changed().connect(__VA_ARGS__)) #define CONNECTX(src, signal, ...) (src)->signal_##signal().connect(__VA_ARGS__) #define APPLICATION_ID "org.gnome.gimagereader" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif extern std::string pkgExePath; extern std::string pkgDir; #endif gImageReader-3.4.0/gtk/src/hocr/000077500000000000000000000000001417507262200163475ustar00rootroot00000000000000gImageReader-3.4.0/gtk/src/hocr/DisplayerToolHOCR.cc000066400000000000000000000120641417507262200221270ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolHOCR.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "DisplayerToolHOCR.hh" #include "MainWindow.hh" #include "Recognizer.hh" #include "Utils.hh" DisplayerToolHOCR::DisplayerToolHOCR(Displayer* displayer) : DisplayerTool(displayer) { displayer->setDefaultCursor(Gdk::Cursor::create(Gdk::ARROW)); MAIN->getRecognizer()->setRecognizeMode(_("Recognize")); } DisplayerToolHOCR::~DisplayerToolHOCR() { clearSelection(); } std::vector> DisplayerToolHOCR::getOCRAreas() { std::vector> surfaces; surfaces.push_back(m_displayer->getImage(m_displayer->getSceneBoundingRect())); return surfaces; } bool DisplayerToolHOCR::mousePressEvent(GdkEventButton* event) { m_pressed = true; if(event->button == 1 && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { clearSelection(); m_selection = new DisplayerSelection(this, m_displayer->mapToSceneClamped(Geometry::Point(event->x, event->y))); CONNECT(m_selection, geometry_changed, sigc::mem_fun(this, &DisplayerToolHOCR::selectionChanged)); m_displayer->addItem(m_selection); return true; } return false; } bool DisplayerToolHOCR::mouseMoveEvent(GdkEventMotion* event) { if(m_selection && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { Geometry::Point p = m_displayer->mapToSceneClamped(Geometry::Point(event->x, event->y)); m_selection->setPoint(p); m_displayer->ensureVisible(event->x, event->y); return true; } return false; } bool DisplayerToolHOCR::mouseReleaseEvent(GdkEventButton* event) { // Don't do anything if the release event does not follow a press event... if(!m_pressed) { return false; } m_pressed = false; if(m_selection && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { if(m_selection->rect().width < 5. || m_selection->rect().height < 5.) { clearSelection(); } else { Geometry::Rectangle sceneRect = m_displayer->getSceneBoundingRect(); Geometry::Rectangle r = m_selection->rect().translate(-sceneRect.x, -sceneRect.y); m_signal_bbox_drawn.emit(Geometry::Rectangle(int(r.x), int(r.y), int(r.width), int(r.height)), m_currentAction); } } else { Geometry::Point p = m_displayer->mapToSceneClamped(Geometry::Point(event->x, event->y)); m_signal_position_picked.emit(p); } setAction(ACTION_NONE, false); return true; } void DisplayerToolHOCR::setAction(Action action, bool clearSel) { if(action != m_currentAction) { m_signal_action_changed.emit(action); } if(clearSel) { clearSelection(); } m_currentAction = action; if(m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { m_displayer->setDefaultCursor(Gdk::Cursor::create(Gdk::TCROSS)); } else { m_displayer->setDefaultCursor(Gdk::Cursor::create(Gdk::ARROW)); } } void DisplayerToolHOCR::setSelection(const Geometry::Rectangle& rect, const Geometry::Rectangle& minRect) { setAction(ACTION_NONE, false); Geometry::Rectangle sceneRect = m_displayer->getSceneBoundingRect(); Geometry::Rectangle r = rect.translate(sceneRect.x, sceneRect.y); Geometry::Rectangle mr = minRect.translate(sceneRect.x, sceneRect.y); if(!m_selection) { m_selection = new DisplayerSelection(this, Geometry::Point(r.x, r.y)); CONNECT(m_selection, geometry_changed, sigc::mem_fun(this, &DisplayerToolHOCR::selectionChanged)); m_displayer->addItem(m_selection); } m_selection->setAnchorAndPoint(Geometry::Point(r.x, r.y), Geometry::Point(r.x + r.width, r.y + r.height)); m_selection->setMinimumRect(mr); m_displayer->ensureVisible(m_selection->rect()); } Cairo::RefPtr DisplayerToolHOCR::getSelection(const Geometry::Rectangle& rect) const { Geometry::Rectangle sceneRect = m_displayer->getSceneBoundingRect(); return m_displayer->getImage(rect.translate(sceneRect.x, sceneRect.y)); } void DisplayerToolHOCR::clearSelection() { if(m_selection) { m_displayer->removeItem(m_selection); delete m_selection; m_selection = nullptr; } } void DisplayerToolHOCR::selectionChanged(const Geometry::Rectangle& rect) { Geometry::Rectangle sceneRect = m_displayer->getSceneBoundingRect(); Geometry::Rectangle r = rect.translate(-sceneRect.x, -sceneRect.y); m_signal_bbox_changed.emit(Geometry::Rectangle(int(r.x), int(r.y), int(r.width), int(r.height))); } gImageReader-3.4.0/gtk/src/hocr/DisplayerToolHOCR.hh000066400000000000000000000057351417507262200221500ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolHOCR.hh * Copyright (C) 2016-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYERTOOLHOCR_HH #define DISPLAYERTOOLHOCR_HH #include "Displayer.hh" namespace Geometry { class Rectangle; } class DisplayerToolHOCR : public DisplayerTool { public: enum Action {ACTION_NONE, ACTION_DRAW_GRAPHIC_RECT, ACTION_DRAW_CAREA_RECT, ACTION_DRAW_PAR_RECT, ACTION_DRAW_LINE_RECT, ACTION_DRAW_WORD_RECT}; DisplayerToolHOCR(Displayer* displayer); ~DisplayerToolHOCR(); std::vector> getOCRAreas() override; void pageChanged() override { m_signal_displayed_source_changed.emit(); reset(); } void resolutionChanged(double /*factor*/) override { reset(); } void rotationChanged(double /*delta*/) override { reset(); } void reset() override { setAction(ACTION_NONE, true); } bool mousePressEvent(GdkEventButton* event) override; bool mouseMoveEvent(GdkEventMotion* event) override; bool mouseReleaseEvent(GdkEventButton* event) override; void setAction(Action action, bool clearSel = true); void setSelection(const Geometry::Rectangle& rect, const Geometry::Rectangle& minRect); Cairo::RefPtr getSelection(const Geometry::Rectangle& rect) const; void clearSelection(); sigc::signal signal_displayed_source_changed() { return m_signal_displayed_source_changed; } sigc::signal signal_bbox_drawn() { return m_signal_bbox_drawn; } sigc::signal signal_bbox_changed() { return m_signal_bbox_changed; } sigc::signal signal_position_picked() { return m_signal_position_picked; } sigc::signal signal_action_changed() { return m_signal_action_changed; } private: ClassData m_classdata; DisplayerSelection* m_selection = nullptr; Action m_currentAction = ACTION_NONE; bool m_pressed = false; sigc::signal m_signal_displayed_source_changed; sigc::signal m_signal_bbox_drawn; sigc::signal m_signal_bbox_changed; sigc::signal m_signal_position_picked; sigc::signal m_signal_action_changed; void selectionChanged(const Geometry::Rectangle& rect); }; #endif // DISPLAYERTOOLHOCR_HH gImageReader-3.4.0/gtk/src/hocr/HOCRBatchExportDialog.cc000066400000000000000000000213051417507262200226760ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRBatchExportDialog.cc * Copyright (C) 2020-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "HOCRBatchExportDialog.hh" #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "HOCRDocument.hh" #include "HOCRPdfExporter.hh" #include "HOCRPdfExportWidget.hh" #include "HOCROdtExporter.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include "OutputEditorHOCR.hh" #include "Utils.hh" HOCRBatchExportDialog::HOCRBatchExportDialog(Gtk::Window* parent) { if (!parent) { parent = MAIN->getWindow(); } ui.setupUi(); ui.BatchExportDialog->set_transient_for(*parent); Glib::RefPtr formatComboModel = Gtk::ListStore::create(m_formatComboCols); ui.comboBoxFormat->set_model(formatComboModel); Gtk::TreeModel::Row row = *(formatComboModel->append()); row[m_formatComboCols.format] = ExportPdf; row[m_formatComboCols.label] = _("PDF"); row = *(formatComboModel->append()); row[m_formatComboCols.format] = ExportOdt; row[m_formatComboCols.label] = _("ODT"); row = *(formatComboModel->append()); row[m_formatComboCols.format] = ExportTxt; row[m_formatComboCols.label] = _("Plain text"); ui.comboBoxFormat->pack_start(m_formatComboCols.label); ui.comboBoxFormat->set_active(-1); m_sourceTreeModel = Glib::RefPtr(new FileTreeModel()); m_outputTreeModel = Glib::RefPtr(new FileTreeModel()); ui.treeViewInput->set_model(m_sourceTreeModel); setupFileTreeView(ui.treeViewInput); ui.treeViewOutput->set_model(m_outputTreeModel); setupFileTreeView(ui.treeViewOutput); ui.progressBar->hide(); ui.tabWidget->get_nth_page(1)->set_visible(false); MAIN->setOutputMode(MainWindow::OutputModeHOCR); CONNECT(ui.buttonSourceFolder, clicked, [this] { setSourceFolder(); }); CONNECT(ui.comboBoxFormat, changed, [this] { setExportFormat(); }); CONNECT(ui.spinBoxExportLevel, value_changed, [this] { updateOutputTree(); }); ADD_SETTING(ComboSetting("batchexportformat", ui.comboBoxFormat)); } HOCRBatchExportDialog::~HOCRBatchExportDialog() { delete m_pdfExportWidget; } void HOCRBatchExportDialog::run() { while(ui.BatchExportDialog->run() == Gtk::RESPONSE_APPLY) { apply(); } } void HOCRBatchExportDialog::setupFileTreeView(Gtk::TreeView* treeView) { treeView->set_tooltip_column(FileTreeModel::COLUMN_TOOLTIP); // First column: [icon][text] Gtk::TreeViewColumn* itemViewCol1 = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererPixbuf& iconRenderer = *Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererText& textRenderer = *Gtk::manage(new Gtk::CellRendererText); textRenderer.property_ellipsize() = Pango::ELLIPSIZE_END; itemViewCol1->pack_start(iconRenderer, false); itemViewCol1->pack_start(textRenderer, true); itemViewCol1->add_attribute(iconRenderer, "pixbuf", FileTreeModel::COLUMN_ICON); itemViewCol1->add_attribute(textRenderer, "text", FileTreeModel::COLUMN_TEXT); itemViewCol1->add_attribute(textRenderer, "style", FileTreeModel::COLUMN_TEXTSTYLE); treeView->append_column(*itemViewCol1); treeView->set_expander_column(*itemViewCol1); itemViewCol1->set_expand(true); itemViewCol1->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); } void HOCRBatchExportDialog::setSourceFolder() { std::string initialFolder = Utils::get_documents_dir(); std::string dir = FileDialogs::open_folder_dialog(_("Select folder..."), initialFolder, "outputdir"); if(dir.empty()) { return; } ui.lineEditSourceFolder->set_text(dir); m_sourceTreeModel->clear(); std::vector htmlFiles; scanSourceDir(dir, htmlFiles); for(const std::string& filename : htmlFiles) { m_sourceTreeModel->insertFile(filename, nullptr); } ui.treeViewInput->expand_all(); updateOutputTree(); } void HOCRBatchExportDialog::scanSourceDir(const std::string& dir, std::vector& files) { Glib::RefPtr it = Gio::File::create_for_path(dir)->enumerate_children(); while(Glib::RefPtr file = it->next_file()) { if(file->get_file_type() == Gio::FILE_TYPE_DIRECTORY) { scanSourceDir(Glib::build_filename(dir, file->get_name()), files); } else if(Utils::string_endswith(file->get_name(), ".html")) { files.push_back(Glib::build_filename(dir, file->get_name())); } } } void HOCRBatchExportDialog::setExportFormat() { updateOutputTree(); ExportMode mode = (*ui.comboBoxFormat->get_active())[m_formatComboCols.format]; if(mode == ExportPdf) { if(!m_pdfExportWidget) { OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); m_pdfExportWidget = new HOCRPdfExportWidget(editor->getTool()); ui.boxExportOptions->pack_start(*m_pdfExportWidget->getWidget(), true, true); } ui.tabWidget->get_nth_page(1)->show_all(); } else { if (m_pdfExportWidget) { ui.boxExportOptions->remove(*m_pdfExportWidget->getWidget()); delete m_pdfExportWidget; m_pdfExportWidget = nullptr; } ui.tabWidget->get_nth_page(1)->set_visible(false); } } void HOCRBatchExportDialog::updateOutputTree() { m_connectionPreviewTimeout.disconnect(); m_outputTreeModel->clear(); m_outputMap.clear(); int exportLevel = ui.spinBoxExportLevel->get_value_as_int(); std::string dir = ui.lineEditSourceFolder->get_text(); if(dir.empty()) { return; } std::string exportSuffix; ExportMode mode = (*ui.comboBoxFormat->get_active())[m_formatComboCols.format]; switch(mode) { case ExportPdf: exportSuffix = ".pdf"; break; case ExportOdt: exportSuffix = ".pdf"; break; case ExportTxt: exportSuffix = ".txt"; break; } std::vector htmlFiles; scanSourceDir(dir, htmlFiles); int deepestlevel = 0; int toplevel = std::count(dir.begin(), dir.end(), '/'); for(const std::string& filename : htmlFiles) { deepestlevel = std::max(int(std::count(filename.begin(), filename.end(), '/')) - toplevel, deepestlevel); } int groupAboveDepth = std::max(0, deepestlevel - exportLevel); for(const std::string& filename : htmlFiles) { int level = std::count(filename.begin(), filename.end(), '/') - toplevel; std::string output = filename.substr(0, filename.rfind(".")) + exportSuffix; for (int i = level; i >= groupAboveDepth; --i) { output = Glib::path_get_dirname(output) + exportSuffix; } auto it = m_outputMap.find(output); if (it == m_outputMap.end()) { it = m_outputMap.insert(std::make_pair(output, std::vector>())).first; } it->second.push_back(Gio::File::create_for_path(filename)); } for(auto it = m_outputMap.begin(), itEnd = m_outputMap.end(); it != itEnd; ++it) { m_outputTreeModel->insertFile(it->first, nullptr); } ui.treeViewOutput->expand_all(); if(m_pdfExportWidget) { m_connectionPreviewTimeout = Glib::signal_timeout().connect([this] { return updateExportPreview(); }, 250); } } void HOCRBatchExportDialog::apply() { m_connectionPreviewTimeout.disconnect(); ui.progressBar->show(); HOCRExporter* exporter = nullptr; HOCRPdfExporter::PDFSettings settings; ExportMode mode = (*ui.comboBoxFormat->get_active())[m_formatComboCols.format]; switch(mode) { case ExportPdf: exporter = new HOCRPdfExporter(); settings = m_pdfExportWidget->getPdfSettings(); break; case ExportOdt: exporter = new HOCROdtExporter(); break; case ExportTxt: exporter = new HOCRTextExporter(); break; } OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); int count = 0; for(auto it = m_outputMap.begin(), itEnd = m_outputMap.end(); it != itEnd; ++it) { editor->open(OutputEditorHOCR::InsertMode::Replace, it->second); exporter->run(editor->getDocument(), it->first, &settings); ui.progressBar->set_fraction(double(++count) / m_outputMap.size()); } delete exporter; ui.progressBar->hide(); } bool HOCRBatchExportDialog::updateExportPreview() { OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); editor->open(OutputEditorHOCR::InsertMode::Replace, m_outputMap.begin()->second); HOCRDocument* document = editor->getDocument(); editor->selectPage(0); m_pdfExportWidget->setPreviewPage(document->pageCount() > 0 ? document : nullptr, document->pageCount() > 0 ? document->page(0) : nullptr); return false; } gImageReader-3.4.0/gtk/src/hocr/HOCRBatchExportDialog.hh000066400000000000000000000040071417507262200227100ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRBatchExportDialog.hh * Copyright (C) 2020-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRBATCHEXPORTDIALOG_HH #define HOCRBATCHEXPORTDIALOG_HH #include "common.hh" #include "FileTreeModel.hh" #include "ui_HOCRBatchExportDialog.hh" class HOCRPdfExportWidget; class HOCRBatchExportDialog { public: HOCRBatchExportDialog(Gtk::Window* parent = nullptr); ~HOCRBatchExportDialog(); void run(); private: enum ExportMode { ExportPdf, ExportOdt, ExportTxt }; Ui::HOCRBatchExportDialog ui; ClassData m_classdata; Glib::RefPtr m_sourceTreeModel; Glib::RefPtr m_outputTreeModel; std::map>> m_outputMap; HOCRPdfExportWidget* m_pdfExportWidget = nullptr; sigc::connection m_connectionPreviewTimeout; struct FormatComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn format; Gtk::TreeModelColumn label; FormatComboColums() { add(format); add(label); } } m_formatComboCols; void setupFileTreeView(Gtk::TreeView* treeView); void apply(); void setSourceFolder(); void scanSourceDir(const std::string& dir, std::vector& files); void setExportFormat(); bool updateExportPreview(); void updateOutputTree(); }; #endif // HOCRBATCHEXPORTDIALOG_HH gImageReader-3.4.0/gtk/src/hocr/HOCRDocument.cc000066400000000000000000001256141417507262200211210ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRDocument.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "common.hh" #include "HOCRDocument.hh" #include "HOCRSpellChecker.hh" #include "XmlUtils.hh" #include "Utils.hh" #include #include #include #define DEBUG(...) //__VA_ARGS__ HOCRDocument::HOCRDocument() : Glib::ObjectBase("HOCRDocument") { m_spell = new HOCRSpellChecker(); } HOCRDocument::~HOCRDocument() { for(HOCRPage* page : m_pages) { delete page; } delete m_spell; } void HOCRDocument::resetMisspelled(const Gtk::TreeIter& index) { if(!index->children().empty()) { for(const Gtk::TreeIter& child : index->children()) { resetMisspelled(child); } } else { mutableItemAtIndex(index)->setMisspelled(-1); row_changed(get_path(index), index); } } void HOCRDocument::addSpellingActions(Gtk::Menu* menu, const Gtk::TreeIter& index) { std::vector suggestions; Glib::ustring trimmedWord; bool valid = getItemSpellingSuggestions(index, trimmedWord, suggestions, 16); for(const Glib::ustring& suggestion : suggestions) { Glib::ustring replacement = suggestion; Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(suggestion)); CONNECT(item, activate, [this, replacement, index] { editItemText(index, replacement); }); menu->append(*item); } if(!trimmedWord.empty()) { if(suggestions.empty()) { Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(_("No suggestions"))); item->set_sensitive(false); menu->append(*item); } if(!valid) { menu->append(*Gtk::manage(new Gtk::SeparatorMenuItem)); Gtk::MenuItem* additem = Gtk::manage(new Gtk::MenuItem(_("Add to dictionary"))); CONNECT(additem, activate, [this, index, trimmedWord] { m_spell->add_to_dictionary(trimmedWord); resetMisspelled(index); }); menu->append(*additem); Gtk::MenuItem* ignoreitem = Gtk::manage(new Gtk::MenuItem(_("Ignore word"))); CONNECT(ignoreitem, activate, [this, index, trimmedWord] { m_spell->ignore_word(trimmedWord); resetMisspelled(index); }); menu->append(*ignoreitem); } } } void HOCRDocument::addWordToDictionary(const Gtk::TreeIter& index) { const HOCRItem* item = itemAtIndex(index); if(item && item->isMisspelled()) { Glib::ustring trimmedWord = HOCRItem::trimmedWord(item->text()); m_spell->add_to_dictionary(trimmedWord); resetMisspelled(index); } } Glib::ustring HOCRDocument::toHTML() { Glib::ustring html = "\n"; for(const HOCRPage* page : m_pages) { html += page->toHtml(1); } html += "\n"; return html; } Gtk::TreeIter HOCRDocument::insertPage(int beforeIdx, const xmlpp::Element* pageElement, bool cleanGraphics, const std::string& sourceBasePath) { m_pages.insert(m_pages.begin() + beforeIdx, new HOCRPage(pageElement, ++m_pageIdCounter, m_defaultLanguage, cleanGraphics, beforeIdx)); if(!sourceBasePath.empty()) { m_pages[beforeIdx]->convertSourcePath(sourceBasePath, true); } for(std::size_t i = beforeIdx + 1; i < m_pages.size(); ++i) { m_pages[i]->m_index = i; } Gtk::TreeIter iter = get_iter(get_root_path(beforeIdx)); recursiveRowInserted(iter); for(int i = 0, n = m_pages.size(); i < n; ++i) { Gtk::TreePath path = get_root_path(i); row_changed(path, get_iter(path)); } return iter; } Gtk::TreeIter HOCRDocument::indexAtItem(const HOCRItem* item) const { Gtk::TreePath path; const HOCRItem* cur = item; while(cur) { path.push_front(cur->index()); cur = cur->parent(); } return get_iter(path); } bool HOCRDocument::editItemAttribute(const Gtk::TreeIter& index, const Glib::ustring& name, const Glib::ustring& value, const Glib::ustring& attrItemClass) { HOCRItem* item = mutableItemAtIndex(index); if(!item) { return false; } item->setAttribute(name, value, attrItemClass); row_changed(get_path(index), index); if(name == "lang") { resetMisspelled(index); } m_signal_item_attribute_changed.emit(index, name, value); if(name == "title:bbox") { recomputeBBoxes(item->parent()); } return true; } bool HOCRDocument::editItemText(const Gtk::TreeIter& index, const Glib::ustring& text) { HOCRItem* item = mutableItemAtIndex(index); if(!item) { return false; } item->setText(text); row_changed(get_path(index), index); return true; } Gtk::TreeIter HOCRDocument::moveItem(const Gtk::TreeIter& itemIndex, const Gtk::TreeIter& newParent, int newRow) { HOCRItem* item = mutableItemAtIndex(itemIndex); HOCRItem* parentItem = mutableItemAtIndex(newParent); if(!item || (!parentItem && item->itemClass() != "ocr_page")) { return Gtk::TreeIter(); } Gtk::TreeIter ancestor = newParent; while(ancestor) { if(ancestor == itemIndex) { return Gtk::TreeIter(); } ancestor = ancestor->parent(); } int oldRow = item->index(); Gtk::TreeIter oldParent = itemIndex->parent(); if(oldParent == newParent && oldRow < newRow) { --newRow; } Gtk::TreePath itemPath = get_path(itemIndex); takeItem(item); row_deleted(itemPath); recomputeBBoxes(mutableItemAtIndex(oldParent)); insertItem(parentItem, item, newRow); Gtk::TreeIter newIndex = newParent->children()[newRow]; recursiveRowInserted(newIndex); recomputeBBoxes(parentItem); return newIndex; } Gtk::TreeIter HOCRDocument::swapItems(const Gtk::TreeIter& parent, int firstRow, int secondRow) { moveItem(parent->children()[firstRow], parent, secondRow); moveItem(parent->children()[secondRow], parent, firstRow); return parent->children()[firstRow]; } Gtk::TreeIter HOCRDocument::mergeItems(const Gtk::TreeIter& parent, int startRow, int endRow) { if(endRow - startRow <= 0) { return Gtk::TreeIter(); } Gtk::TreeIter targetIndex = parent->children()[startRow]; HOCRItem* targetItem = mutableItemAtIndex(targetIndex); if(!targetItem || targetItem->itemClass() == "ocr_page") { return Gtk::TreeIter(); } Geometry::Rectangle bbox = targetItem->bbox(); if(targetItem->itemClass() == "ocrx_word") { // Merge word items: join text, merge bounding boxes Glib::ustring text = targetItem->text(); for(int row = ++startRow; row <= endRow; ++row) { Gtk::TreeIter childIndex = parent->children()[startRow]; HOCRItem* item = mutableItemAtIndex(childIndex); g_assert(item); text += item->text(); bbox = bbox.unite(item->bbox()); Gtk::TreePath childPath = get_path(childIndex); deleteItem(item); row_deleted(childPath); } targetItem->setText(text); for(const Gtk::TreeIter& changedIndex : recheckItemSpelling(targetIndex)) { row_changed(get_path(changedIndex), changedIndex); } } else { // Merge other items: merge dom trees and bounding boxes std::vector moveChilds; for(int row = ++startRow; row <= endRow; ++row) { Gtk::TreeIter childIndex = parent->children()[startRow]; HOCRItem* item = mutableItemAtIndex(childIndex); g_assert(item); std::vector childItems = item->takeChildren(); moveChilds.insert(moveChilds.end(), childItems.begin(), childItems.end()); bbox = bbox.unite(item->bbox()); Gtk::TreePath childPath = get_path(childIndex); deleteItem(item); row_deleted(childPath); } for(HOCRItem* child : moveChilds) { targetItem->addChild(child); Gtk::TreeIter newIndex = targetIndex->children()[child->index()]; row_inserted(get_path(newIndex), newIndex); } } Glib::ustring bboxstr = Glib::ustring::compose("%1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height); targetItem->setAttribute("title:bbox", bboxstr); m_signal_item_attribute_changed.emit(targetIndex, "title:bbox", bboxstr); return targetIndex; } Gtk::TreeIter HOCRDocument::splitItem(const Gtk::TreeIter& index, int startRow, int endRow) { if(endRow - startRow < 0) { return Gtk::TreeIter(); } HOCRItem* item = mutableItemAtIndex(index); if(!item) { return Gtk::TreeIter(); } Glib::ustring itemClass = item->itemClass(); xmlpp::Document doc; xmlpp::Element* newElement; if(itemClass == "ocr_carea") { newElement = doc.create_root_node("div"); } else if(itemClass == "ocr_par") { newElement = doc.create_root_node("p"); } else if(itemClass == "ocr_line") { newElement = doc.create_root_node("span"); } else { return Gtk::TreeIter(); } newElement->set_attribute("class", itemClass); newElement->set_attribute("title", HOCRItem::serializeAttrGroup(item->getTitleAttributes())); HOCRItem* newItem = new HOCRItem(newElement, item->page(), item->parent()); insertItem(item->parent(), newItem, item->index() + 1); Gtk::TreeIter newIndex = index->parent()->children()[item->index() + 1]; recursiveRowInserted(newIndex); for(int row = 0; row <= (endRow - startRow); ++row) { Gtk::TreeIter childIndex = index->children()[startRow]; HOCRItem* child = mutableItemAtIndex(childIndex); g_assert(child); moveItem(childIndex, newIndex, row); } return newIndex; } Gtk::TreeIter HOCRDocument::splitItemText(const Gtk::TreeIter& itemIndex, int pos, const Glib::RefPtr& pangoContext) { HOCRItem* item = mutableItemAtIndex(itemIndex); if(!item || item->itemClass() != "ocrx_word") { return Gtk::TreeIter(); } // Don't split if it would create empty words if(pos == 0 || pos == int(item->text().length())) { return itemIndex; } // Compute new bounding box using font metrics with default font Glib::RefPtr layout = Pango::Layout::create(pangoContext); layout->set_text(item->text().substr(0, pos)); int substrWidth = layout->get_width() * Pango::SCALE; layout->set_text(item->text()); int fullWidth = layout->get_width() * Pango::SCALE; double fraction = substrWidth / double(fullWidth); Geometry::Rectangle bbox = item->bbox(); Geometry::Rectangle leftBBox = bbox; leftBBox.width = bbox.width * fraction; Geometry::Rectangle rightBBox = bbox; rightBBox.setLeft(bbox.x + bbox.width * fraction); xmlpp::Document doc; xmlpp::Element* newElement = doc.create_root_node("span"); newElement->add_child_text(item->text().substr(pos)); newElement->set_attribute("class", "ocrx_word"); std::map attrs = item->getTitleAttributes(); attrs["bbox"] = Glib::ustring::compose("%1 %2 %3 %4", rightBBox.left(), rightBBox.top(), rightBBox.right(), rightBBox.bottom()); newElement->set_attribute("title", HOCRItem::serializeAttrGroup(attrs)); newElement->set_attribute("lang", item->lang()); HOCRItem* newItem = new HOCRItem(newElement, item->page(), item->parent(), item->index() + 1); Gtk::TreePath insertPath = get_path(itemIndex); insertPath.back() += 1; insertItem(item->parent(), newItem, item->index() + 1); row_inserted(insertPath, get_iter(insertPath)); item->setText(item->text().substr(0, pos)); editItemAttribute(itemIndex, "title:bbox", Glib::ustring::compose("%1 %2 %3 %4", leftBBox.left(), leftBBox.top(), leftBBox.right(), leftBBox.bottom())); row_changed(get_path(itemIndex), itemIndex); return get_iter(insertPath); } Gtk::TreeIter HOCRDocument::mergeItemText(const Gtk::TreeIter& itemIndex, bool mergeNext) { HOCRItem* item = mutableItemAtIndex(itemIndex); if(!item || item->itemClass() != "ocrx_word") { return Gtk::TreeIter(); } if((!mergeNext && item->index() == 0) || (mergeNext && item->index() == int(item->parent()->children().size()) - 1)) { return Gtk::TreeIter(); } int offset = mergeNext ? 1 : -1; HOCRItem* otherItem = item->parent()->children()[item->index() + offset]; Glib::ustring newText = mergeNext ? item->text() + otherItem->text() : otherItem->text() + item->text(); Geometry::Rectangle newBbox = item->bbox().unite(otherItem->bbox()); item->setText(newText); row_changed(get_path(itemIndex), itemIndex); editItemAttribute(itemIndex, "title:bbox", Glib::ustring::compose("%1 %2 %3 %4", newBbox.left(), newBbox.top(), newBbox.right(), newBbox.bottom())); Gtk::TreePath deletePath = get_path(itemIndex); deletePath.back() += offset; deleteItem(otherItem); row_deleted(deletePath); return itemIndex; } Gtk::TreeIter HOCRDocument::addItem(const Gtk::TreeIter& parent, const xmlpp::Element* element) { HOCRItem* parentItem = mutableItemAtIndex(parent); if(!parentItem) { return Gtk::TreeIter(); } HOCRItem* item = new HOCRItem(element, parentItem->page(), parentItem); parentItem->addChild(item); recomputeBBoxes(parentItem); Gtk::TreeIter child = parent->children()[item->index()]; recursiveRowInserted(child); return child; } bool HOCRDocument::removeItem(const Gtk::TreeIter& index) { HOCRItem* item = mutableItemAtIndex(index); if(!item) { return false; } Gtk::TreePath path = get_path(index); HOCRItem* parentItem = item->parent(); deleteItem(item); row_deleted(path); recomputeBBoxes(parentItem); return true; } Gtk::TreeIter HOCRDocument::nextIndex(const Gtk::TreeIter& current) const { Gtk::TreeIter iter = current; // If the current index is invalid return first index if(!iter) { return get_iter(get_root_path(0)); } // If item has children, return next child if(!iter->children().empty()) { return iter->children()[0]; } // Return next possible sibling Gtk::TreeIter next = iter; ++next; while(iter && !next) { iter = iter->parent(); next = iter; ++next; } if(!iter) { // Wrap around return get_iter(get_root_path(0)); } return next; } Gtk::TreeIter HOCRDocument::prevIndex(const Gtk::TreeIter& current) const { Gtk::TreeIter iter = current; // If the current index is invalid return last index if(!iter) { if(m_pages.empty()) { return Gtk::TreeIter(); } else { return get_iter(get_root_path(m_pages.size() - 1)); } } // Return last possible leaf of previous sibling, if any, or parent Gtk::TreeIter parent = iter->parent(); if(!--iter) { if(parent) { return parent; } // Wrap around iter = get_iter(get_root_path(m_pages.size() - 1));; } while(!iter->children().empty()) { iter = iter->children()[iter->children().size() - 1]; } return iter; } Gtk::TreeIter HOCRDocument::prevOrNextIndex(bool next, const Gtk::TreeIter& current, const Glib::ustring& ocrClass, bool misspelled, bool lowconf) const { Gtk::TreeIter start = current; if(!start) { start = get_iter(get_root_path(0)); } Gtk::TreeIter curr = next ? nextIndex(start) : prevIndex(start); while(curr && curr != start) { const HOCRItem* item = itemAtIndex(curr); if(item && item->itemClass() == ocrClass && (!misspelled || indexIsMisspelledWord(curr)) && (!lowconf || std::atoi(item->getTitleAttribute("x_wconf").c_str()) < 90)) { break; } curr = next ? nextIndex(curr) : prevIndex(curr); }; return curr; } bool HOCRDocument::indexIsMisspelledWord(const Gtk::TreeIter& index) const { const HOCRItem* item = itemAtIndex(index); if(item->isMisspelled() == -1) { recheckItemSpelling(index); } return item->isMisspelled() == 1; } std::vector HOCRDocument::recheckItemSpelling(const Gtk::TreeIter& index) const { HOCRItem* item = mutableItemAtIndex(index); if(item->itemClass() != "ocrx_word") { return {}; } Glib::ustring prefix, suffix, trimmed = HOCRItem::trimmedWord(item->text(), &prefix, &suffix); if(trimmed.empty()) { item->setMisspelled(false); return {index}; } Glib::ustring lang = item->spellingLang(); if(lang.empty()) { item->setMisspelled(false); return {index}; } if(m_spell->get_language() != lang) { try { m_spell->set_language(lang); } catch(const GtkSpell::Error& /*e*/) { item->setMisspelled(false); return {index}; } } // check word, including (if requested) setting suggestions; handle hyphenated phrases correctly if(m_spell->checkSpelling(trimmed)) { item->setMisspelled(false); return {index}; } item->setMisspelled(true); // handle some hyphenated words // don't bother with words not broken over sibling text lines (ie interrupted by other blocks), it's human hard // don't bother with words broken over three or more lines, it's implausible and this treatment is ^ necessarily incomplete HOCRItem* line = item->parent(); if(!line) { return {index}; } HOCRItem* paragraph = line->parent(); if(!paragraph) { return {index}; } int lineIdx = item->index(); std::vector paragraphLines = paragraph->children(); if(item == line->children().front() && lineIdx > 0) { HOCRItem* prevLine = paragraphLines.at(lineIdx - 1); if(!prevLine || prevLine->children().empty()) { return {index}; } HOCRItem* prevWord = prevLine->children().back(); if(!prevWord || prevWord->itemClass() != "ocrx_word") { return {index}; } Glib::ustring prevText = prevWord->text(); if(Utils::string_endswith(prevText, "-")) { return {index}; } // don't bother with (reassembled) suggestions for broken words since we can't re-break them bool valid = m_spell->checkSpelling(HOCRItem::trimmedWord(prevText) + trimmed); item->setMisspelled(!valid); prevWord->setMisspelled(!valid); return {index, indexAtItem(prevWord)}; } else if(item == line->children().back() && lineIdx + 1 < int(paragraphLines.size()) && Utils::string_endswith(item->text(), "-")) { HOCRItem* nextLine = paragraphLines.at(lineIdx + 1); if(!nextLine || nextLine->children().empty()) { return {index}; } HOCRItem* nextWord = nextLine->children().front(); if(!nextWord || nextWord->itemClass() != "ocrx_word") { return {index}; } bool valid = m_spell->checkSpelling(trimmed + HOCRItem::trimmedWord(nextWord->text())); item->setMisspelled(!valid); nextWord->setMisspelled(!valid); return {index, indexAtItem(nextWord)}; } return {index}; } bool HOCRDocument::getItemSpellingSuggestions(const Gtk::TreeIter& index, Glib::ustring& trimmedWord, std::vector& suggestions, int limit) const { const HOCRItem* item = itemAtIndex(index); if(item->itemClass() != "ocrx_word") { return true; } Glib::ustring prefix, suffix; trimmedWord = HOCRItem::trimmedWord(item->text(), &prefix, &suffix); if(trimmedWord.empty()) { return true; } Glib::ustring lang = item->spellingLang(); if(m_spell->get_language() != lang) { try { m_spell->set_language(lang); } catch(const GtkSpell::Error& /*e*/) { return true; } } bool valid = m_spell->checkSpelling(trimmedWord, &suggestions, limit); for(int i = 0, n = suggestions.size(); i < n; ++i) { suggestions[i] = prefix + suggestions[i] + suffix; } return valid; } bool HOCRDocument::referencesSource(const Glib::ustring& filename) const { for(const HOCRPage* page : m_pages) { if(page->sourceFile() == filename) { return true; } } return false; } Gtk::TreeIter HOCRDocument::searchPage(const Glib::ustring& filename, int pageNr) const { for(const HOCRPage* page : m_pages) { if(page->sourceFile() == filename && page->pageNr() == pageNr) { return get_iter(get_root_path(page->index())); } } return Gtk::TreeIter(); } Gtk::TreeIter HOCRDocument::searchAtCanvasPos(const Gtk::TreeIter& pageIndex, const Geometry::Point& pos) const { Gtk::TreeIter index = pageIndex; bool found = bool(index); while(found) { found = false; for(const Gtk::TreeIter& childIndex : index->children()) { if(itemAtIndex(childIndex)->bbox().contains(pos)) { index = childIndex; found = true; break; } } } return index; } void HOCRDocument::convertSourcePaths(const std::string& basepath, bool absolute) { for(HOCRPage* page : m_pages) { page->convertSourcePath(basepath, absolute); } } void HOCRDocument::recursiveRowInserted(const Gtk::TreeIter& index) { DEBUG(std::cout << "Inserted: " << get_path(index).to_string() << std::endl;) row_inserted(get_path(index), index); for(const Gtk::TreeIter& childIndex : index->children()) { recursiveRowInserted(childIndex); } } void HOCRDocument::recomputeBBoxes(HOCRItem* item) { // Update parent bboxes (except page) while(item && item->parent()) { Geometry::Rectangle bbox; for(const HOCRItem* child : item->children()) { bbox = bbox.unite(child->bbox()); } Glib::ustring bboxstr = Glib::ustring::compose("%1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height); item->setAttribute("title:bbox", bboxstr); item = item->parent(); } } Gtk::TreeModelFlags HOCRDocument::get_flags_vfunc() const { return Gtk::TREE_MODEL_ITERS_PERSIST; } GType HOCRDocument::get_column_type_vfunc(int index) const { if(index == COLUMN_EDITABLE) { return Glib::Value::value_type(); } else if(index == COLUMN_CHECKED) { return Glib::Value::value_type(); } else if(index == COLUMN_ICON) { return Glib::Value>::value_type(); } else if(index == COLUMN_TEXT) { return Glib::Value::value_type(); } else if(index == COLUMN_TOOLTIP) { return Glib::Value::value_type(); } else if(index == COLUMN_TEXT_COLOR) { return Glib::Value::value_type(); } else if(index == COLUMN_WCONF) { return Glib::Value::value_type(); } return G_TYPE_INVALID; } int HOCRDocument::get_n_columns_vfunc() const { return NUM_COLUMNS; } bool HOCRDocument::iter_next_vfunc(const iterator& iter, iterator& iter_next) const { DEBUG(std::cout << "iter_next_vfunc " << get_path(iter).to_string() << ": ";) const HOCRItem* item = itemAtIndex(iter); HOCRItem* nextItem = nullptr; if(item) { if(item->parent()) { nextItem = item->index() < int(item->parent()->children().size()) - 1 ? item->parent()->children()[item->index() + 1] : nullptr; } else { nextItem = item->index() < int(m_pages.size()) - 1 ? m_pages[item->index() + 1] : nullptr; } } iter_next.gobj()->user_data = nextItem; iter_next.set_stamp(iter_next.gobj()->user_data != nullptr); DEBUG(std::cout << (iter_next.gobj()->user_data != nullptr) << std::endl;) return iter_next.gobj()->user_data != nullptr; } bool HOCRDocument::get_iter_vfunc(const Path& path, iterator& iter) const { DEBUG(std::cout << "get_iter_vfunc " << path.to_string() << ": ";) if(path.empty() || m_pages.empty()) { DEBUG(std::cout << "0" << std::endl;) return false; } int idx = 0, size = path.size(); HOCRItem* item = m_pages[path[idx++]]; while(item && idx < size) { item = path[idx] >= int(item->children().size()) ? nullptr : item->children()[path[idx++]]; } iter.gobj()->user_data = item; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (item != nullptr) << std::endl;) return item != nullptr; } bool HOCRDocument::iter_children_vfunc(const iterator& parent, iterator& iter) const { DEBUG(std::cout << "iter_children_vfunc " << get_path(parent).to_string() << ": ";) HOCRItem* parentItem = mutableItemAtIndex(parent); iter.gobj()->user_data = parentItem && !parentItem->children().empty() ? parentItem->children().front() : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool HOCRDocument::iter_parent_vfunc(const iterator& child, iterator& iter) const { DEBUG(std::cout << "iter_parent_vfunc " << get_path(child).to_string() << ": ";) HOCRItem* childItem = mutableItemAtIndex(child); iter.gobj()->user_data = childItem ? childItem->parent() : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool HOCRDocument::iter_nth_child_vfunc(const iterator& parent, int n, iterator& iter) const { DEBUG(std::cout << "iter_nth_child_vfunc " << get_path(parent).to_string() << "@" << n << ": ";) HOCRItem* parentItem = mutableItemAtIndex(parent); iter.gobj()->user_data = parentItem && n < int(parentItem->children().size()) ? parentItem->children()[n] : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool HOCRDocument::iter_nth_root_child_vfunc(int n, iterator& iter) const { DEBUG(std::cout << "iter_nth_root_child_vfunc " << n << ": ";) iter.gobj()->user_data = n < int(m_pages.size()) ? m_pages[n] : nullptr; iter.set_stamp(iter.gobj()->user_data != nullptr); DEBUG(std::cout << (iter.gobj()->user_data != nullptr) << std::endl;) return iter.gobj()->user_data != nullptr; } bool HOCRDocument::iter_has_child_vfunc(const iterator& iter) const { DEBUG(std::cout << "iter_parent_vfunc " << get_path(iter).to_string() << ": ";) HOCRItem* item = mutableItemAtIndex(iter); DEBUG(std::cout << (item && !item->children().empty()) << std::endl;) return item && !item->children().empty(); } int HOCRDocument::iter_n_children_vfunc(const iterator& iter) const { DEBUG(std::cout << "iter_n_children_vfunc " << get_path(iter).to_string() << ": ";) HOCRItem* item = mutableItemAtIndex(iter); DEBUG(std::cout << (item ? item->children().size() : 0) << std::endl;) return item ? item->children().size() : 0; } int HOCRDocument::iter_n_root_children_vfunc() const { DEBUG(std::cout << "iter_n_root_children_vfunc " << m_pages.size() << std::endl;) return m_pages.size(); } Gtk::TreeModel::Path HOCRDocument::get_path_vfunc(const iterator& iter) const { Gtk::TreeModel::Path path; HOCRItem* item = mutableItemAtIndex(iter); while(item) { path.push_front(item->index()); item = item->parent(); } return path; } template static void setValue(Glib::ValueBase& gvalue, const T& value) { Glib::Value val; val.init(val.value_type()); val.set(value); gvalue.init(val.gobj()); } void HOCRDocument::get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const { DEBUG(std::cout << "get_value_vfunc Column " << column << " at path " << get_path(iter).to_string() << std::endl); const HOCRItem* item = itemAtIndex(iter); if(!item) { return; } else if(column == COLUMN_CHECKED) { setValue(value, item->isEnabled()); } else if(column == COLUMN_EDITABLE) { setValue(value, item->itemClass() == "ocrx_word"); } else if(column == COLUMN_ICON) { setValue(value, decorationRoleForItem(item)); } else if(column == COLUMN_TEXT) { setValue(value, displayRoleForItem(item)); } else if(column == COLUMN_TOOLTIP) { setValue(value, tooltipRoleForItem(item)); } else if(column == COLUMN_TEXT_COLOR) { bool enabled = item->isEnabled(); const HOCRItem* parent = item->parent(); while(enabled && parent) { enabled = parent->isEnabled(); parent = parent->parent(); } Glib::ustring color; if(enabled) { color = indexIsMisspelledWord(iter) ? "#F00" : "#000"; } else { color = indexIsMisspelledWord(iter) ? "#d05052" : "#a0a0a4"; } setValue(value, color); } else if(column == COLUMN_WCONF) { setValue(value, item->getTitleAttribute("x_wconf")); } } void HOCRDocument::set_value_impl(const iterator& row, int column, const Glib::ValueBase& value) { HOCRItem* item = mutableItemAtIndex(row); if(!item) { return; } else if(column == COLUMN_TEXT) { item->setText(static_cast&>(value).get()); for(const Gtk::TreeIter& changedIndex : recheckItemSpelling(row)) { row_changed(get_path(changedIndex), changedIndex); } } else if(column == COLUMN_CHECKED) { item->setEnabled(static_cast&>(value).get()); // Get leaf Gtk::TreeIter leaf = row; while(!leaf->children().empty()) { leaf = leaf->children()[leaf->children().size() - 1]; } Gtk::TreePath path = get_path(leaf); row_changed(path, leaf); } } void HOCRDocument::get_value_impl(const iterator& row, int column, Glib::ValueBase& value) const { get_value_vfunc(row, column, value); } Glib::ustring HOCRDocument::displayRoleForItem(const HOCRItem* item) const { Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocr_page") { const HOCRPage* page = static_cast(item); return Glib::ustring::compose("%1 (%2 %3/%4)", page->title(), _("Page"), page->index() + 1, m_pages.size()); } else if(itemClass == "ocr_carea") { return _("Text block"); } else if(itemClass == "ocr_par") { return _("Paragraph"); } else if(itemClass == "ocr_line") { return _("Textline"); } else if(itemClass == "ocrx_word") { return item->text(); } else if(itemClass == "ocr_graphic") { return _("Graphic"); } return Glib::ustring(); } Glib::RefPtr HOCRDocument::decorationRoleForItem(const HOCRItem* item) const { Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocr_page") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_page.png"); } else if(itemClass == "ocr_carea") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_block.png"); } else if(itemClass == "ocr_par") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_par.png"); } else if(itemClass == "ocr_line") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_line.png"); } else if(itemClass == "ocrx_word") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_word.png"); } else if(itemClass == "ocr_graphic") { return Gdk::Pixbuf::create_from_resource("/org/gnome/gimagereader/item_halftone.png"); } auto pixbuf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, false, 8, 16, 16); pixbuf->fill(255); return pixbuf; } Glib::ustring HOCRDocument::tooltipRoleForItem(const HOCRItem* item) const { Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocr_page") { const HOCRPage* page = static_cast(item); return Glib::ustring::compose("%1 (%2 %3/%4)", page->title(), _("Page"), page->index() + 1, m_pages.size()); } return Glib::ustring(); } void HOCRDocument::insertItem(HOCRItem* parent, HOCRItem* item, int i) { if(parent) { parent->insertChild(item, i); } else if(HOCRPage* page = dynamic_cast(item)) { page->m_index = i; m_pages.insert(m_pages.begin() + i++, page); for(int n = m_pages.size(); i < n; ++i) { m_pages[i]->m_index = i; Gtk::TreePath path = get_root_path(i); row_changed(path, get_iter(path)); } } } void HOCRDocument::deleteItem(HOCRItem* item) { takeItem(item); delete item; } void HOCRDocument::takeItem(HOCRItem* item) { if(item->parent()) { item->parent()->takeChild(item); } else if(HOCRPage* page = dynamic_cast(item)) { int idx = page->index(); m_pages.erase(m_pages.begin() + idx); for(int i = idx, n = m_pages.size(); i < n; ++i) { m_pages[i]->m_index = i; } for(int i = 0, n = m_pages.size(); i < n; ++i) { Gtk::TreePath path = get_root_path(i); row_changed(path, get_iter(path)); } } } /////////////////////////////////////////////////////////////////////////////// std::map HOCRItem::s_langCache = std::map(); std::map HOCRItem::deserializeAttrGroup(const Glib::ustring& string) { std::map attrs; for(const Glib::ustring& attr : Utils::string_split(string, ';', false)) { Glib::ustring trimmed = Utils::string_trim(attr); int splitPos = trimmed.find_first_of(' '); attrs.insert(std::make_pair(trimmed.substr(0, splitPos), splitPos > 0 ? Utils::string_trim(trimmed.substr(splitPos + 1)) : "")); } return attrs; } Glib::ustring HOCRItem::serializeAttrGroup(const std::map& attrs) { std::vector list; for(auto it = attrs.begin(), itEnd = attrs.end(); it != itEnd; ++it) { list.push_back(Glib::ustring::compose("%1 %2", it->first, it->second)); } return Utils::string_join(list, "; "); } Glib::ustring HOCRItem::trimmedWord(const Glib::ustring& word, Glib::ustring* prefix, Glib::ustring* suffix) { // correctly trim words with apostrophes or hyphens within them, initialisms/acronyms, and numeric citations static const Glib::RefPtr wordRe = Glib::Regex::create("^(\\W*)(\\w?|\\w(\\w|[-\u2013\u2014'’])*\\w|(\\w+\\.){2,})([\\W\u00b2\u00b3\u00b9\u2070\\-\u207e]*)$"); Glib::MatchInfo matchInfo; if(wordRe->match(word, matchInfo)) { if(prefix) { *prefix = matchInfo.fetch(1); } if(suffix) { *suffix = matchInfo.fetch(5); } return matchInfo.fetch(2); } return word; } HOCRItem::HOCRItem(const xmlpp::Element* element, HOCRPage* page, HOCRItem* parent, int index) : m_pageItem(page), m_parentItem(parent), m_index(index) { // Read attrs for(const xmlpp::Attribute* attr : element->get_attributes()) { Glib::ustring attrName = attr->get_name(); if(attrName == "title") { m_titleAttrs = deserializeAttrGroup(element->get_attribute_value("title")); } else { m_attrs[attrName] = attr->get_value(); } } // Map ocr_header/ocr_caption/ocr_textfloat to ocr_line if(m_attrs["class"] == "ocr_header" || m_attrs["class"] == "ocr_caption" || m_attrs["class"] == "ocr_textfloat") { m_attrs["class"] = "ocr_line"; } // Adjust item id based on pageId if(parent) { Glib::ustring idClass = itemClass().substr(itemClass().find_first_of('_') + 1); int counter = page->m_idCounters[idClass] + 1; page->m_idCounters[idClass] = counter; Glib::ustring newId = Glib::ustring::compose("%1_%2_%3", idClass, page->pageId(), counter); m_attrs["id"] = newId; } // Parse item bbox std::vector bbox = Utils::string_split(m_titleAttrs["bbox"], ' ', false); if(bbox.size() == 4) { m_bbox.setCoords(std::atof(bbox[0].c_str()), std::atof(bbox[1].c_str()), std::atof(bbox[2].c_str()), std::atof(bbox[3].c_str())); } if(itemClass() == "ocrx_word") { m_text = XmlUtils::elementText(element); m_bold = !XmlUtils::elementsByTagName(element, "strong").empty(); m_italic = !XmlUtils::elementsByTagName(element, "em").empty(); } else if(itemClass() == "ocr_line") { // Depending on the locale, tesseract can use a comma instead of a dot as decimal separator in the baseline... Utils::string_replace(m_titleAttrs["baseline"], ",", ".", true); m_misspelled = false; } else { m_misspelled = false; } } HOCRItem::~HOCRItem() { std::for_each( m_childItems.begin(), m_childItems.end(), [](HOCRItem * item) { delete item; }); } void HOCRItem::addChild(HOCRItem* child) { m_childItems.push_back(child); child->m_parentItem = this; child->m_pageItem = m_pageItem; child->m_index = m_childItems.size() - 1; } void HOCRItem::insertChild(HOCRItem* child, int i) { m_childItems.insert(m_childItems.begin() + i, child); child->m_parentItem = this; child->m_pageItem = m_pageItem; child->m_index = i++; for(int n = m_childItems.size(); i < n; ++i) { m_childItems[i]->m_index = i; } } void HOCRItem::removeChild(HOCRItem* child) { takeChild(child); delete child; } void HOCRItem::takeChild(HOCRItem* child) { int idx = child->index(); m_childItems.erase(m_childItems.begin() + idx); for(int i = idx, n = m_childItems.size(); i < n ; ++i) { m_childItems[i]->m_index = i; } } std::vector HOCRItem::takeChildren() { std::vector children; m_childItems.swap(children); return children; } std::map HOCRItem::getAllAttributes() const { std::map attrValues; for(auto it = m_attrs.begin(), itEnd = m_attrs.end(); it != itEnd; ++it) { attrValues.insert(*it); } for(auto it = m_titleAttrs.begin(), itEnd = m_titleAttrs.end(); it != itEnd; ++it) { attrValues.insert(std::make_pair(Glib::ustring::compose("title:%1", it->first), it->second)); } if(itemClass() == "ocrx_word") { if(attrValues.find("title:x_font") == attrValues.end()) { attrValues.insert(std::make_pair("title:x_font", "")); } attrValues.insert(std::make_pair("bold", fontBold() ? "yes" : "no")); attrValues.insert(std::make_pair("italic", fontItalic() ? "yes" : "no")); } return attrValues; } std::map HOCRItem::getAttributes(const std::vector& names) const { std::map attrValues; for(const Glib::ustring& attrName : names) { std::vector parts = Utils::string_split(attrName, ':'); if(parts.size() > 1) { g_assert(parts[0] == "title"); attrValues.insert(std::make_pair(attrName, getTitleAttribute(parts[1]))); } else if(attrName == "bold") { attrValues.insert(std::make_pair(attrName, fontBold() ? "yes" : "no")); } else if(attrName == "italic") { attrValues.insert(std::make_pair(attrName, fontItalic() ? "yes" : "no")); } else { attrValues.insert(std::make_pair(attrName, getAttribute(attrName))); } } return attrValues; } void HOCRItem::getPropagatableAttributes(std::map>>& occurrences) const { static std::map> s_propagatableAttributes = { {"ocr_line", {"title:baseline"}}, {"ocrx_word", {"lang", "title:x_fsize", "title:x_font", "bold", "italic"}} }; Glib::ustring childClass = m_childItems.empty() ? "" : m_childItems.front()->itemClass(); auto it = s_propagatableAttributes.find(childClass); if(it != s_propagatableAttributes.end()) { for(HOCRItem* child : m_childItems) { std::map attrs = child->getAttributes(it->second); for(auto attrIt = attrs.begin(), attrItEnd = attrs.end(); attrIt != attrItEnd; ++attrIt) { occurrences[childClass][attrIt->first].insert(attrIt->second); } } } if(childClass != "ocrx_word") { for(HOCRItem* child : m_childItems) { child->getPropagatableAttributes(occurrences); } } } void HOCRItem::setAttribute(const Glib::ustring& name, const Glib::ustring& value, const Glib::ustring& attrItemClass) { if(!attrItemClass.empty() && itemClass() != attrItemClass) { for(HOCRItem* child : m_childItems) { child->setAttribute(name, value, attrItemClass); } return; } std::vector parts = Utils::string_split(name, ':'); if(name == "bold") { m_bold = value == "yes"; } else if(name == "italic") { m_italic = value == "yes"; } else if(parts.size() < 2) { m_attrs[name] = value; } else { g_assert(parts[0] == "title"); m_titleAttrs[parts[1]] = value; if(name == "title:bbox") { std::vector bbox = Utils::string_split(value, ' ', false); g_assert(bbox.size() == 4); m_bbox.setCoords(std::atof(bbox[0].c_str()), std::atof(bbox[1].c_str()), std::atof(bbox[2].c_str()), std::atof(bbox[3].c_str())); } } } Glib::ustring HOCRItem::toHtml(int indent) const { Glib::ustring cls = itemClass(); Glib::ustring tag; if(cls == "ocr_page" || cls == "ocr_carea" || cls == "ocr_graphic") { tag = "div"; } else if(cls == "ocr_par") { tag = "p"; } else { tag = "span"; } Glib::ustring html = Glib::ustring(indent, ' ') + "<" + tag; html += Glib::ustring::compose(" title=\"%1\"", serializeAttrGroup(m_titleAttrs)); for(auto it = m_attrs.begin(), itEnd = m_attrs.end(); it != itEnd; ++it) { html += Glib::ustring::compose(" %1=\"%2\"", it->first, it->second); } html += ">"; if(cls == "ocrx_word") { if(m_bold) { html += ""; } if(m_italic) { html += ""; } html += Utils::string_html_escape(m_text); if(m_italic) { html += ""; } if(m_bold) { html += ""; } } else { html += "\n"; for(const HOCRItem* child : m_childItems) { html += child->toHtml(indent + 1); } html += Glib::ustring(indent, ' '); } html += "\n"; return html; } std::pair HOCRItem::baseLine() const { static const Glib::RefPtr baseLineRx = Glib::Regex::create("([+-]?\\d+\\.?\\d*)\\s+([+-]?\\d+\\.?\\d*)"); Glib::MatchInfo matchInfo; if(baseLineRx->match(getTitleAttribute("baseline"), matchInfo)) { double a = std::atof(matchInfo.fetch(1).c_str()); double b = std::atof(matchInfo.fetch(2).c_str()); return std::make_pair(a, b); } return std::make_pair(0.0, 0.0); } bool HOCRItem::parseChildren(const xmlpp::Element* element, Glib::ustring language, const Glib::ustring& defaultLanguage) { // Determine item language (inherit from parent if not specified) Glib::ustring elemLang = getAttribute("lang"); if(!elemLang.empty()) { auto it = s_langCache.find(elemLang); if(it == s_langCache.end()) { it = s_langCache.insert(std::make_pair(elemLang, Utils::getSpellingLanguage(elemLang, defaultLanguage))).first; } m_attrs.erase(m_attrs.find("lang")); language = it->second; } if(itemClass() == "ocrx_word") { m_attrs["lang"] = language; return !m_text.empty(); } bool haveWords = false; const xmlpp::Element* childElement = XmlUtils::firstChildElement(element); while(childElement) { m_childItems.push_back(new HOCRItem(childElement, m_pageItem, this, m_childItems.size())); haveWords |= m_childItems.back()->parseChildren(childElement, language, defaultLanguage); childElement = XmlUtils::nextSiblingElement(childElement); } return haveWords; } Glib::ustring HOCRItem::getAttribute(const Glib::ustring& key) const { auto it = m_attrs.find(key); return it == m_attrs.end() ? Glib::ustring() : it->second; } Glib::ustring HOCRItem::getTitleAttribute(const Glib::ustring& key) const { auto it = m_titleAttrs.find(key); return it == m_titleAttrs.end() ? Glib::ustring() : it->second; } /////////////////////////////////////////////////////////////////////////////// HOCRPage::HOCRPage(const xmlpp::Element* element, int pageId, const Glib::ustring& defaultLanguage, bool cleanGraphics, int index) : HOCRItem(element, this, nullptr, index), m_pageId(pageId) { m_attrs["id"] = Glib::ustring::compose("page_%1", pageId); m_sourceFile = Utils::string_trim(m_titleAttrs["image"], "'\""); m_pageNr = std::atoi(m_titleAttrs["ppageno"].c_str()); // Code to handle pageno -> ppageno typo in previous versions of gImageReader if(m_pageNr == 0) { m_pageNr = std::atoi(m_titleAttrs["pageno"].c_str()); m_titleAttrs["ppageno"] = m_titleAttrs["pageno"]; m_titleAttrs.erase(m_titleAttrs.find("pageno")); } m_angle = std::atof(m_titleAttrs["rot"].c_str()); m_resolution = std::atoi(m_titleAttrs["res"].c_str()); if(m_resolution == 0) { m_resolution = 100; } const xmlpp::Element* childElement = XmlUtils::firstChildElement(element, "div"); while(childElement) { // Need to query here because "delete m_childItems.back();" may delete the item const xmlpp::Element* nextSibling = XmlUtils::nextSiblingElement(childElement); HOCRItem* item = new HOCRItem(childElement, this, this, m_childItems.size()); m_childItems.push_back(item); if(!item->parseChildren(childElement, defaultLanguage, defaultLanguage)) { // No word children -> treat as graphic if(cleanGraphics && (item->bbox().width < 10 || item->bbox().height < 10)) { // Ignore graphics which are less than 10 x 10 delete m_childItems.back(); m_childItems.pop_back(); } else { item->setAttribute("itemClass", "ocr_graphic"); std::for_each(item->m_childItems.begin(), item->m_childItems.end(), [](HOCRItem * item) { delete item; }); item->m_childItems.clear(); } } childElement = nextSibling; } } Glib::ustring HOCRPage::title() const { std::string basename = Gio::File::create_for_path(m_sourceFile)->get_basename(); return Glib::ustring::compose("%1 [%2]", basename, m_pageNr); } void HOCRPage::convertSourcePath(const std::string& basepath, bool absolute) { m_sourceFile = absolute ? Utils::make_absolute_path(m_sourceFile, basepath) : Utils::make_relative_path(m_sourceFile, basepath); m_titleAttrs["image"] = Glib::ustring::compose("'%1'", m_sourceFile); } gImageReader-3.4.0/gtk/src/hocr/HOCRDocument.hh000066400000000000000000000252521417507262200211300ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRDocument.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRDOCUMENT_HH #define HOCRDOCUMENT_HH #include "common.hh" #include "Config.hh" #include "Geometry.hh" #include #include #include namespace xmlpp { class Element; } class HOCRItem; class HOCRPage; class HOCRSpellChecker; class HOCRDocument : public Gtk::TreeModel, public Glib::Object { public: enum Columns { COLUMN_EDITABLE, COLUMN_CHECKED, COLUMN_ICON, COLUMN_TEXT, COLUMN_TOOLTIP, COLUMN_TEXT_COLOR, COLUMN_WCONF, NUM_COLUMNS}; HOCRDocument(); ~HOCRDocument(); void setDefaultLanguage(const Glib::ustring& language) { m_defaultLanguage = language; } const Glib::ustring& defaultLanguage() const { return m_defaultLanguage; } void addSpellingActions(Gtk::Menu* menu, const Gtk::TreeIter& index); void addWordToDictionary(const Gtk::TreeIter& index); Glib::ustring toHTML(); Gtk::TreeIter insertPage(int beforeIdx, const xmlpp::Element* pageElement, bool cleanGraphics, const std::string& sourceBasePath = std::string()); const HOCRPage* page(int i) const { return m_pages[i]; } int pageCount() const { return m_pages.size(); } const HOCRItem* itemAtIndex(const Gtk::TreeIter& index) const { return static_cast(index.gobj()->user_data); } Gtk::TreeIter indexAtItem(const HOCRItem* item) const; bool editItemAttribute(const Gtk::TreeIter& index, const Glib::ustring& name, const Glib::ustring& value, const Glib::ustring& attrItemClass = Glib::ustring()); bool editItemText(const Gtk::TreeIter& index, const Glib::ustring& text); Gtk::TreeIter moveItem(const Gtk::TreeIter& itemIndex, const Gtk::TreeIter& newParent, int row); Gtk::TreeIter swapItems(const Gtk::TreeIter& parent, int startRow, int endRow); Gtk::TreeIter mergeItems(const Gtk::TreeIter& parent, int startRow, int endRow); Gtk::TreeIter splitItem(const Gtk::TreeIter& item, int startRow, int endRow); Gtk::TreeIter splitItemText(const Gtk::TreeIter& itemIndex, int pos, const Glib::RefPtr& pangoContext); Gtk::TreeIter mergeItemText(const Gtk::TreeIter& itemIndex, bool mergeNext); Gtk::TreeIter addItem(const Gtk::TreeIter& parent, const xmlpp::Element* element); bool removeItem(const Gtk::TreeIter& index); Gtk::TreeIter nextIndex(const Gtk::TreeIter& current) const; Gtk::TreeIter prevIndex(const Gtk::TreeIter& current) const; Gtk::TreeIter prevOrNextIndex(bool next, const Gtk::TreeIter& current, const Glib::ustring& ocrClass, bool misspelled = false, bool lowconf = false) const; bool indexIsMisspelledWord(const Gtk::TreeIter& index) const; bool getItemSpellingSuggestions(const Gtk::TreeIter& index, Glib::ustring& trimmedWord, std::vector& suggestions, int limit) const; bool referencesSource(const Glib::ustring& filename) const; Gtk::TreeIter searchPage(const Glib::ustring& filename, int pageNr) const; Gtk::TreeIter searchAtCanvasPos(const Gtk::TreeIter& pageIndex, const Geometry::Point& pos) const; void convertSourcePaths(const std::string& basepath, bool absolute); Gtk::TreePath get_root_path(int idx) const { Gtk::TreePath path; path.push_back(idx); return path; } // Upstream forgot the consts... Gtk::TreeIter get_iter(const Gtk::TreePath& path) const { return static_cast(const_cast(this))->get_iter(path); } Gtk::TreeIter get_iter(const Glib::ustring& path) const { return static_cast(const_cast(this))->get_iter(path); } sigc::signal signal_item_attribute_changed() { return m_signal_item_attribute_changed; } private: ClassData m_classdata; int m_pageIdCounter = 0; Glib::ustring m_defaultLanguage = "en_US"; HOCRSpellChecker* m_spell; std::vector m_pages; sigc::signal m_signal_item_attribute_changed; Gtk::TreeModelFlags get_flags_vfunc() const override; GType get_column_type_vfunc(int index) const override; int get_n_columns_vfunc() const override; bool iter_next_vfunc(const iterator& iter, iterator& iter_next) const override; bool get_iter_vfunc(const Path& path, iterator& iter) const override; bool iter_children_vfunc(const iterator& parent, iterator& iter) const override; bool iter_parent_vfunc(const iterator& child, iterator& iter) const override; bool iter_nth_child_vfunc(const iterator& parent, int n, iterator& iter) const override; bool iter_nth_root_child_vfunc(int n, iterator& iter) const override; bool iter_has_child_vfunc(const iterator& iter) const override; int iter_n_children_vfunc(const iterator& iter) const override; int iter_n_root_children_vfunc() const override; // void ref_node_vfunc(const iterator& iter) const override; // void unref_node_vfunc(const iterator& iter) const override; Gtk::TreeModel::Path get_path_vfunc(const iterator& iter) const override; void get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const override; void set_value_impl(const iterator& row, int column, const Glib::ValueBase& value) override; void get_value_impl(const iterator& row, int column, Glib::ValueBase& value) const override; Glib::ustring displayRoleForItem(const HOCRItem* item) const; Glib::RefPtr decorationRoleForItem(const HOCRItem* item) const; Glib::ustring tooltipRoleForItem(const HOCRItem* item) const; void insertItem(HOCRItem* parent, HOCRItem* item, int i); void deleteItem(HOCRItem* item); void takeItem(HOCRItem* item); void resetMisspelled(const Gtk::TreeIter& index); std::vector recheckItemSpelling(const Gtk::TreeIter& index) const; void recursiveRowInserted(const Gtk::TreeIter& index); void recomputeBBoxes(HOCRItem* item); HOCRItem* mutableItemAtIndex(const Gtk::TreeIter& index) const { return static_cast(index.gobj()->user_data); } }; class HOCRItem { public: // attrname : attrvalue : occurrences typedef std::map> AttrOccurenceMap_t; HOCRItem(const xmlpp::Element* element, HOCRPage* page, HOCRItem* parent, int index = -1); virtual ~HOCRItem(); HOCRPage* page() const { return m_pageItem; } const std::vector& children() const { return m_childItems; } HOCRItem* parent() const { return m_parentItem; } int index() const { return m_index; } bool isEnabled() const { return m_enabled; } // HOCR specific convenience getters Glib::ustring itemClass() const { return getAttribute("class"); } const Geometry::Rectangle& bbox() const { return m_bbox; } Glib::ustring text() const { return m_text; } Glib::ustring lang() const { return getAttribute("lang"); } Glib::ustring spellingLang() const { Glib::ustring l = lang(); Glib::ustring code = Config::lookupLangCode(l); return code.empty() ? l : code; } const std::map getTitleAttributes() const { return m_titleAttrs; } Glib::ustring getAttribute(const Glib::ustring& key) const; Glib::ustring getTitleAttribute(const Glib::ustring& key) const; std::map getAllAttributes() const; std::map getAttributes(const std::vector& names) const; void getPropagatableAttributes(std::map > >& occurrences) const; Glib::ustring toHtml(int indent = 0) const; std::pair baseLine() const; Glib::ustring fontFamily() const { return getTitleAttribute("x_font"); } double fontSize() const { return std::atof(getTitleAttribute("x_fsize").c_str()); } bool fontBold() const { return m_bold; } bool fontItalic() const { return m_italic; } static std::map deserializeAttrGroup(const Glib::ustring& string); static Glib::ustring serializeAttrGroup(const std::map& attrs); static Glib::ustring trimmedWord(const Glib::ustring& word, Glib::ustring* prefix = nullptr, Glib::ustring* suffix = nullptr); protected: friend class HOCRDocument; friend class HOCRPage; static std::map s_langCache; Glib::ustring m_text; int m_misspelled = -1; bool m_bold; bool m_italic; std::map m_attrs; std::map m_titleAttrs; std::vector m_childItems; HOCRPage* m_pageItem = nullptr; HOCRItem* m_parentItem = nullptr; int m_index; bool m_enabled = true; Geometry::Rectangle m_bbox; // All mutations must be done through methods of HOCRDocument void addChild(HOCRItem* child); void insertChild(HOCRItem* child, int index); void removeChild(HOCRItem* child); void takeChild(HOCRItem* child); std::vector takeChildren(); void setEnabled(bool enabled) { m_enabled = enabled; } void setText(const Glib::ustring& newText) { m_text = newText; } void setMisspelled(int misspelled) { m_misspelled = misspelled; } int isMisspelled() const { return m_misspelled; } void setAttribute(const Glib::ustring& name, const Glib::ustring& value, const Glib::ustring& attrItemClass = Glib::ustring()); bool parseChildren(const xmlpp::Element* element, Glib::ustring language, const Glib::ustring& defaultLanguage); }; class HOCRPage : public HOCRItem { public: HOCRPage(const xmlpp::Element* element, int pageId, const Glib::ustring& defaultLanguage, bool cleanGraphics, int index); const Glib::ustring& sourceFile() const { return m_sourceFile; } // const-refs here to avoid taking reference from temporaries const int& pageNr() const { return m_pageNr; } const double& angle() const { return m_angle; } const int& resolution() const { return m_resolution; } int pageId() const { return m_pageId; } Glib::ustring title() const; private: friend class HOCRItem; friend class HOCRDocument; int m_pageId; std::map m_idCounters; Glib::ustring m_sourceFile; int m_pageNr; double m_angle; int m_resolution; void convertSourcePath(const std::string& basepath, bool absolute); }; #endif // HOCRDOCUMENT_HH gImageReader-3.4.0/gtk/src/hocr/HOCRExporter.hh000066400000000000000000000022651417507262200211610ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCREXPORTER_HH #define HOCREXPORTER_HH #include class HOCRDocument; class HOCRExporter { public: struct ExporterSettings { virtual ~ExporterSettings() = default; }; virtual ~HOCRExporter() = default; virtual bool run(const HOCRDocument* hocrdocument, const std::string& outputname, const ExporterSettings* settings = nullptr) = 0; }; #endif // HOCREXPORTER_HH gImageReader-3.4.0/gtk/src/hocr/HOCROdtExporter.cc000066400000000000000000000542021417507262200216140ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCROdtExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "Displayer.hh" #include "HOCRDocument.hh" #include "HOCROdtExporter.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "Utils.hh" #include #include #include #include #include static Glib::ustring manifestNS_URI("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"); static Glib::ustring manifestNS("manifest"); static Glib::ustring officeNS_URI("urn:oasis:names:tc:opendocument:xmlns:office:1.0"); static Glib::ustring officeNS("office"); static Glib::ustring textNS_URI ("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); static Glib::ustring textNS("text"); static Glib::ustring styleNS_URI ("urn:oasis:names:tc:opendocument:xmlns:style:1.0"); static Glib::ustring styleNS("style"); static Glib::ustring foNS_URI ("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"); static Glib::ustring foNS("fo"); static Glib::ustring tableNS_URI ("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); static Glib::ustring tableNS("table"); static Glib::ustring drawNS_URI ("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"); static Glib::ustring drawNS("draw"); static Glib::ustring xlinkNS_URI ("http://www.w3.org/1999/xlink"); static Glib::ustring xlinkNS("xlink"); static Glib::ustring svgNS_URI ("urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"); static Glib::ustring svgNS("svg"); template static zip_source* zip_source_buffer_from_data(zip* fzip, const char_t* data, std::size_t len) { void* copy = std::malloc(len); std::memcpy(copy, data, len); return zip_source_buffer(fzip, copy, len, 1); } bool HOCROdtExporter::run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* /*settings*/) { zip* fzip = zip_open(outname.c_str(), ZIP_CREATE | ZIP_TRUNCATE, nullptr); if(!fzip) { Utils::messageBox(Gtk::MESSAGE_WARNING, _("Export failed"), _("The ODT export failed: unable to write output file.")); return false; } int pageCount = hocrdocument->pageCount(); MainWindow::ProgressMonitor monitor(2 * pageCount); MAIN->showProgress(&monitor); bool success = Utils::busyTask([&] { // Image files if(zip_dir_add(fzip, "Pictures", ZIP_FL_ENC_UTF_8) < 0) { return false; } std::map imageFiles; for(int i = 0; i < pageCount; ++i) { monitor.increaseProgress(); const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } bool ok = false; Utils::runInMainThreadBlocking([&] { ok = setSource(page->sourceFile(), page->pageNr(), page->resolution(), page->angle()); }); if(!ok) { continue; } for(const HOCRItem* item : page->children()) { writeImage(fzip, imageFiles, item); } } // Mimetype { Glib::ustring mimetype = "application/vnd.oasis.opendocument.text"; zip_source* source = zip_source_buffer_from_data(fzip, mimetype.c_str(), mimetype.bytes()); if(zip_file_add(fzip, "mimetype", source, ZIP_FL_ENC_UTF_8) < 0) { zip_source_free(source); return false; } } // Manifest { if(zip_dir_add(fzip, "META-INF", ZIP_FL_ENC_UTF_8) < 0) { return false; } xmlpp::Document doc; xmlpp::Element* manifestEl = doc.create_root_node("manifest", manifestNS_URI, manifestNS); manifestEl->set_attribute("version", "1.2", manifestNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* fileEntryEl = manifestEl->add_child("file-entry", manifestNS); #else xmlpp::Element* fileEntryEl = manifestEl->add_child_element("file-entry", manifestNS); #endif fileEntryEl->set_attribute("media-type", "application/vnd.oasis.opendocument.text", manifestNS); fileEntryEl->set_attribute("full-path", "/", manifestNS); #ifdef HAVE_LIBXMLPP_2 fileEntryEl = manifestEl->add_child("file-entry", manifestNS); #else fileEntryEl = manifestEl->add_child_element("file-entry", manifestNS); #endif fileEntryEl->set_attribute("media-type", "text/xml", manifestNS); fileEntryEl->set_attribute("full-path", "content.xml", manifestNS); for(auto it = imageFiles.begin(), itEnd = imageFiles.end(); it != itEnd; ++it) { #ifdef HAVE_LIBXMLPP_2 fileEntryEl = manifestEl->add_child("file-entry", manifestNS); #else fileEntryEl = manifestEl->add_child_element("file-entry", manifestNS); #endif fileEntryEl->set_attribute("media-type", "image/png", manifestNS); fileEntryEl->set_attribute("full-path", it->second, manifestNS); } Glib::ustring data = doc.write_to_string(); zip_source* source = zip_source_buffer_from_data(fzip, data.c_str(), data.bytes()); if(zip_file_add(fzip, "META-INF/manifest.xml", source, ZIP_FL_ENC_UTF_8) < 0) { zip_source_free(source); return false; } } // Content { xmlpp::Document doc; xmlpp::Element* documentContentEl = doc.create_root_node("document-content", officeNS_URI, officeNS); documentContentEl->set_namespace_declaration(textNS_URI, textNS); documentContentEl->set_namespace_declaration(styleNS_URI, styleNS); documentContentEl->set_namespace_declaration(foNS_URI, foNS); documentContentEl->set_namespace_declaration(drawNS_URI, drawNS); documentContentEl->set_namespace_declaration(xlinkNS_URI, xlinkNS); documentContentEl->set_namespace_declaration(svgNS_URI, svgNS); documentContentEl->set_attribute("version", "1.2", officeNS); // - Font face decls #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* fontFaceDeclsEl = documentContentEl->add_child("font-face-decls", officeNS); #else xmlpp::Element* fontFaceDeclsEl = documentContentEl->add_child_element("font-face-decls", officeNS); #endif std::set families; for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { writeFontFaceDecls(families, page, fontFaceDeclsEl); } } // - Page styles #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* automaticStylesEl = documentContentEl->add_child("automatic-styles", officeNS); #else xmlpp::Element* automaticStylesEl = documentContentEl->add_child_element("automatic-styles", officeNS); #endif for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* pageLayoutEl = automaticStylesEl->add_child("page-layout", styleNS); #else xmlpp::Element* pageLayoutEl = automaticStylesEl->add_child_element("page-layout", styleNS); #endif pageLayoutEl->set_attribute("name", Glib::ustring::compose("PL%1", i), styleNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* pageLayoutPropertiesEl = pageLayoutEl->add_child("page-layout-properties", styleNS); #else xmlpp::Element* pageLayoutPropertiesEl = pageLayoutEl->add_child_element("page-layout-properties", styleNS); #endif pageLayoutPropertiesEl->set_attribute("page-width", Glib::ustring::compose("%1in", page->bbox().width / double(page->resolution())), foNS); pageLayoutPropertiesEl->set_attribute("page-height", Glib::ustring::compose("%1in", page->bbox().height / double(page->resolution())), foNS); pageLayoutPropertiesEl->set_attribute("print-orientation", page->bbox().width > page->bbox().height ? "landscape" : "portrait", styleNS); pageLayoutPropertiesEl->set_attribute("writing-mode", "lr-tb", styleNS); pageLayoutPropertiesEl->set_attribute("margin-top", "0in", foNS); pageLayoutPropertiesEl->set_attribute("margin-bottom", "0in", foNS); pageLayoutPropertiesEl->set_attribute("margin-left", "0in", foNS); pageLayoutPropertiesEl->set_attribute("margin-right", "0in", foNS); } } #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* masterStylesEl = documentContentEl->add_child("master-styles", officeNS); #else xmlpp::Element* masterStylesEl = documentContentEl->add_child_element("master-styles", officeNS); #endif for(int i = 0; i < pageCount; ++i) { if(hocrdocument->page(i)->isEnabled()) { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* masterPageEl = masterStylesEl->add_child("master-page", styleNS); #else xmlpp::Element* masterPageEl = masterStylesEl->add_child_element("master-page", styleNS); #endif masterPageEl->set_attribute("name", Glib::ustring::compose("MP%1", i), styleNS); masterPageEl->set_attribute("page-layout-name", Glib::ustring::compose("PL%1", i), styleNS); } } // - Styles #ifdef HAVE_LIBXMLPP_2 automaticStylesEl = documentContentEl->add_child("automatic-styles", officeNS); #else automaticStylesEl = documentContentEl->add_child_element("automatic-styles", officeNS); #endif // -- Standard paragraph #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* styleEl = automaticStylesEl->add_child("style", styleNS); #else xmlpp::Element* styleEl = automaticStylesEl->add_child_element("style", styleNS); #endif styleEl->set_attribute("name", "P", styleNS); styleEl->set_attribute("parent-style-name", "Standard", styleNS); // -- Page paragraphs for(int i = 0; i < pageCount; ++i) { if(hocrdocument->page(i)->isEnabled()) { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* styleEl = automaticStylesEl->add_child("style", styleNS); #else xmlpp::Element* styleEl = automaticStylesEl->add_child_element("style", styleNS); #endif styleEl->set_attribute("name", Glib::ustring::compose("PP%1", i), styleNS); styleEl->set_attribute("family", "paragraph", styleNS); styleEl->set_attribute("parent-style-name", "Standard", styleNS); styleEl->set_attribute("master-page-name", Glib::ustring::compose("MP%1", i), styleNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* paragraphPropertiesEl = styleEl->add_child("paragraph-properties", styleNS); #else xmlpp::Element* paragraphPropertiesEl = styleEl->add_child_element("paragraph-properties", styleNS); #endif paragraphPropertiesEl->set_attribute("break-before", "page", foNS); } } // -- Frame, absolutely positioned on page #ifdef HAVE_LIBXMLPP_2 styleEl = automaticStylesEl->add_child("style", styleNS); #else styleEl = automaticStylesEl->add_child_element("style", styleNS); #endif styleEl->set_attribute("name", "F", styleNS); styleEl->set_attribute("family", "graphic", styleNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* graphicPropertiesEl = styleEl->add_child("graphic-properties", styleNS); #else xmlpp::Element* graphicPropertiesEl = styleEl->add_child_element("graphic-properties", styleNS); #endif graphicPropertiesEl->set_attribute("stroke", "none", drawNS); graphicPropertiesEl->set_attribute("fill", "none", drawNS); graphicPropertiesEl->set_attribute("vertical-pos", "from-top", styleNS); graphicPropertiesEl->set_attribute("vertical-rel", "page", styleNS); graphicPropertiesEl->set_attribute("horizontal-pos", "from-left", styleNS); graphicPropertiesEl->set_attribute("horizontal-rel", "page", styleNS); graphicPropertiesEl->set_attribute("flow-with-text", "false", styleNS); // -- Text styles int counter = 0; std::map> fontStyles; for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { for(const HOCRItem* item : page->children()) { writeFontStyles(fontStyles, item, automaticStylesEl, counter); } } } // - Body #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* bodyEl = documentContentEl->add_child("body", officeNS); xmlpp::Element* textEl = bodyEl->add_child("text", officeNS); #else xmlpp::Element* bodyEl = documentContentEl->add_child_element("body", officeNS); xmlpp::Element* textEl = bodyEl->add_child_element("text", officeNS); #endif int pageCounter = 1; for(int i = 0; i < pageCount; ++i) { monitor.increaseProgress(); const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* pEl = textEl->add_child("p", textNS); #else xmlpp::Element* pEl = textEl->add_child_element("p", textNS); #endif pEl->set_attribute("style-name", Glib::ustring::compose("PP%1", i), textNS); for(const HOCRItem* item : page->children()) { printItem(pEl, item, pageCounter, page->resolution(), fontStyles, imageFiles); } ++pageCounter; } Glib::ustring data = doc.write_to_string(); zip_source* source = zip_source_buffer_from_data(fzip, data.c_str(), data.bytes()); if(zip_file_add(fzip, "content.xml", source, ZIP_FL_ENC_UTF_8) < 0) { zip_source_free(source); return false; } } return true; }, _("Exporting to ODT...")); MAIN->hideProgress(); zip_close(fzip); bool openAfterExport = ConfigSettings::get>("openafterexport")->getValue(); if(!success) { Utils::messageBox(Gtk::MESSAGE_WARNING, _("Export failed"), _("The ODT export failed: unable to write output file.")); } else if(openAfterExport) { Utils::openUri(Glib::filename_to_uri(outname)); } return success; } void HOCROdtExporter::writeImage(zip* fzip, std::map& images, const HOCRItem* item) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocr_graphic") { Cairo::RefPtr selection; Utils::runInMainThreadBlocking([&] { selection = getSelection(item->bbox()); }); gchar* guuid = g_uuid_string_random(); Glib::ustring uuid(guuid); g_free(guuid); uuid = uuid.substr(1, uuid.length() - 2); // Remove {} Glib::ustring filename = Glib::ustring::compose("Pictures/%1.png", uuid); Glib::RefPtr pngbytes = Glib::ByteArray::create(); selection->write_to_png_stream([&](const unsigned char* data, unsigned int length)->Cairo::ErrorStatus { pngbytes->append(data, length); return CAIRO_STATUS_SUCCESS; }); zip_source* source = zip_source_buffer_from_data(fzip, pngbytes->get_data(), pngbytes->size()); if(zip_file_add(fzip, filename.c_str(), source, ZIP_FL_ENC_UTF_8) < 0) { zip_source_free(source); return; } images.insert(std::make_pair(item, filename)); } } void HOCROdtExporter::writeFontFaceDecls(std::set& families, const HOCRItem* item, xmlpp::Element* parentEl) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocrx_word") { Glib::ustring fontFamily = item->fontFamily(); if(families.find(fontFamily) == families.end()) { if(!fontFamily.empty()) { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* fontFaceEl = parentEl->add_child("font-face", styleNS); #else xmlpp::Element* fontFaceEl = parentEl->add_child_element("font-face", styleNS); #endif fontFaceEl->set_attribute("name", fontFamily, styleNS); fontFaceEl->set_attribute("font-family", fontFamily, svgNS); } families.insert(fontFamily); } } else { for(const HOCRItem* child : item->children()) { writeFontFaceDecls(families, child, parentEl); } } } void HOCROdtExporter::writeFontStyles(std::map>& styles, const HOCRItem* item, xmlpp::Element* parentEl, int& counter) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocrx_word") { Glib::ustring fontKey = item->fontFamily() + (item->fontBold() ? "@bold" : "") + (item->fontItalic() ? "@italic" : ""); if(styles.find(fontKey) == styles.end() || styles[fontKey].find(item->fontSize()) == styles[fontKey].end()) { Glib::ustring styleName = Glib::ustring::compose("T%1", ++counter); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* styleEl = parentEl->add_child("style", styleNS); #else xmlpp::Element* styleEl = parentEl->add_child_element("style", styleNS); #endif styleEl->set_attribute("name", styleName, styleNS); styleEl->set_attribute("family", "text", styleNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* textPropertiesEl = styleEl->add_child("text-properties", styleNS); #else xmlpp::Element* textPropertiesEl = styleEl->add_child_element("text-properties", styleNS); #endif textPropertiesEl->set_attribute("font-name", item->fontFamily(), styleNS); textPropertiesEl->set_attribute("font-size", Glib::ustring::compose("%1pt", item->fontSize()), foNS); if(item->fontBold()) { textPropertiesEl->set_attribute("font-weight", "bold", foNS); } if(item->fontItalic()) { textPropertiesEl->set_attribute("font-style", "italic", foNS); } styles[fontKey].insert(std::make_pair(item->fontSize(), styleName)); } } else { for(const HOCRItem* child : item->children()) { writeFontStyles(styles, child, parentEl, counter); } } } void HOCROdtExporter::printItem(xmlpp::Element* parentEl, const HOCRItem* item, int pageNr, int dpi, std::map>& fontStyleNames, std::map& images) { if(!item->isEnabled()) { return; } Glib::ustring itemClass = item->itemClass(); const Geometry::Rectangle& bbox = item->bbox(); if(itemClass == "ocr_graphic") { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* frameEl = parentEl->add_child("frame", drawNS); #else xmlpp::Element* frameEl = parentEl->add_child_element("frame", drawNS); #endif frameEl->set_attribute("style-name", "F", drawNS); frameEl->set_attribute("anchor-type", "page", textNS); frameEl->set_attribute("anchor-page-number", Glib::ustring::format(std::fixed, std::setprecision(0), pageNr), textNS); frameEl->set_attribute("x", Glib::ustring::compose("%1in", bbox.x / double(dpi)), svgNS); frameEl->set_attribute("y", Glib::ustring::compose("%1in", bbox.y / double(dpi)), svgNS); frameEl->set_attribute("width", Glib::ustring::compose("%1in", bbox.width / double(dpi)), svgNS); frameEl->set_attribute("height", Glib::ustring::compose("%1in", bbox.height / double(dpi)), svgNS); frameEl->set_attribute("z-index", "0", drawNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* imageEl = frameEl->add_child("image", drawNS); #else xmlpp::Element* imageEl = frameEl->add_child_element("image", drawNS); #endif imageEl->set_attribute("href", images[item], xlinkNS); imageEl->set_attribute("type", "simple", xlinkNS); imageEl->set_attribute("show", "embed", xlinkNS); } else if(itemClass == "ocr_par") { #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* frameEl = parentEl->add_child("frame", drawNS); #else xmlpp::Element* frameEl = parentEl->add_child_element("frame", drawNS); #endif frameEl->set_attribute("style-name", "F", drawNS); frameEl->set_attribute("anchor-type", "page", textNS); frameEl->set_attribute("anchor-page-number", Glib::ustring::format(std::fixed, std::setprecision(0), pageNr), textNS); frameEl->set_attribute("x", Glib::ustring::compose("%1in", bbox.x / double(dpi)), svgNS); frameEl->set_attribute("y", Glib::ustring::compose("%1in", bbox.y / double(dpi)), svgNS); frameEl->set_attribute("width", Glib::ustring::compose("%1in", bbox.width / double(dpi)), svgNS); frameEl->set_attribute("height", Glib::ustring::compose("%1in", bbox.height / double(dpi)), svgNS); frameEl->set_attribute("z-index", "1", drawNS); #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* textBoxEl = frameEl->add_child("text-box", drawNS); xmlpp::Element* ppEl = textBoxEl->add_child("p", textNS); #else xmlpp::Element* textBoxEl = frameEl->add_child_element("text-box", drawNS); xmlpp::Element* ppEl = textBoxEl->add_child_element("p", textNS); #endif ppEl->set_attribute("style-name", "P", textNS); for(const HOCRItem* child : item->children()) { printItem(ppEl, child, pageNr, dpi, fontStyleNames, images); } } else if(itemClass == "ocr_line") { const HOCRItem* firstWord = nullptr; int iChild = 0, nChilds = item->children().size(); for(; iChild < nChilds; ++iChild) { const HOCRItem* child = item->children()[iChild]; if(child->isEnabled()) { firstWord = child; break; } } if(!firstWord) { return; } Glib::ustring fontKey = firstWord->fontFamily() + (firstWord->fontBold() ? "@bold" : "") + (firstWord->fontItalic() ? "@italic" : ""); Glib::ustring currentFontStyleName = fontStyleNames[fontKey][firstWord->fontSize()]; #ifdef HAVE_LIBXMLPP_2 xmlpp::Element* spanEl = parentEl->add_child("span", textNS); #else xmlpp::Element* spanEl = parentEl->add_child_element("span", textNS); #endif spanEl->set_attribute("style-name", currentFontStyleName, textNS); spanEl->add_child_text(firstWord->text()); ++iChild; for(; iChild < nChilds; ++iChild) { const HOCRItem* child = item->children()[iChild]; if(!child->isEnabled()) { continue; } fontKey = child->fontFamily() + (child->fontBold() ? "@bold" : "") + (child->fontItalic() ? "@italic" : ""); Glib::ustring fontStyleName = fontStyleNames[fontKey][child->fontSize()]; if(fontStyleName != currentFontStyleName) { currentFontStyleName = fontStyleName; #ifdef HAVE_LIBXMLPP_2 spanEl = parentEl->add_child("span", textNS); #else spanEl = parentEl->add_child_element("span", textNS); #endif spanEl->set_attribute("style-name", currentFontStyleName, textNS); } spanEl->add_child_text(" "); spanEl->add_child_text(child->text()); } #ifdef HAVE_LIBXMLPP_2 parentEl->add_child("line-break", textNS); #else parentEl->add_child_element("line-break", textNS); #endif } else { for(const HOCRItem* child : item->children()) { printItem(parentEl, child, pageNr, dpi, fontStyleNames, images); } } } bool HOCROdtExporter::setSource(const Glib::ustring& sourceFile, int page, int dpi, double angle) { Glib::RefPtr file = Gio::File::create_for_path(sourceFile); if(MAIN->getSourceManager()->addSource(file, true)) { MAIN->getDisplayer()->setup(&page, &dpi, &angle); return true; } else { return false; } } Cairo::RefPtr HOCROdtExporter::getSelection(const Geometry::Rectangle& bbox) { Displayer* displayer = MAIN->getDisplayer(); Geometry::Rectangle sceneRect = displayer->getSceneBoundingRect(); return displayer->getImage(bbox.translate(sceneRect.x, sceneRect.y)); } gImageReader-3.4.0/gtk/src/hocr/HOCROdtExporter.hh000066400000000000000000000036701417507262200216310ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCROdtExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRODTEXPORTER_HH #define HOCRODTEXPORTER_HH #include "common.hh" #include "Geometry.hh" #include "HOCRExporter.hh" class HOCRItem; namespace xmlpp { class Element; } struct zip; class HOCROdtExporter : public HOCRExporter { public: bool run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* settings = nullptr) override; private: void writeImage(zip* fzip, std::map& images, const HOCRItem* item); void writeFontFaceDecls(std::set& families, const HOCRItem* item, xmlpp::Element* parentEl); void writeFontStyles(std::map >& styles, const HOCRItem* item, xmlpp::Element* parentEl, int& counter); void printItem(xmlpp::Element* parentEl, const HOCRItem* item, int pageNr, int dpi, std::map >& fontStyleNames, std::map& images); bool setSource(const Glib::ustring& sourceFile, int page, int dpi, double angle); Cairo::RefPtr getSelection(const Geometry::Rectangle& bbox); }; #endif // HOCRODTEXPORTER_HH gImageReader-3.4.0/gtk/src/hocr/HOCRPdfExportWidget.cc000066400000000000000000000523531417507262200224210ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExportWidget.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayerToolHOCR.hh" #include "HOCRDocument.hh" #include "HOCRPdfExportWidget.hh" #include "HOCRPdfExporter.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "PaperSize.hh" #include "Utils.hh" HOCRPdfExportWidget::HOCRPdfExportWidget(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage) : m_displayerTool(displayerTool), m_document(hocrdocument), m_previewPage(hocrpage) { ui.builder->get_widget_derived("comboOverridefontfamily", m_comboOverrideFont); ui.builder->get_widget_derived("comboFallbackfontfamily", m_comboFallbackFont); ui.setupUi(); // Image format combo Glib::RefPtr formatComboModel = Gtk::ListStore::create(m_formatComboCols); ui.comboImageformat->set_model(formatComboModel); Gtk::TreeModel::Row row = *(formatComboModel->append()); row[m_formatComboCols.format] = Image::Format_RGB24; row[m_formatComboCols.label] = _("Color"); row = *(formatComboModel->append()); row[m_formatComboCols.format] = Image::Format_Gray8; row[m_formatComboCols.label] = _("Grayscale"); row = *(formatComboModel->append()); row[m_formatComboCols.format] = Image::Format_Mono; row[m_formatComboCols.label] = _("Monochrome"); ui.comboImageformat->pack_start(m_formatComboCols.label); ui.comboImageformat->set_active(-1); // Dithering algorithm combo Glib::RefPtr ditheringComboModel = Gtk::ListStore::create(m_ditheringComboCols); ui.comboDithering->set_model(ditheringComboModel); row = *(ditheringComboModel->append()); row[m_ditheringComboCols.conversionFlags] = Image::ThresholdDithering; row[m_ditheringComboCols.label] = _("Threshold (closest color)"); row = *(ditheringComboModel->append()); row[m_ditheringComboCols.conversionFlags] = Image::DiffuseDithering; row[m_ditheringComboCols.label] = _("Diffuse"); ui.comboDithering->pack_start(m_ditheringComboCols.label); ui.comboDithering->set_active(-1); // Image compression combo Glib::RefPtr compressionModel = Gtk::ListStore::create(m_compressionComboCols); ui.comboCompression->set_model(compressionModel); row = *(compressionModel->append()); row[m_compressionComboCols.mode] = HOCRPdfExporter::PDFSettings::CompressZip; row[m_compressionComboCols.label] = _("Zip (lossless)"); row[m_compressionComboCols.sensitive] = true; row = *(compressionModel->append()); row[m_compressionComboCols.mode] = HOCRPdfExporter::PDFSettings::CompressFax4; row[m_compressionComboCols.label] = _("CCITT Group 4 (lossless)"); row[m_compressionComboCols.sensitive] = true; row = *(compressionModel->append()); row[m_compressionComboCols.mode] = HOCRPdfExporter::PDFSettings::CompressJpeg; row[m_compressionComboCols.label] = _("Jpeg (lossy)"); row[m_compressionComboCols.sensitive] = true; ui.comboCompression->pack_start(m_compressionComboCols.label); ui.comboCompression->set_active(-1); Gtk::CellRendererText* compressionTextRenderer = dynamic_cast(ui.comboCompression->get_cells()[0]); if(compressionTextRenderer) { ui.comboCompression->add_attribute(compressionTextRenderer->property_sensitive(), m_compressionComboCols.sensitive); } // Paper format combo Glib::RefPtr paperFormatComboModel = Gtk::ListStore::create(m_paperFormatComboCols); ui.comboPaperFormat->set_model(paperFormatComboModel); row = *(paperFormatComboModel->append()); row[m_paperFormatComboCols.label] = _("Same as source"); row[m_paperFormatComboCols.format] = "source"; row = *(paperFormatComboModel->append()); row[m_paperFormatComboCols.label] = _("Custom"); row[m_paperFormatComboCols.format] = "custom"; for(const auto& size : PaperSize::paperSizes) { row = *(paperFormatComboModel->append()); row[m_paperFormatComboCols.label] = size.first; row[m_paperFormatComboCols.format] = size.first; } ui.comboPaperFormat->pack_start(m_paperFormatComboCols.label); ui.comboPaperFormat->set_active(-1); // Paper size combo Glib::RefPtr sizeUnitComboModel = Gtk::ListStore::create(m_sizeUnitComboCols); ui.comboPaperSizeUnit->set_model(sizeUnitComboModel); row = *(sizeUnitComboModel->append()); row[m_sizeUnitComboCols.label] = _("cm"); row[m_sizeUnitComboCols.unit] = static_cast(PaperSize::cm); row = *(sizeUnitComboModel->append()); row[m_sizeUnitComboCols.label] = _("in"); row[m_sizeUnitComboCols.unit] = static_cast(PaperSize::inch); ui.comboPaperSizeUnit->pack_start(m_sizeUnitComboCols.label); ui.comboPaperSizeUnit->set_active(0); Glib::RefPtr pdfVersionModel = Gtk::ListStore::create(m_pdfVersionComboCols); ui.comboPdfVersion->set_model(pdfVersionModel); row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.0"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.1"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_1; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.2"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_2; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.3"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_3; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.4"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_4; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.5"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_5; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.6"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_6; row = *(pdfVersionModel->append()); row[m_pdfVersionComboCols.label] = "1.7"; row[m_pdfVersionComboCols.version] = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7; ui.comboPdfVersion->pack_start(m_pdfVersionComboCols.label); ui.comboPdfVersion->set_active(-1); CONNECT(ui.comboMode, changed, [this] { updatePreview(); }); CONNECT(ui.comboImageformat, changed, [this] { imageFormatChanged(); updatePreview(); }); CONNECT(ui.comboDithering, changed, [this] { updatePreview(); }); CONNECT(ui.comboCompression, changed, [this] { imageCompressionChanged(); }); CONNECT(ui.spinQuality, value_changed, [this] { updatePreview(); }); CONNECT(ui.checkboxOverridefontfamily, toggled, [this] { m_comboOverrideFont->set_sensitive(ui.checkboxOverridefontfamily->get_active()); m_comboFallbackFont->set_sensitive(!ui.checkboxOverridefontfamily->get_active()); ui.labelFallbackfontfamily->set_sensitive(!ui.checkboxOverridefontfamily->get_active()); updatePreview(); }); CONNECT(m_comboFallbackFont, font_changed, [this](Glib::ustring) { updatePreview(); }); CONNECT(m_comboOverrideFont, font_changed, [this](Glib::ustring) { updatePreview(); }); CONNECT(ui.checkboxOverridefontsize, toggled, [this] { ui.spinOverridefontsize->set_sensitive(ui.checkboxOverridefontsize->get_active()); ui.spinFontscale->set_sensitive(!ui.checkboxOverridefontsize->get_active()); ui.labelFontscale->set_sensitive(!ui.checkboxOverridefontsize->get_active()); updatePreview(); }); CONNECT(ui.spinOverridefontsize, value_changed, [this] { updatePreview(); }); CONNECT(ui.spinFontscale, value_changed, [this] { updatePreview(); }); CONNECT(ui.checkboxUniformlinespacing, toggled, [this] { ui.labelPreserve->set_sensitive(ui.checkboxUniformlinespacing->get_active()); ui.spinPreserve->set_sensitive(ui.checkboxUniformlinespacing->get_active()); ui.labelPreserve2->set_sensitive(ui.checkboxUniformlinespacing->get_active()); updatePreview(); }); CONNECT(ui.spinPreserve, value_changed, [this] { updatePreview(); }); CONNECT(ui.entryEncryptionPassword, changed, [this] { updateValid(); }); CONNECT(ui.entryEncryptionConfirm, changed, [this] { updateValid(); }); CONNECT(ui.checkboxPreview, toggled, [this] { updatePreview(); }); CONNECT(ui.comboPaperFormat, changed, [this] { paperSizeChanged(); }); CONNECT(ui.comboPaperSizeUnit, changed, [this] { paperSizeChanged(); }); m_connLandscape = CONNECT(ui.buttonLandscape, toggled, [this] { paperOrientationChanged(true); }); m_connPortrait = CONNECT(ui.buttonPortrait, toggled, [this] { paperOrientationChanged(false); }); CONNECT(ui.entryPaperWidth, changed, [this] { paperSizeChanged(); }); CONNECT(ui.entryPaperHeight, changed, [this] { paperSizeChanged(); }); CONNECT(ui.buttonImportFromSource, clicked, [this] { importMetadataFromSource(); }); ADD_SETTING(ComboSetting("pdfexportmode", ui.comboMode)); ADD_SETTING(SpinSetting("pdfimagecompressionquality", ui.spinQuality)); ADD_SETTING(ComboSetting("pdfimagecompression", ui.comboCompression)); ADD_SETTING(ComboSetting("pdfimageformat", ui.comboImageformat)); ADD_SETTING(ComboSetting("pdfimagedithering", ui.comboDithering)); ADD_SETTING(SpinSetting("pdfimagedpi", ui.spinDpi)); ADD_SETTING(SwitchSettingT("pdfoverridefontfamily", ui.checkboxOverridefontfamily)); ADD_SETTING(FontComboSetting("pdffontfamily", m_comboOverrideFont)); ADD_SETTING(FontComboSetting("pdffallbackfontfamily", m_comboFallbackFont)); ADD_SETTING(SwitchSettingT("pdfoverridefontsizes", ui.checkboxOverridefontsize)); ADD_SETTING(SpinSetting("pdffontsize", ui.spinOverridefontsize)); ADD_SETTING(SpinSetting("pdffontscale", ui.spinFontscale)); ADD_SETTING(SwitchSettingT("pdfuniformizelinespacing", ui.checkboxUniformlinespacing)); ADD_SETTING(SwitchSettingT("pdfsanitizehyphens", ui.checkboxSanitizeHyphens)); ADD_SETTING(SpinSetting("pdfpreservespaces", ui.spinPreserve)); ADD_SETTING(SwitchSettingT("pdfpreview", ui.checkboxPreview)); ADD_SETTING(ComboSetting("pdfexportpapersize", ui.comboPaperFormat)); ADD_SETTING(EntrySetting("pdfexportpaperwidth", ui.entryPaperWidth)); ADD_SETTING(EntrySetting("pdfexportpaperheight", ui.entryPaperHeight)); ADD_SETTING(ComboSetting("pdfexportpapersizeunit", ui.comboPaperSizeUnit)); ADD_SETTING(SwitchSettingT("pdfexportpaperlandscape", ui.buttonLandscape)); ADD_SETTING(EntrySetting("pdfexportinfoauthor", ui.entryMetadataAuthor)); ADD_SETTING(EntrySetting("pdfexportinfoproducer", ui.entryMetadataProducer)); ADD_SETTING(EntrySetting("pdfexportinfocreator", ui.entryMetadataCreator)); ADD_SETTING(ComboSetting("pdfexportpdfversion", ui.comboPdfVersion)); #if !defined(TESSERACT_VERSION) || TESSERACT_VERSION < TESSERACT_MAKE_VERSION(3,04,00) checkboxFontFamily->set_active(true); checkboxFontFamily->set_sensitive(true); checkboxFontSize->set_active(true); checkboxFontSize->set_sensitive(true); #endif m_preview = new DisplayerImageItem(); m_preview->setZIndex(2); updatePreview(); MAIN->getDisplayer()->addItem(m_preview); } HOCRPdfExportWidget::~HOCRPdfExportWidget() { MAIN->getDisplayer()->removeItem(m_preview); delete m_preview; } void HOCRPdfExportWidget::setPreviewPage(const HOCRDocument* hocrdocument, const HOCRPage* hocrpage) { m_document = hocrdocument; m_previewPage = hocrpage; updatePreview(); } HOCRPdfExporter::PDFSettings HOCRPdfExportWidget::getPdfSettings() const { HOCRPdfExporter::PDFSettings pdfSettings; pdfSettings.colorFormat = (*ui.comboImageformat->get_active())[m_formatComboCols.format]; pdfSettings.conversionFlags = pdfSettings.colorFormat == Image::Format_Mono ? (*ui.comboDithering->get_active())[m_ditheringComboCols.conversionFlags] : Image::AutoColor; pdfSettings.compression = (*ui.comboCompression->get_active())[m_compressionComboCols.mode]; pdfSettings.compressionQuality = ui.spinQuality->get_value(); pdfSettings.fontFamily = ui.checkboxOverridefontfamily->get_active() ? m_comboOverrideFont->get_active_font() : ""; pdfSettings.fontSize = ui.checkboxOverridefontfamily->get_active() ? ui.spinOverridefontsize->get_value() : -1; pdfSettings.fallbackFontFamily = ui.checkboxOverridefontfamily->get_active() ? m_comboOverrideFont->get_active_font() : m_comboFallbackFont->get_active_font(); pdfSettings.fallbackFontSize = ui.checkboxOverridefontfamily->get_active() ? ui.spinOverridefontsize->get_value() : -1; pdfSettings.uniformizeLineSpacing = ui.checkboxUniformlinespacing->get_active(); pdfSettings.preserveSpaceWidth = ui.spinPreserve->get_value(); pdfSettings.overlay = ui.comboMode->get_active_row_number() == 1; pdfSettings.detectedFontScaling = ui.spinFontscale->get_value() / 100.; pdfSettings.sanitizeHyphens = ui.checkboxSanitizeHyphens->get_active(); pdfSettings.assumedImageDpi = ui.spinBoxPaperSizeDpi->get_value_as_int(); pdfSettings.outputDpi = ui.spinDpi->get_value_as_int(); pdfSettings.paperSize = (*ui.comboPaperFormat->get_active())[m_paperFormatComboCols.format]; pdfSettings.paperSizeLandscape = ui.buttonLandscape->get_active(); pdfSettings.paperWidthIn = std::atof(ui.entryPaperWidth->get_text().c_str()); pdfSettings.paperHeightIn = std::atof(ui.entryPaperHeight->get_text().c_str()); PaperSize::Unit unit = static_cast(static_cast((*ui.comboPaperSizeUnit->get_active())[m_sizeUnitComboCols.unit])); if(unit == PaperSize::cm) { pdfSettings.paperWidthIn /= PaperSize::CMtoInch; pdfSettings.paperHeightIn /= PaperSize::CMtoInch; } pdfSettings.version = static_cast(static_cast((*ui.comboPdfVersion->get_active())[m_pdfVersionComboCols.version])); pdfSettings.password = ui.entryEncryptionPassword->get_text(); pdfSettings.producer = ui.entryMetadataProducer->get_text().c_str(); pdfSettings.creator = ui.entryMetadataCreator->get_text().c_str(); pdfSettings.title = ui.entryMetadataTitle->get_text().c_str(); pdfSettings.subject = ui.entryMetadataSubject->get_text().c_str(); pdfSettings.keywords = ui.entryMetadataKeywords->get_text().c_str(); pdfSettings.author = ui.entryMetadataAuthor->get_text().c_str(); return pdfSettings; } void HOCRPdfExportWidget::updatePreview() { if(!m_preview) { return; } m_preview->setVisible(ui.checkboxPreview->get_active()); if(!m_document || m_document->pageCount() == 0 || !ui.checkboxPreview->get_active()) { return; } const HOCRPage* page = m_previewPage; Geometry::Rectangle bbox = page->bbox(); int pageDpi = page->resolution(); HOCRPdfExporter::PDFSettings pdfSettings = getPdfSettings(); pdfSettings.detectedFontScaling *= (pageDpi / 72.); pdfSettings.fontSize *= (pageDpi / 72.); Glib::ustring defaultFont = ui.checkboxOverridefontfamily->get_active() ? m_comboOverrideFont->get_active_font() : m_comboFallbackFont->get_active_font(); Cairo::RefPtr image = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, bbox.width, bbox.height); Cairo::RefPtr context = Cairo::Context::create(image); HOCRCairoPdfPrinter pdfPrinter(context, defaultFont); if(!pdfSettings.fontFamily.empty()) { pdfPrinter.setFontFamily(pdfSettings.fontFamily, false, false); } if(pdfSettings.fontSize != -1) { pdfPrinter.setFontSize(pdfSettings.fontSize * pageDpi / 72.); } if(pdfSettings.overlay) { pdfPrinter.drawImage(bbox, m_displayerTool->getSelection(bbox), pdfSettings); context->save(); context->rectangle(0, 0, image->get_width(), image->get_height()); context->set_source_rgba(1., 1., 1., 0.5); context->fill(); context->restore(); } else { context->save(); context->rectangle(0, 0, image->get_width(), image->get_height()); context->set_source_rgba(1., 1., 1., 1.); context->fill(); context->restore(); } pdfPrinter.printChildren(page, pdfSettings, 1.); m_preview->setImage(image); m_preview->setRect(Geometry::Rectangle(-0.5 * image->get_width(), -0.5 * image->get_height(), image->get_width(), image->get_height())); } void HOCRPdfExportWidget::imageFormatChanged() { Image::Format format = (*ui.comboImageformat->get_active())[m_formatComboCols.format]; Glib::RefPtr compressionStore = Glib::RefPtr::cast_static(ui.comboCompression->get_model()); bool isMono = format == Image::Format_Mono; if(isMono && (*ui.comboCompression->get_active())[m_compressionComboCols.mode] == HOCRPdfExporter::PDFSettings::CompressJpeg) { ui.comboCompression->set_active(HOCRPdfExporter::PDFSettings::CompressZip); } else if(!isMono && (*ui.comboCompression->get_active())[m_compressionComboCols.mode] == HOCRPdfExporter::PDFSettings::CompressFax4) { ui.comboCompression->set_active(HOCRPdfExporter::PDFSettings::CompressZip); } (*compressionStore->children()[HOCRPdfExporter::PDFSettings::CompressFax4])[m_compressionComboCols.sensitive] = isMono; (*compressionStore->children()[HOCRPdfExporter::PDFSettings::CompressJpeg])[m_compressionComboCols.sensitive] = !isMono; ui.labelDithering->set_sensitive(isMono); ui.comboDithering->set_sensitive(isMono); } void HOCRPdfExportWidget::imageCompressionChanged() { HOCRPdfExporter::PDFSettings::Compression compression = (*ui.comboCompression->get_active())[m_compressionComboCols.mode]; bool jpegCompression = compression == HOCRPdfExporter::PDFSettings::CompressJpeg; ui.spinQuality->set_sensitive(jpegCompression); ui.labelQuality->set_sensitive(jpegCompression); } void HOCRPdfExportWidget::paperOrientationChanged(bool landscape) { m_connPortrait.block(true); m_connLandscape.block(true); ui.buttonPortrait->set_active(!landscape); ui.buttonLandscape->set_active(landscape); m_connPortrait.block(false); m_connLandscape.block(false); paperSizeChanged(); } void HOCRPdfExportWidget::paperSizeChanged() { std::string paperSize = (*ui.comboPaperFormat->get_active())[m_paperFormatComboCols.format]; if(paperSize == "custom") { ui.entryPaperWidth->set_sensitive(true); ui.entryPaperHeight->set_sensitive(true); ui.boxPaperSize->set_visible(true); ui.boxPaperOrientation->set_visible(false); ui.boxPaperSizeDpi->set_visible(false); } else if(paperSize == "source") { ui.entryPaperWidth->set_sensitive(true); ui.entryPaperHeight->set_sensitive(true); ui.boxPaperSize->set_visible(false); ui.boxPaperOrientation->set_visible(false); ui.boxPaperSizeDpi->set_visible(true); } else { ui.boxPaperSize->set_visible(true); ui.boxPaperOrientation->set_visible(true); ui.boxPaperSizeDpi->set_visible(false); ui.entryPaperWidth->set_sensitive(false); ui.entryPaperHeight->set_sensitive(false); PaperSize::Unit unit = static_cast(static_cast((*ui.comboPaperSizeUnit->get_active())[m_sizeUnitComboCols.unit])); auto outputPaperSize = PaperSize::getSize(unit, paperSize, ui.buttonLandscape->get_active()); ui.entryPaperWidth->set_text(Glib::ustring::format(std::fixed, std::setprecision(1), outputPaperSize.width)); ui.entryPaperHeight->set_text(Glib::ustring::format(std::fixed, std::setprecision(1), outputPaperSize.height)); } updateValid(); } void HOCRPdfExportWidget::updateValid() { bool valid = true; // Passwords must match if(ui.entryEncryptionPassword->get_text() == ui.entryEncryptionConfirm->get_text()) { Utils::clear_error_state(ui.entryEncryptionConfirm); } else { Utils::set_error_state(ui.entryEncryptionConfirm); valid = false; } // In custom paper size mode, size must be specified std::string paperSize = (*ui.comboPaperFormat->get_active())[m_paperFormatComboCols.format]; Utils::clear_error_state(ui.entryPaperWidth); Utils::clear_error_state(ui.entryPaperHeight); if(paperSize == "custom") { if(ui.entryPaperWidth->get_text().empty()) { Utils::set_error_state(ui.entryPaperWidth); valid = false; } if(ui.entryPaperHeight->get_text().empty()) { Utils::set_error_state(ui.entryPaperHeight); valid = false; } } m_signal_valid_changed.emit(valid); } void HOCRPdfExportWidget::importMetadataFromSource() { std::vector sources = MAIN->getSourceManager()->getSelectedSources(); if(!sources.empty()) { Source* source = sources.front(); ui.entryMetadataAuthor->set_text(source->author); ui.entryMetadataCreator->set_text(source->creator); ui.entryMetadataKeywords->set_text(source->keywords); ui.entryMetadataTitle->set_text(source->title); ui.entryMetadataSubject->set_text(source->subject); ui.entryMetadataProducer->set_text(source->producer); HOCRPdfExporter::PDFSettings::Version sourcePdfVersion = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7; if(source->pdfVersionMajor == 1 && source->pdfVersionMinor <= 7) { sourcePdfVersion = static_cast(HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0 + source->pdfVersionMinor); } ui.comboPdfVersion->set_active(sourcePdfVersion); } } gImageReader-3.4.0/gtk/src/hocr/HOCRPdfExportWidget.hh000066400000000000000000000072211417507262200224250ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExportWidget.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPDFEXPORTWIDGET_HH #define HOCRPDFEXPORTWIDGET_HH #include "HOCRPdfExporter.hh" #include "ui_PdfExportWidget.hh" class DisplayerToolHOCR; class HOCRDocument; class HOCRPage; class HOCRPdfExportWidget { public: HOCRPdfExportWidget(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument = nullptr, const HOCRPage* hocrpage = nullptr); ~HOCRPdfExportWidget(); void setPreviewPage(const HOCRDocument* hocrdocument, const HOCRPage* hocrpage); HOCRPdfExporter::PDFSettings getPdfSettings() const; Gtk::Widget* getWidget() const { return ui.pdfExportWidget; } sigc::signal signal_validChanged() const { return m_signal_valid_changed; } private: ClassData m_classdata; Ui::PdfExportWidget ui; DisplayerImageItem* m_preview = nullptr; DisplayerToolHOCR* m_displayerTool; const HOCRDocument* m_document = nullptr; const HOCRPage* m_previewPage; FontComboBox* m_comboOverrideFont; FontComboBox* m_comboFallbackFont; sigc::connection m_connPortrait; sigc::connection m_connLandscape; sigc::signal m_signal_valid_changed; struct PaperFormatComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn label; Gtk::TreeModelColumn format; PaperFormatComboColums() { add(label); add(format); } } m_paperFormatComboCols; struct SizeUnitComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn label; Gtk::TreeModelColumn unit; SizeUnitComboColums() { add(label); add(unit); } } m_sizeUnitComboCols; struct FormatComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn format; Gtk::TreeModelColumn label; FormatComboColums() { add(format); add(label); } } m_formatComboCols; struct DitheringComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn conversionFlags; Gtk::TreeModelColumn label; DitheringComboColums() { add(conversionFlags); add(label); } } m_ditheringComboCols; struct CompressionComboColums : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn mode; Gtk::TreeModelColumn label; Gtk::TreeModelColumn sensitive; CompressionComboColums() { add(mode); add(label); add(sensitive); } } m_compressionComboCols; struct PdfVersionComboCols : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn label; Gtk::TreeModelColumn version; PdfVersionComboCols() { add(label); add(version); } } m_pdfVersionComboCols; void importMetadataFromSource(); void imageFormatChanged(); void imageCompressionChanged(); void paperOrientationChanged(bool landscape); void paperSizeChanged(); void updatePreview(); void updateValid(); }; #endif // HOCRPDFEXPORTWIDGET_HH gImageReader-3.4.0/gtk/src/hocr/HOCRPdfExporter.cc000066400000000000000000000567231417507262200216110ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "CCITTFax4Encoder.hh" #include "ConfigSettings.hh" #include "Displayer.hh" #include "HOCRDocument.hh" #include "HOCRPdfExporter.hh" #include "HOCRPdfExportWidget.hh" #include "MainWindow.hh" #include "PaperSize.hh" #include "SourceManager.hh" #include "Utils.hh" bool HOCRPdfExporter::run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* settings) { const PDFSettings* pdfSettings = static_cast(settings); int pageCount = hocrdocument->pageCount(); Glib::ustring errMsg; MainWindow::ProgressMonitor monitor(pageCount); MAIN->showProgress(&monitor); double pageWidth, pageHeight; // Page dimensions are in points: 1 in = 72 pt if(pdfSettings->paperSize == "custom") { pageWidth = pdfSettings->paperWidthIn * 72.0; pageHeight = pdfSettings->paperHeightIn * 72.0; } else if (pdfSettings->paperSize != "source") { auto inchSize = PaperSize::getSize(PaperSize::inch, pdfSettings->paperSize, pdfSettings->paperSizeLandscape); pageWidth = inchSize.width * 72.0; pageHeight = inchSize.height * 72.0; } HOCRPdfPrinter* painter = HOCRPoDoFoPdfPrinter::create(outname, *pdfSettings, pdfSettings->fallbackFontFamily, pdfSettings->fallbackFontSize, errMsg); bool success = Utils::busyTask([&] { for(int i = 0; i < pageCount; ++i) { if(monitor.cancelled()) { errMsg = _("The operation was cancelled"); return false; } const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { Geometry::Rectangle bbox = page->bbox(); Glib::ustring sourceFile = page->sourceFile(); // If the source file is an image, its "resolution" is actually just the scale factor that was used for recognizing. bool isImage = Glib::ustring(sourceFile.substr(sourceFile.length() - 4)).lowercase() != ".pdf" && Glib::ustring(sourceFile.substr(sourceFile.length() - 5)).lowercase() != ".djvu"; int sourceDpi = page->resolution(); int sourceScale = sourceDpi; if(isImage) { sourceDpi *= pdfSettings->assumedImageDpi / 100; } // [pt] = 72 * [in] // [in] = 1 / dpi * [px] // => [pt] = 72 / dpi * [px] double px2pt = (72.0 / sourceDpi); double imgScale = double(pdfSettings->outputDpi) / sourceDpi; bool success = false; if(isImage) { Utils::runInMainThreadBlocking([&] { success = setSource(page->sourceFile(), page->pageNr(), sourceScale * imgScale, page->angle()); }); } else { Utils::runInMainThreadBlocking([&] { success = setSource(page->sourceFile(), page->pageNr(), pdfSettings->outputDpi, page->angle()); }); } if(success) { if(pdfSettings->paperSize == "source") { pageWidth = bbox.width * px2pt; pageHeight = bbox.height * px2pt; } double offsetX = 0.5 * (pageWidth - bbox.width * px2pt); double offsetY = 0.5 * (pageHeight - bbox.height * px2pt); if(!painter->createPage(pageWidth, pageHeight, offsetX, offsetY, errMsg)) { return false; } painter->printChildren(page, *pdfSettings, px2pt, imgScale, double(sourceScale) / sourceDpi, true); if(pdfSettings->overlay) { Geometry::Rectangle scaledRect(imgScale * bbox.x, imgScale * bbox.y, imgScale * bbox.width, imgScale * bbox.height); Geometry::Rectangle printRect(bbox.x * px2pt, bbox.y * px2pt, bbox.width * px2pt, bbox.height * px2pt); Cairo::RefPtr selection; Utils::runInMainThreadBlocking([&] { selection = painter->getSelection(scaledRect); }); painter->drawImage(printRect, selection, *pdfSettings); } Utils::runInMainThreadBlocking([&] { setSource(page->sourceFile(), page->pageNr(), sourceScale, page->angle()); }); painter->finishPage(); } else { errMsg = Glib::ustring::compose(_("Failed to render page %1"), page->title()); return false; } } monitor.increaseProgress(); } return painter->finishDocument(errMsg); }, _("Exporting to PDF...")); delete painter; MAIN->hideProgress(); if(!success) { Utils::messageBox(Gtk::MESSAGE_WARNING, _("Export failed"), Glib::ustring::compose(_("The PDF export failed: %1."), errMsg)); } else { bool openAfterExport = ConfigSettings::get>("openafterexport")->getValue(); if(openAfterExport) { Utils::openUri(Glib::filename_to_uri(outname)); } } return success; } bool HOCRPdfExporter::setSource(const Glib::ustring& sourceFile, int page, int dpi, double angle) { Glib::RefPtr file = Gio::File::create_for_path(sourceFile); if(MAIN->getSourceManager()->addSource(file, true)) { MAIN->getDisplayer()->setup(&page, &dpi, &angle); return true; } else { return false; } } HOCRPdfPrinter::HOCRPdfPrinter() { Glib::RefPtr fontMap = Glib::wrap(pango_cairo_font_map_get_default(), true); for(const Glib::RefPtr& family : fontMap->list_families()) { m_fontFamilies.push_back(family->get_name()); } } void HOCRPdfPrinter::printChildren(const HOCRItem* item, const HOCRPdfExporter::PDFSettings& pdfSettings, double px2pu/*pixels to printer units*/, double imgScale, double fontScale, bool inThread) { if(!item->isEnabled()) { return; } if(pdfSettings.fontSize != -1) { setFontSize(pdfSettings.fontSize * fontScale); } Glib::ustring itemClass = item->itemClass(); Geometry::Rectangle itemRect = item->bbox(); int childCount = item->children().size(); if(itemClass == "ocr_par" && pdfSettings.uniformizeLineSpacing) { double yInc = double(itemRect.height) / childCount; double y = itemRect.y + yInc; std::pair baseline = childCount > 0 ? item->children()[0]->baseLine() : std::make_pair(0.0, 0.0); for(int iLine = 0; iLine < childCount; ++iLine, y += yInc) { HOCRItem* lineItem = item->children()[iLine]; int x = itemRect.x; int prevWordRight = itemRect.x; for(int iWord = 0, nWords = lineItem->children().size(); iWord < nWords; ++iWord) { HOCRItem* wordItem = lineItem->children()[iWord]; if(!wordItem->isEnabled()) { continue; } Geometry::Rectangle wordRect = wordItem->bbox(); setFontFamily(pdfSettings.fontFamily.empty() ? wordItem->fontFamily() : pdfSettings.fontFamily, wordItem->fontBold(), wordItem->fontItalic()); if(pdfSettings.fontSize == -1) { setFontSize(wordItem->fontSize() * pdfSettings.detectedFontScaling * fontScale); } // If distance from previous word is large, keep the space if(wordRect.x - prevWordRight > pdfSettings.preserveSpaceWidth * getAverageCharWidth() / px2pu) { x = wordRect.x; } prevWordRight = wordRect.x + wordRect.width; Glib::ustring text = wordItem->text(); if(iWord == nWords - 1 && pdfSettings.sanitizeHyphens) { text = Glib::Regex::create("[-\u2014]\\s*$")->replace(text, 0, "-", static_cast(0)); } double wordBaseline = (x - itemRect.x) * baseline.first + baseline.second; drawText(x * px2pu, (y + wordBaseline) * px2pu, text); x += getTextWidth(text + " ") / px2pu; } } } else if(itemClass == "ocr_line" && !pdfSettings.uniformizeLineSpacing) { std::pair baseline = item->baseLine(); for(int iWord = 0, nWords = item->children().size(); iWord < nWords; ++iWord) { HOCRItem* wordItem = item->children()[iWord]; if(!wordItem->isEnabled()) { continue; } Geometry::Rectangle wordRect = wordItem->bbox(); setFontFamily(pdfSettings.fontFamily.empty() ? wordItem->fontFamily() : pdfSettings.fontFamily, wordItem->fontBold(), wordItem->fontItalic()); if(pdfSettings.fontSize == -1) { setFontSize(wordItem->fontSize() * pdfSettings.detectedFontScaling * fontScale); } double y = itemRect.y + itemRect.height + (wordRect.x + 0.5 * wordRect.width - itemRect.x) * baseline.first + baseline.second; Glib::ustring text = wordItem->text(); if(iWord == nWords - 1 && pdfSettings.sanitizeHyphens) { text = Glib::Regex::create("[-\u2014]\\s*$")->replace(text, 0, "-", static_cast(0)); } drawText(wordRect.x * px2pu, y * px2pu, text); } } else if(itemClass == "ocr_graphic" && !pdfSettings.overlay) { Geometry::Rectangle scaledItemRect(imgScale * itemRect.x, imgScale * itemRect.y, imgScale * itemRect.width, imgScale * itemRect.height); Geometry::Rectangle printRect(itemRect.x * px2pu, itemRect.y * px2pu, itemRect.width * px2pu, itemRect.height * px2pu); Cairo::RefPtr selection; if(inThread) { Utils::runInMainThreadBlocking([&] { selection = getSelection(scaledItemRect); }); } else { selection = getSelection(scaledItemRect); } drawImage(printRect, selection, pdfSettings); } else { for(int i = 0, n = item->children().size(); i < n; ++i) { printChildren(item->children()[i], pdfSettings, px2pu, imgScale, fontScale, inThread); } } } Cairo::RefPtr HOCRPdfPrinter::getSelection(const Geometry::Rectangle& bbox) { Displayer* displayer = MAIN->getDisplayer(); Geometry::Rectangle sceneRect = displayer->getSceneBoundingRect(); return displayer->getImage(bbox.translate(sceneRect.x, sceneRect.y)); } HOCRCairoPdfPrinter::HOCRCairoPdfPrinter(Cairo::RefPtr context, const Glib::ustring& defaultFont) : m_context(context), m_defaultFont(defaultFont) { m_curFont = m_defaultFont; m_context->select_font_face(m_curFont, Cairo::FONT_SLANT_NORMAL, Cairo::FONT_WEIGHT_NORMAL); } void HOCRCairoPdfPrinter::setFontFamily(const Glib::ustring& family, bool bold, bool italic) { if(family != m_curFont) { if(std::find(m_fontFamilies.begin(), m_fontFamilies.end(), family) != m_fontFamilies.end()) { m_curFont = family; } else { m_curFont = m_defaultFont; } } m_context->select_font_face(m_curFont, italic ? Cairo::FONT_SLANT_ITALIC : Cairo::FONT_SLANT_NORMAL, bold ? Cairo::FONT_WEIGHT_BOLD : Cairo::FONT_WEIGHT_NORMAL); } void HOCRCairoPdfPrinter::setFontSize(double pointSize) { m_context->set_font_size(pointSize); } void HOCRCairoPdfPrinter::drawText(double x, double y, const Glib::ustring& text) { m_context->move_to(x, y/* - ext.y_bearing*/); m_context->show_text(text); } void HOCRCairoPdfPrinter::drawImage(const Geometry::Rectangle& bbox, const Cairo::RefPtr& image, const HOCRPdfExporter::PDFSettings& settings) { m_context->save(); m_context->move_to(bbox.x, bbox.y); if(settings.compression == HOCRPdfExporter::PDFSettings::CompressJpeg) { Image img(image, settings.colorFormat, settings.conversionFlags); uint8_t* buf = nullptr; unsigned long bufLen = 0; img.writeJpeg(settings.compressionQuality, buf, bufLen); Glib::RefPtr loader = Gdk::PixbufLoader::create("jpeg"); loader->write(buf, bufLen); loader->close(); std::free(buf); Gdk::Cairo::set_source_pixbuf(m_context, loader->get_pixbuf(), bbox.x, bbox.y); } else { Cairo::RefPtr img = Image::simulateFormat(image, settings.colorFormat, settings.conversionFlags); m_context->set_source(img, bbox.x, bbox.y); } m_context->paint(); m_context->restore(); } double HOCRCairoPdfPrinter::getAverageCharWidth() const { Cairo::TextExtents ext; m_context->get_text_extents("x ", ext); return ext.x_advance - ext.width; // spaces are ignored in width but counted in advance } double HOCRCairoPdfPrinter::getTextWidth(const Glib::ustring& text) const { Cairo::TextExtents ext; m_context->get_text_extents(text, ext); return ext.x_advance; } #if PODOFO_VERSION < PODOFO_MAKE_VERSION(0,9,3) namespace PoDoFo { class PdfImageCompat : public PoDoFo::PdfImage { using PdfImage::PdfImage; public: void SetImageDataRaw( unsigned int nWidth, unsigned int nHeight, unsigned int nBitsPerComponent, PdfInputStream* pStream ) { m_rRect.SetWidth( nWidth ); m_rRect.SetHeight( nHeight ); this->GetObject()->GetDictionary().AddKey( "Width", PdfVariant( static_cast(nWidth) ) ); this->GetObject()->GetDictionary().AddKey( "Height", PdfVariant( static_cast(nHeight) ) ); this->GetObject()->GetDictionary().AddKey( "BitsPerComponent", PdfVariant( static_cast(nBitsPerComponent) ) ); PdfVariant var; m_rRect.ToVariant( var ); this->GetObject()->GetDictionary().AddKey( "BBox", var ); this->GetObject()->GetStream()->SetRawData( pStream, -1 ); } }; } #endif HOCRPoDoFoPdfPrinter* HOCRPoDoFoPdfPrinter::create(const std::string& filename, const HOCRPdfExporter::PDFSettings& settings, const Glib::ustring& defaultFont, int defaultFontSize, Glib::ustring& errMsg) { PoDoFo::PdfStreamedDocument* document = nullptr; PoDoFo::PdfFont* defaultPdfFont = nullptr; #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) const PoDoFo::PdfEncoding* pdfFontEncoding = PoDoFo::PdfEncodingFactory::GlobalIdentityEncodingInstance(); #else PoDoFo::PdfEncoding* pdfFontEncoding = new PoDoFo::PdfIdentityEncoding; #endif try { Glib::ustring password = settings.password; PoDoFo::PdfEncrypt* encrypt = nullptr; if(!password.empty()) { encrypt = PoDoFo::PdfEncrypt::CreatePdfEncrypt(password, password, PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Print | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Edit | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Copy | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_EditNotes | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_FillAndSign | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Accessible | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_DocAssembly | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_HighPrint, PoDoFo::PdfEncrypt::EPdfEncryptAlgorithm::ePdfEncryptAlgorithm_RC4V2); } PoDoFo::EPdfVersion pdfVersion = PoDoFo::ePdfVersion_Default; switch(settings.version) { case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_0; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_1: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_1; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_2: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_2; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_3: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_3; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_4: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_4; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_5: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_5; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_6: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_6; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_7; break; } document = new PoDoFo::PdfStreamedDocument(filename.c_str(), pdfVersion, encrypt); } catch(PoDoFo::PdfError& err) { errMsg = err.what(); return nullptr; } Pango::FontDescription fontDesc = Pango::FontDescription(defaultFont); // Attempt to load the default/fallback font to ensure it is valid try { #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) defaultPdfFont = document->CreateFontSubset(Utils::resolveFontName(fontDesc.get_family()).c_str(), false, false, false, pdfFontEncoding); #else defaultPdfFont = document->CreateFontSubset(Utils::resolveFontName(fontDesc.get_family()).c_str(), false, false, pdfFontEncoding); #endif } catch(PoDoFo::PdfError&) { } if(!defaultPdfFont) { errMsg = Glib::ustring::compose(_("The PDF library could not load the font '%1'."), defaultFont); return nullptr; } // Set PDF info PoDoFo::PdfInfo* pdfInfo = document->GetInfo(); pdfInfo->SetProducer(settings.producer.c_str()); pdfInfo->SetCreator(settings.creator.c_str()); pdfInfo->SetTitle(settings.title.c_str()); pdfInfo->SetSubject(settings.subject.c_str()); pdfInfo->SetKeywords(settings.keywords.c_str()); pdfInfo->SetAuthor(settings.author.c_str()); return new HOCRPoDoFoPdfPrinter(document, pdfFontEncoding, defaultPdfFont, defaultFont, defaultFontSize); } HOCRPoDoFoPdfPrinter::HOCRPoDoFoPdfPrinter(PoDoFo::PdfStreamedDocument* document, const PoDoFo::PdfEncoding* fontEncoding, PoDoFo::PdfFont* defaultFont, const Glib::ustring& defaultFontFamily, double defaultFontSize) : m_document(document), m_pdfFontEncoding(fontEncoding), m_defaultFont(defaultFont), m_defaultFontFamily(defaultFontFamily), m_defaultFontSize(defaultFontSize) { m_painter = new PoDoFo::PdfPainter(); } HOCRPoDoFoPdfPrinter::~HOCRPoDoFoPdfPrinter() { #if PODOFO_VERSION < PODOFO_MAKE_VERSION(0,9,3) delete m_pdfFontEncoding; #endif delete m_document; delete m_painter; // Fonts are deleted by the internal PoDoFo font cache of the document } bool HOCRPoDoFoPdfPrinter::createPage(double width, double height, double offsetX, double offsetY, Glib::ustring& /*errMsg*/) { PoDoFo::PdfPage* pdfpage = m_document->CreatePage(PoDoFo::PdfRect(0, 0, width, height)); m_painter->SetPage(pdfpage); m_pageHeight = m_painter->GetPage()->GetPageSize().GetHeight(); m_painter->SetFont(m_defaultFont); if(m_defaultFontSize > 0) { m_painter->GetFont()->SetFontSize(m_defaultFontSize); } m_offsetX = offsetX; m_offsetY = offsetY; return true; } void HOCRPoDoFoPdfPrinter::finishPage() { m_painter->FinishPage(); } bool HOCRPoDoFoPdfPrinter::finishDocument(Glib::ustring& errMsg) { try { m_document->Close(); } catch(PoDoFo::PdfError& e) { errMsg = e.what(); return false; } return true; } void HOCRPoDoFoPdfPrinter::setFontFamily(const Glib::ustring& family, bool bold, bool italic) { float curSize = m_painter->GetFont()->GetFontSize(); m_painter->SetFont(getFont(family, bold, italic)); m_painter->GetFont()->SetFontSize(curSize); } void HOCRPoDoFoPdfPrinter::setFontSize(double pointSize) { m_painter->GetFont()->SetFontSize(pointSize); } void HOCRPoDoFoPdfPrinter::drawText(double x, double y, const Glib::ustring& text) { PoDoFo::PdfString pdfString(reinterpret_cast(text.c_str())); m_painter->DrawText(m_offsetX + x, m_pageHeight - m_offsetY - y, pdfString); } void HOCRPoDoFoPdfPrinter::drawImage(const Geometry::Rectangle& bbox, const Cairo::RefPtr& image, const HOCRPdfExporter::PDFSettings& settings) { Image img(image, settings.colorFormat, settings.conversionFlags); #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) PoDoFo::PdfImage pdfImage(m_document); #else PoDoFo::PdfImageCompat pdfImage(m_document); #endif pdfImage.SetImageColorSpace(settings.colorFormat == Image::Format_RGB24 ? PoDoFo::ePdfColorSpace_DeviceRGB : PoDoFo::ePdfColorSpace_DeviceGray); if(settings.compression == HOCRPdfExporter::PDFSettings::CompressZip) { PoDoFo::PdfMemoryInputStream is(reinterpret_cast(img.data), PoDoFo::pdf_long(img.bytesPerLine) * img.height); pdfImage.SetImageData(img.width, img.height, img.sampleSize, &is, {PoDoFo::ePdfFilter_FlateDecode}); } else if(settings.compression == HOCRPdfExporter::PDFSettings::CompressJpeg) { PoDoFo::PdfName dctFilterName(PoDoFo::PdfFilterFactory::FilterTypeToName(PoDoFo::ePdfFilter_DCTDecode)); pdfImage.GetObject()->GetDictionary().AddKey(PoDoFo::PdfName::KeyFilter, dctFilterName); uint8_t* buf = nullptr; unsigned long bufLen = 0; img.writeJpeg(settings.compressionQuality, buf, bufLen); PoDoFo::PdfMemoryInputStream is(reinterpret_cast(buf), bufLen); pdfImage.SetImageDataRaw(img.width, img.height, img.sampleSize, &is); std::free(buf); } else if(settings.compression == HOCRPdfExporter::PDFSettings::CompressFax4) { PoDoFo::PdfName faxFilterName(PoDoFo::PdfFilterFactory::FilterTypeToName(PoDoFo::ePdfFilter_CCITTFaxDecode)); pdfImage.GetObject()->GetDictionary().AddKey(PoDoFo::PdfName::KeyFilter, faxFilterName); PoDoFo::PdfDictionary decodeParams; decodeParams.AddKey("Columns", PoDoFo::PdfObject(PoDoFo::pdf_int64(img.width))); decodeParams.AddKey("Rows", PoDoFo::PdfObject(PoDoFo::pdf_int64(img.height))); decodeParams.AddKey("K", PoDoFo::PdfObject(PoDoFo::pdf_int64(-1))); // K < 0 --- Pure two-dimensional encoding (Group 4) pdfImage.GetObject()->GetDictionary().AddKey("DecodeParms", PoDoFo::PdfObject(decodeParams)); CCITTFax4Encoder encoder; uint32_t encodedLen = 0; uint8_t* encoded = encoder.encode(img.data, img.width, img.height, img.bytesPerLine, encodedLen); PoDoFo::PdfMemoryInputStream is(reinterpret_cast(encoded), encodedLen); pdfImage.SetImageDataRaw(img.width, img.height, img.sampleSize, &is); } m_painter->DrawImage(m_offsetX + bbox.x, m_pageHeight - m_offsetY - (bbox.y + bbox.height), &pdfImage, bbox.width / double(image->get_width()), bbox.height / double(image->get_height())); } double HOCRPoDoFoPdfPrinter::getAverageCharWidth() const { return m_painter->GetFont()->GetFontMetrics()->CharWidth(static_cast('x')); } double HOCRPoDoFoPdfPrinter::getTextWidth(const Glib::ustring& text) const { PoDoFo::PdfString pdfString(reinterpret_cast(text.c_str())); return m_painter->GetFont()->GetFontMetrics()->StringWidth(pdfString); } PoDoFo::PdfFont* HOCRPoDoFoPdfPrinter::getFont(Glib::ustring family, bool bold, bool italic) { Glib::ustring key = family + (bold ? "@bold" : "") + (italic ? "@italic" : ""); auto it = m_fontCache.find(key); if(it == m_fontCache.end()) { if(family.empty() || std::find(m_fontFamilies.begin(), m_fontFamilies.end(), family) == m_fontFamilies.end()) { family = m_defaultFontFamily; } PoDoFo::PdfFont* font = nullptr; try { #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) font = m_document->CreateFontSubset(Utils::resolveFontName(family).c_str(), bold, italic, false, m_pdfFontEncoding); #else font = document->CreateFontSubset(Utils::resolveFontName(family).c_str(), bold, italic, m_pdfFontEncoding); #endif it = m_fontCache.insert(std::make_pair(key, font)).first; } catch(PoDoFo::PdfError& /*err*/) { it = m_fontCache.insert(std::make_pair(key, m_defaultFont)).first; } } return it->second; } HOCRPdfExportDialog::HOCRPdfExportDialog(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage, Gtk::Window* parent) { if(!parent) { parent = MAIN->getWindow(); } set_transient_for(*parent); m_widget = new HOCRPdfExportWidget(displayerTool, hocrdocument, hocrpage); get_content_area()->pack_start(*m_widget->getWidget(), true, true); add_button(_("OK"), Gtk::RESPONSE_OK); add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); show_all(); } HOCRPdfExportDialog::~HOCRPdfExportDialog() { delete m_widget; } HOCRPdfExporter::PDFSettings HOCRPdfExportDialog::getPdfSettings() const { return m_widget->getPdfSettings(); } gImageReader-3.4.0/gtk/src/hocr/HOCRPdfExporter.hh000066400000000000000000000142441417507262200216130ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPDFEXPORTER_HH #define HOCRPDFEXPORTER_HH #include "common.hh" #include "Image.hh" #include "HOCRExporter.hh" class DisplayerImageItem; class DisplayerToolHOCR; class FontComboBox; namespace Geometry { class Rectangle; } class HOCRDocument; class HOCRPage; class HOCRItem; class HOCRPdfExportWidget; namespace PoDoFo { class PdfEncoding; class PdfFont; class PdfPainter; class PdfStreamedDocument; } class HOCRPdfExporter : public HOCRExporter { public: struct PDFSettings : ExporterSettings { Image::Format colorFormat; Image::ConversionFlags conversionFlags; enum Compression { CompressZip, CompressFax4, CompressJpeg } compression; int compressionQuality; Glib::ustring fontFamily; int fontSize; Glib::ustring fallbackFontFamily; int fallbackFontSize; bool uniformizeLineSpacing; int preserveSpaceWidth; bool overlay; double detectedFontScaling; bool sanitizeHyphens; int assumedImageDpi; int outputDpi; Glib::ustring paperSize; bool paperSizeLandscape; double paperWidthIn; double paperHeightIn; enum Version { PdfVersion_1_0 = 0, PdfVersion_1_1, PdfVersion_1_2, PdfVersion_1_3, PdfVersion_1_4, PdfVersion_1_5, PdfVersion_1_6, PdfVersion_1_7 } version; Glib::ustring password; Glib::ustring producer; Glib::ustring creator; Glib::ustring title; Glib::ustring subject; Glib::ustring keywords; Glib::ustring author; }; bool run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* settings = nullptr) override; private: bool setSource(const Glib::ustring& sourceFile, int page, int dpi, double angle); }; class HOCRPdfPrinter { public: HOCRPdfPrinter(); virtual ~HOCRPdfPrinter() = default; virtual void setFontFamily(const Glib::ustring& family, bool bold, bool italic) = 0; virtual void setFontSize(double pointSize) = 0; virtual void drawText(double x, double y, const Glib::ustring& text) = 0; virtual void drawImage(const Geometry::Rectangle& bbox, const Cairo::RefPtr& image, const HOCRPdfExporter::PDFSettings& settings) = 0; virtual double getAverageCharWidth() const = 0; virtual double getTextWidth(const Glib::ustring& text) const = 0; virtual bool createPage(double /*width*/, double /*height*/, double /*offsetX*/, double /*offsetY*/, Glib::ustring& /*errMsg*/) { return true; } virtual void finishPage() {} virtual bool finishDocument(Glib::ustring& /*errMsg*/) { return true; } void printChildren(const HOCRItem* item, const HOCRPdfExporter::PDFSettings& pdfSettings, double px2pu, double imgScale = 1., double fontScale = 1., bool inThread = false); Cairo::RefPtr getSelection(const Geometry::Rectangle& bbox); protected: std::vector m_fontFamilies; }; class HOCRPoDoFoPdfPrinter : public HOCRPdfPrinter { public: static HOCRPoDoFoPdfPrinter* create(const std::string& filename, const HOCRPdfExporter::PDFSettings& settings, const Glib::ustring& defaultFont, int defaultFontSize, Glib::ustring& errMsg); HOCRPoDoFoPdfPrinter(PoDoFo::PdfStreamedDocument* document, const PoDoFo::PdfEncoding* fontEncoding, PoDoFo::PdfFont* defaultFont, const Glib::ustring& defaultFontFamily, double defaultFontSize); ~HOCRPoDoFoPdfPrinter(); bool createPage(double width, double height, double offsetX, double offsetY, Glib::ustring& /*errMsg*/) override; void finishPage() override; bool finishDocument(Glib::ustring& errMsg) override; void setFontFamily(const Glib::ustring& family, bool bold, bool italic) override; void setFontSize(double pointSize) override; void drawText(double x, double y, const Glib::ustring& text) override; void drawImage(const Geometry::Rectangle& bbox, const Cairo::RefPtr& image, const HOCRPdfExporter::PDFSettings& settings) override; double getAverageCharWidth() const override; double getTextWidth(const Glib::ustring& text) const override; private: std::map m_fontCache; PoDoFo::PdfStreamedDocument* m_document = nullptr; PoDoFo::PdfPainter* m_painter = nullptr; const PoDoFo::PdfEncoding* m_pdfFontEncoding; PoDoFo::PdfFont* m_defaultFont; Glib::ustring m_defaultFontFamily; double m_defaultFontSize = -1.0; double m_pageHeight = 0.0; double m_offsetX = 0.0; double m_offsetY = 0.0; PoDoFo::PdfFont* getFont(Glib::ustring family, bool bold, bool italic); }; class HOCRCairoPdfPrinter : public HOCRPdfPrinter { public: HOCRCairoPdfPrinter(Cairo::RefPtr context, const Glib::ustring& defaultFont); void setFontFamily(const Glib::ustring& family, bool bold, bool italic) override; void setFontSize(double pointSize) override; void drawText(double x, double y, const Glib::ustring& text) override; void drawImage(const Geometry::Rectangle& bbox, const Cairo::RefPtr& image, const HOCRPdfExporter::PDFSettings& settings) override; double getAverageCharWidth() const override; double getTextWidth(const Glib::ustring& text) const override; private: Cairo::RefPtr m_context; Glib::ustring m_curFont; Glib::ustring m_defaultFont; }; class HOCRPdfExportDialog : public Gtk::Dialog { public: HOCRPdfExportDialog(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage, Gtk::Window* parent = nullptr); ~HOCRPdfExportDialog(); HOCRPdfExporter::PDFSettings getPdfSettings() const; private: HOCRPdfExportWidget* m_widget = nullptr; }; #endif // HOCRPDFEXPORTER_HH gImageReader-3.4.0/gtk/src/hocr/HOCRSpellChecker.cc000066400000000000000000000063211417507262200217000ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRSpellChecker.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include "HOCRSpellChecker.hh" #include "Utils.hh" bool HOCRSpellChecker::checkSpelling(const Glib::ustring& word, std::vector* suggestions, int limit) { static const Glib::RefPtr splitRe = Glib::Regex::create("[\u2013\u2014]+"); std::vector> words = Utils::string_split_pos(word, splitRe); std::size_t perWordLimit = 0; // s = p^w => w = log_p(c) = log(c)/log(p) => p = 10^(log(c)/w) if(limit > 0) { perWordLimit = std::size_t(std::pow(10, std::log10(limit) / words.size())); } std::vector> wordSuggestions; bool valid = true; bool multipleWords = words.size() > 1; for(const std::pair& wordRef : words) { bool wordValid = check_word(wordRef.first); valid &= wordValid; if(suggestions) { std::vector ws = get_suggestions(wordRef.first); if(wordValid && multipleWords) { ws.insert(ws.begin(), wordRef.first); } if(limit == -1) { wordSuggestions.push_back(ws); } else if(limit > 0) { ws.resize(std::min(ws.size(), perWordLimit)); wordSuggestions.push_back(ws); } } } if(suggestions) { suggestions->clear(); std::vector> suggestionCombinations; generateCombinations(wordSuggestions, suggestionCombinations, 0, std::vector()); for(const std::vector& combination : suggestionCombinations) { Glib::ustring s = ""; auto originalWord = words.begin(); int last = 0; int next; for(const Glib::ustring& suggestedWord : combination) { next = originalWord->second; s.append(word.substr(last, next - last)); s.append(suggestedWord); last = next + originalWord->first.length(); originalWord++; } s.append(word.substr(last)); // Don't list the exact input word if(s != word) { suggestions->push_back(s); } } } return valid; } // each suggestion for each word => each word in each suggestion void HOCRSpellChecker::generateCombinations(const std::vector>& lists, std::vector>& results, int depth, const std::vector& c) const { if(depth == int(lists.size())) { results.push_back(c); return; } for(int i = 0, n = int(lists[depth].size()); i < n; ++i) { std::vector newc = c; newc.insert(newc.end(), lists[depth][i]); generateCombinations(lists, results, depth + 1, newc); } } gImageReader-3.4.0/gtk/src/hocr/HOCRSpellChecker.hh000066400000000000000000000024261417507262200217140ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRSpellChecker.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRSPELLCHECKER_HH #define HOCRSPELLCHECKER_HH #include class HOCRSpellChecker : public GtkSpell::Checker { public: bool checkSpelling(const Glib::ustring& word, std::vector* suggestions = nullptr, int limit = -1); private: void generateCombinations(const std::vector>& lists, std::vector>& results, int depth, const std::vector& c) const; }; #endif // HOCRSPELLCHECKER_HH gImageReader-3.4.0/gtk/src/hocr/HOCRTextExporter.cc000066400000000000000000000042501417507262200220100ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRTextExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "HOCRDocument.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include "Utils.hh" #include bool HOCRTextExporter::run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* /*settings*/) { std::ofstream file(outname); if(!file.is_open()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Export failed"), _("The text export failed: unable to write output file.")); return false; } for(int i = 0, n = hocrdocument->pageCount(); i < n; ++i) { const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } printItem(file, page); } file.close(); bool openAfterExport = ConfigSettings::get>("openafterexport")->getValue(); if(openAfterExport) { Utils::openUri(Glib::filename_to_uri(outname)); } return true; } void HOCRTextExporter::printItem(std::ofstream& outputStream, const HOCRItem* item, bool lastChild) { if(!item->isEnabled()) { return; } Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocrx_word") { outputStream << item->text(); if(!lastChild) { outputStream << " "; } } else { for(int i = 0, n = item->children().size(); i < n; ++i) { printItem(outputStream, item->children()[i], i == n - 1); } } if(itemClass == "ocr_line" || itemClass == "ocr_par") { outputStream << "\n"; } } gImageReader-3.4.0/gtk/src/hocr/HOCRTextExporter.hh000066400000000000000000000023551417507262200220260ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRTextExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRTEXTEXPORTER_HH #define HOCRTEXTEXPORTER_HH #include "common.hh" #include "HOCRExporter.hh" class HOCRItem; class HOCRTextExporter : public HOCRExporter { public: bool run(const HOCRDocument* hocrdocument, const std::string& outname, const ExporterSettings* settings = nullptr) override; private: void printItem(std::ofstream& outputStream, const HOCRItem* item, bool lastChild = false); }; #endif // HOCRTEXTEXPORTER_HH gImageReader-3.4.0/gtk/src/hocr/OutputEditorHOCR.cc000066400000000000000000001723031417507262200220070ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorHOCR.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #define USE_STD_NAMESPACE #include #include #undef USE_STD_NAMESPACE #include #include #include "ConfigSettings.hh" #include "DisplayerToolHOCR.hh" #include "FileDialogs.hh" #include "HOCRDocument.hh" #include "HOCROdtExporter.hh" #include "HOCRPdfExporter.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include "OutputEditorHOCR.hh" #include "Recognizer.hh" #include "SearchReplaceFrame.hh" #include "SourceManager.hh" #include "Utils.hh" #include "XmlUtils.hh" class OutputEditorHOCR::HOCRCellRendererText : public Gtk::CellRendererText { public: HOCRCellRendererText() : Glib::ObjectBase("CellRendererTextHOCR") {} Gtk::Entry* get_entry() const { return m_entry; } const Glib::ustring& get_current_path() const { return m_path; } protected: Gtk::Entry* m_entry = nullptr; Glib::ustring m_path; Gtk::CellEditable* start_editing_vfunc(GdkEvent* /*event*/, Gtk::Widget& /*widget*/, const Glib::ustring& path, const Gdk::Rectangle& /*background_area*/, const Gdk::Rectangle& /*cell_area*/, Gtk::CellRendererState /*flags*/) override { if(!property_editable()) { return nullptr; } m_entry = new Gtk::Entry; m_entry->set_text(property_text()); m_entry->set_has_frame(false); m_entry->signal_editing_done().connect([ = ] { if(!m_entry->property_editing_canceled()) { edited(path, m_entry->get_text()); } m_entry = nullptr; m_path.clear(); }); m_entry->show(); m_path = path; return Gtk::manage(m_entry); } }; class OutputEditorHOCR::HOCRAttribRenderer : public Gtk::CellRendererText { public: HOCRAttribRenderer(Glib::RefPtr propStore, const OutputEditorHOCR::PropStoreColumns& cols) : Glib::ObjectBase("HOCRAttribRenderer"), m_propStore(propStore), m_cols(cols) {} protected: Glib::RefPtr m_propStore; const OutputEditorHOCR::PropStoreColumns& m_cols; Gtk::CellEditable* start_editing_vfunc(GdkEvent* /*event*/, Gtk::Widget& /*widget*/, const Glib::ustring& path, const Gdk::Rectangle& /*background_area*/, const Gdk::Rectangle& /*cell_area*/, Gtk::CellRendererState /*flags*/) override { if(!property_editable()) { return nullptr; } Gtk::TreeIter it = m_propStore->get_iter(path); if(it && (*it)[m_cols.attr] == "title:x_font") { FontComboBox* combo = new FontComboBox(); Glib::ustring curFont = property_text(); combo->set_active_font(property_text()); combo->signal_editing_done().connect([ = ] { Glib::ustring newFont = combo->get_active_font(); if(!combo->property_editing_canceled() && newFont != curFont) { edited(path, combo->get_active_font()); } }); combo->show(); return Gtk::manage(combo); } else if(it && ((*it)[m_cols.attr] == "bold" || (*it)[m_cols.attr] == "italic")) { Gtk::ComboBoxText* combo = new Gtk::ComboBoxText(); combo->insert(0, "no", "no"); combo->insert(1, "yes", "yes"); if((*it)[m_cols.multiple] == true) { combo->set_active(-1); } else { combo->set_active_id((*it)[m_cols.value]); } combo->signal_editing_done().connect([ = ] { edited(path, combo->get_active_id()); }); combo->show(); return Gtk::manage(combo); } else if(it && (*it)[m_cols.attr] == "lang") { Gtk::ComboBoxText* combo = new Gtk::ComboBoxText(); for(const Glib::ustring& code : GtkSpell::Checker::get_language_list()) { Glib::ustring text = GtkSpell::Checker::decode_language_code(code); combo->append(code, text); } if((*it)[m_cols.multiple] == true) { combo->set_active(-1); } else { combo->set_active_id((*it)[m_cols.value]); } combo->signal_editing_done().connect([ = ] { edited(path, combo->get_active_id()); }); combo->show(); return Gtk::manage(combo); } else { Gtk::Entry* entry = new Gtk::Entry; entry->set_text(property_text()); entry->set_has_frame(false); entry->signal_editing_done().connect([ = ] { if(!entry->property_editing_canceled()) { edited(path, entry->get_text()); } }); entry->show(); return Gtk::manage(entry); } } }; class OutputEditorHOCR::HOCRTreeView : public Gtk::TreeView { public: HOCRTreeView(BaseObjectType* cobject, const Glib::RefPtr& /*builder*/) : Gtk::TreeView(cobject) { m_connectionSelectionChanged = CONNECT(get_selection(), changed, [this] { Gtk::TreeIter oldIndex = m_currentIndex; m_currentIndex = currentIndex(); m_signal_current_index_changed(m_currentIndex, oldIndex); }); CONNECT(this, button_press_event, [this](GdkEventButton * ev) { return button_press_event(ev); }, false); CONNECT(this, key_press_event, [this](GdkEventKey * ev) { return key_press_event(ev); }, false); } sigc::signal signal_current_index_changed() { return m_signal_current_index_changed; } sigc::signal signal_context_menu() { return m_signal_context_menu; } sigc::signal signal_delete() { return m_signal_delete; } Gtk::TreeIter currentIndex() { std::vector items = get_selection()->get_selected_rows(); if(!items.empty()) { return get_model()->get_iter(items[0]); } return Gtk::TreeIter(); } void setCurrentIndex(const Gtk::TreeIter& index) { if (index && m_currentIndex && index == m_currentIndex) { return; } m_connectionSelectionChanged.block(); get_selection()->unselect_all(); m_connectionSelectionChanged.unblock(); if(index) { expand_to_path(get_model()->get_path(index)); get_selection()->select(index); set_cursor(get_model()->get_path(index)); scroll_to_row(get_model()->get_path(index)); } } Gtk::TreeIter indexAtPos(int evx, int evy) { Gtk::TreePath path; Gtk::TreeViewColumn* col; int cell_x, cell_y; get_path_at_pos(evx, evy, path, col, cell_x, cell_y); if(!path) { return Gtk::TreeIter(); } return get_model()->get_iter(path); } protected: bool button_press_event(GdkEventButton* button_event) { bool rightclick = (button_event->type == GDK_BUTTON_PRESS && button_event->button == 3); Gtk::TreePath path; Gtk::TreeViewColumn* col; int cell_x, cell_y; get_path_at_pos(int(button_event->x), int(button_event->y), path, col, cell_x, cell_y); if(!path) { return false; } std::vector selection = get_selection()->get_selected_rows(); bool selected = std::find(selection.begin(), selection.end(), path) != selection.end(); if(!rightclick || (rightclick && !selected)) { Gtk::TreeView::on_button_press_event(button_event); } if(rightclick) { m_signal_context_menu.emit(button_event); } return true; } bool key_press_event(GdkEventKey* key_event) { if(key_event->keyval == GDK_KEY_Delete) { m_signal_delete.emit(); return true; } return Gtk::TreeView::on_key_press_event(key_event); } private: ClassData m_classdata; Gtk::TreeIter m_currentIndex; sigc::signal m_signal_current_index_changed; sigc::signal m_signal_context_menu; sigc::signal m_signal_delete; sigc::connection m_connectionSelectionChanged; }; /////////////////////////////////////////////////////////////////////////////// void OutputEditorHOCR::HOCRBatchProcessor::writeHeader(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo) const { Glib::ustring header = Glib::ustring::compose( "\n" "\n" "\n" " %1\n" " \n" " \n" " \n" "\n", Glib::path_get_basename(pageInfo.filename), tess->Version()); dev << header.raw(); } void OutputEditorHOCR::HOCRBatchProcessor::writeFooter(std::ostream& dev) const { dev << "\n"; } void OutputEditorHOCR::HOCRBatchProcessor::appendOutput(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfos, bool /*firstArea*/) const { char* text = tess->GetHOCRText(pageInfos.page); xmlpp::DomParser parser; parser.parse_memory(text); xmlpp::Document* doc = parser.get_document(); xmlpp::Element* pageDiv = doc->get_root_node(); if(!pageDiv || pageDiv->get_name() != "div") { return; } std::map attrs = HOCRItem::deserializeAttrGroup(pageDiv->get_attribute_value("title")); // This works because in batch mode the output is created next to the source image attrs["image"] = Glib::ustring::compose("'%1'", Glib::path_get_basename(pageInfos.filename)); attrs["ppageno"] = Glib::ustring::compose("%1", pageInfos.page); attrs["rot"] = Glib::ustring::compose("%1", pageInfos.angle); attrs["res"] = Glib::ustring::compose("%1", pageInfos.resolution); pageDiv->set_attribute("title", HOCRItem::serializeAttrGroup(attrs)); doc->write_to_stream(dev); } /////////////////////////////////////////////////////////////////////////////// OutputEditorHOCR::OutputEditorHOCR(DisplayerToolHOCR* tool) { ui.builder->get_widget_derived("treeviewItems", m_treeView); ui.setupUi(); ui.dialogAddWord->set_transient_for(*MAIN->getWindow()); m_preview = new DisplayerImageItem(); m_preview->setZIndex(2); MAIN->getDisplayer()->addItem(m_preview); m_tool = tool; m_document = Glib::RefPtr(new HOCRDocument); // HOCR tree view m_treeView->set_model(m_document); m_treeView->get_selection()->set_mode(Gtk::SELECTION_MULTIPLE); m_treeView->set_tooltip_column(HOCRDocument::COLUMN_TOOLTIP); // First column: [checkbox][icon][text] m_treeViewTextCell = Gtk::manage(new HOCRCellRendererText); Gtk::TreeViewColumn* itemViewCol1 = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererToggle& checkRenderer = *Gtk::manage(new Gtk::CellRendererToggle); Gtk::CellRendererPixbuf& iconRenderer = *Gtk::manage(new Gtk::CellRendererPixbuf); iconRenderer.set_fixed_size(22, 22); Gtk::CellRendererText& textRenderer = *m_treeViewTextCell; textRenderer.property_ellipsize().set_value(Pango::ELLIPSIZE_MIDDLE); itemViewCol1->pack_start(checkRenderer, false); itemViewCol1->pack_start(iconRenderer, false); itemViewCol1->pack_start(textRenderer, true); itemViewCol1->add_attribute(checkRenderer, "active", HOCRDocument::COLUMN_CHECKED); itemViewCol1->add_attribute(iconRenderer, "pixbuf", HOCRDocument::COLUMN_ICON); itemViewCol1->add_attribute(textRenderer, "text", HOCRDocument::COLUMN_TEXT); itemViewCol1->add_attribute(textRenderer, "editable", HOCRDocument::COLUMN_EDITABLE); itemViewCol1->add_attribute(textRenderer, "foreground", HOCRDocument::COLUMN_TEXT_COLOR); itemViewCol1->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); itemViewCol1->set_expand(true); CONNECT(&checkRenderer, toggled, [this](const Glib::ustring & path) { Gtk::TreeIter it = m_document->get_iter(path); bool prev; it->get_value(HOCRDocument::COLUMN_CHECKED, prev); it->set_value(HOCRDocument::COLUMN_CHECKED, !prev); }); CONNECT(&textRenderer, edited, [this](const Glib::ustring & path, const Glib::ustring & text) { m_document->get_iter(path)->set_value(HOCRDocument::COLUMN_TEXT, text); }); m_treeView->append_column(*itemViewCol1); m_treeView->set_expander_column(*itemViewCol1); // Second column: wconf, hidden by default Gtk::TreeViewColumn* itemViewCol2 = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererText& wconfRenderer = *Gtk::manage(new Gtk::CellRendererText); itemViewCol2->pack_start(wconfRenderer, true); itemViewCol2->add_attribute(wconfRenderer, "text", HOCRDocument::COLUMN_WCONF); m_treeView->append_column(*itemViewCol2); itemViewCol2->set_visible(false); itemViewCol2->set_fixed_width(32); itemViewCol2->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); m_treeView->set_fixed_height_mode(); // Navigation target combo box Glib::RefPtr navigationComboModel = Gtk::ListStore::create(m_navigationComboCols); ui.comboNavigation->set_model(navigationComboModel); Gtk::TreeRow row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Page"); row[m_navigationComboCols.itemClass] = "ocr_page"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Block"); row[m_navigationComboCols.itemClass] = "ocr_carea"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Paragraph"); row[m_navigationComboCols.itemClass] = "ocr_par"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Line"); row[m_navigationComboCols.itemClass] = "ocr_line"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Word"); row[m_navigationComboCols.itemClass] = "ocrx_word"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Misspelled word"); row[m_navigationComboCols.itemClass] = "ocrx_word_bad"; row = *(navigationComboModel->append()); row[m_navigationComboCols.label] = _("Low confidence word"); row[m_navigationComboCols.itemClass] = "ocrx_word_lowconf"; ui.comboNavigation->pack_start(m_navigationComboCols.label); ui.comboNavigation->set_active(0); // HOCR item property table m_propStore = Gtk::TreeStore::create(m_propStoreCols); ui.treeviewProperties->set_model(m_propStore); // First column: attrib name Gtk::TreeViewColumn* nameCol = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererText& nameRenderer = *Gtk::manage(new Gtk::CellRendererText()); nameRenderer.property_ellipsize() = Pango::ELLIPSIZE_END; nameRenderer.property_editable() = false; nameCol->pack_start(nameRenderer); nameCol->add_attribute(nameRenderer, "text", m_propStoreCols.name); nameCol->add_attribute(nameRenderer, "background", m_propStoreCols.background); nameCol->add_attribute(nameRenderer, "weight", m_propStoreCols.weight); nameCol->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); nameCol->set_expand(true); ui.treeviewProperties->append_column(*nameCol); // Second column: attrib value Gtk::TreeViewColumn* valueCol = Gtk::manage(new Gtk::TreeViewColumn("")); Gtk::CellRendererText& valueRenderer = *Gtk::manage(new HOCRAttribRenderer(m_propStore, m_propStoreCols)); valueRenderer.property_ellipsize() = Pango::ELLIPSIZE_END; valueCol->pack_start(valueRenderer); valueCol->add_attribute(valueRenderer, "text", m_propStoreCols.value); valueCol->add_attribute(valueRenderer, "placeholder_text", m_propStoreCols.placeholder); valueCol->add_attribute(valueRenderer, "editable", m_propStoreCols.editable); valueCol->add_attribute(valueRenderer, "background", m_propStoreCols.background); valueCol->add_attribute(valueRenderer, "weight", m_propStoreCols.weight); valueCol->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); valueCol->set_expand(true); CONNECT(&valueRenderer, edited, sigc::mem_fun(this, &OutputEditorHOCR::editAttribute)); ui.treeviewProperties->append_column(*valueCol); // HOCR item source view Glib::RefPtr buffer = Gsv::Buffer::create(); buffer->set_highlight_syntax(true); buffer->set_language(Gsv::LanguageManager::get_default()->get_language("xml")); ui.textviewSource->set_buffer(buffer); // Search replace frame m_searchFrame = new SearchReplaceFrame(); ui.boxSearch->pack_start(*Gtk::manage(m_searchFrame->getWidget())); m_searchFrame->getWidget()->set_visible(false); Glib::RefPtr group = MAIN->getWindow()->get_accel_group(); ui.buttonSave->add_accelerator("clicked", group, GDK_KEY_S, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); ui.buttonFindreplace->add_accelerator("clicked", group, GDK_KEY_F, Gdk::CONTROL_MASK, Gtk::AccelFlags(0)); ui.buttonNavigationNext->add_accelerator("clicked", group, GDK_KEY_F3, Gdk::ModifierType(0), Gtk::AccelFlags(0)); ui.buttonNavigationPrev->add_accelerator("clicked", group, GDK_KEY_F3, Gdk::SHIFT_MASK, Gtk::AccelFlags(0)); ui.buttonSave->set_sensitive(false); ui.buttonExport->set_sensitive(false); CONNECT(ui.menuItemInsertAppend, activate, [this] { setInsertMode(InsertMode::Append, "ins_hocr_append.png"); }); CONNECT(ui.menuItemInsertBefore, activate, [this] { setInsertMode(InsertMode::InsertBefore, "ins_hocr_before.png"); }); CONNECT(ui.buttonOpen, clicked, [this] { open(InsertMode::Replace); }); CONNECT(ui.menuItemOpenAppend, activate, [this] { open(InsertMode::Append); }); CONNECT(ui.menuItemOpenInsert, activate, [this] { open(InsertMode::InsertBefore); }); CONNECT(ui.buttonSave, clicked, [this] { save(); }); CONNECT(ui.menuitemExportText, activate, [this] { exportToText(); }); CONNECT(ui.menuitemExportPdf, activate, [this] { exportToPDF(); }); CONNECT(ui.menuitemExportOdt, activate, [this] { exportToODT(); }); CONNECT(ui.buttonClear, clicked, [this] { clear(); }); CONNECT(ui.buttonFindreplace, toggled, [this] { m_searchFrame->clear(); m_searchFrame->getWidget()->set_visible(ui.buttonFindreplace->get_active()); }); CONNECT(ui.buttonWconf, toggled, [this] { m_treeView->get_column(1)->set_visible(ui.buttonWconf->get_active());}); CONNECT(ui.buttonPreview, toggled, [this] { previewToggled(); }); CONNECT(m_treeView, context_menu, [this](GdkEventButton * ev) { showTreeWidgetContextMenu(ev); }); CONNECT(m_treeView, delete, [this] { m_document->removeItem(m_treeView->currentIndex()); }); CONNECT(m_searchFrame, find_replace, sigc::mem_fun(this, &OutputEditorHOCR::findReplace)); CONNECT(m_searchFrame, replace_all, sigc::mem_fun(this, &OutputEditorHOCR::replaceAll)); CONNECT(m_searchFrame, apply_substitutions, sigc::mem_fun(this, &OutputEditorHOCR::applySubstitutions)); m_connectionCustomFont = CONNECT(ConfigSettings::get("customoutputfont"), changed, [this] { setFont(); }); m_connectionDefaultFont = CONNECT(ConfigSettings::get("systemoutputfont"), changed, [this] { setFont(); }); CONNECT(m_treeView, current_index_changed, sigc::mem_fun(this, &OutputEditorHOCR::showItemProperties)); CONNECT(ui.notebook, switch_page, [this](Gtk::Widget*, guint) { updateSourceText(); }); CONNECT(m_tool, bbox_changed, sigc::mem_fun(this, &OutputEditorHOCR::updateCurrentItemBBox)); CONNECT(m_tool, bbox_drawn, sigc::mem_fun(this, &OutputEditorHOCR::bboxDrawn)); CONNECT(m_tool, position_picked, sigc::mem_fun(this, &OutputEditorHOCR::pickItem)); CONNECTX(m_document, row_inserted, [this](const Gtk::TreePath&, const Gtk::TreeIter&) { setModified(); }); CONNECTX(m_document, row_deleted, [this](const Gtk::TreePath&) { setModified(); }); CONNECTX(m_document, row_changed, [this](const Gtk::TreePath&, const Gtk::TreeIter&) { setModified(); updateSourceText(); }); CONNECTX(m_document, item_attribute_changed, [this](const Gtk::TreeIter & itemIndex, const Glib::ustring & name, const Glib::ustring & value) { itemAttributeChanged(itemIndex, name, value); }); CONNECTX(m_document, item_attribute_changed, [this](const Gtk::TreeIter&, const Glib::ustring&, const Glib::ustring&) { setModified(); }); CONNECTX(m_document, item_attribute_changed, [this](const Gtk::TreeIter & it, const Glib::ustring & attr, const Glib::ustring & value) { updateAttributes(it, attr, value); updateSourceText(); }); CONNECT(ui.comboNavigation, changed, [this] { navigateTargetChanged(); }); CONNECT(ui.buttonNavigationNext, clicked, [this] { navigateNextPrev(true); }); CONNECT(ui.buttonNavigationPrev, clicked, [this] { navigateNextPrev(false); }); CONNECT(ui.buttonExpandAll, clicked, [this] { expandCollapseItemClass(true); }); CONNECT(ui.buttonCollapseAll, clicked, [this] { expandCollapseItemClass(false); }); m_connectionSourceChanged = CONNECT(MAIN->getDisplayer(), imageChanged, [this] { sourceChanged(); }); setFont(); } OutputEditorHOCR::~OutputEditorHOCR() { MAIN->getDisplayer()->removeItem(m_preview); delete m_preview; delete m_searchFrame; m_connectionCustomFont.disconnect(); m_connectionDefaultFont.disconnect(); } void OutputEditorHOCR::setFont() { if(ConfigSettings::get("systemoutputfont")->getValue()) { ui.textviewSource->unset_font(); } else { Glib::ustring fontName = ConfigSettings::get("customoutputfont")->getValue(); ui.textviewSource->override_font(Pango::FontDescription(fontName)); } } void OutputEditorHOCR::setInsertMode(InsertMode mode, const std::string& iconName) { m_insertMode = mode; ui.imageInsert->set(Gdk::Pixbuf::create_from_resource(Glib::ustring::compose("/org/gnome/gimagereader/%1", iconName))); } void OutputEditorHOCR::setModified() { ui.buttonSave->set_sensitive(m_document->pageCount() > 0); ui.buttonExport->set_sensitive(m_document->pageCount() > 0); ui.boxNavigation->set_sensitive(m_document->pageCount() > 0); m_preview->setVisible(false); m_connectionPreviewTimer = Glib::signal_timeout().connect([this] { updatePreview(); return false; }, 100); // Use a timer because setModified is potentially called a large number of times when the HOCR tree changes m_modified = true; } OutputEditorHOCR::ReadSessionData* OutputEditorHOCR::initRead(tesseract::TessBaseAPI& tess) { tess.SetPageSegMode(tesseract::PSM_AUTO_ONLY); HOCRReadSessionData* data = new HOCRReadSessionData; data->insertIndex = m_insertMode == InsertMode::Append ? m_document->pageCount() : currentPage(); return data; } void OutputEditorHOCR::read(tesseract::TessBaseAPI& tess, ReadSessionData* data) { tess.SetVariable("hocr_font_info", "true"); char* text = tess.GetHOCRText(data->pageInfo.page); HOCRReadSessionData* hdata = static_cast(data); Utils::runInMainThreadBlocking([&] { addPage(text, *hdata); }); delete[] text; ++hdata->insertIndex; } void OutputEditorHOCR::readError(const Glib::ustring& errorMsg, ReadSessionData* data) { static_cast(data)->errors.push_back(Glib::ustring::compose("%1[%2]: %3", data->pageInfo.filename, data->pageInfo.page, errorMsg)); } void OutputEditorHOCR::finalizeRead(ReadSessionData* data) { HOCRReadSessionData* hdata = static_cast(data); if(!hdata->errors.empty()) { Glib::ustring message = Glib::ustring::compose(_("The following pages could not be processed:\n%1"), Utils::string_join(hdata->errors, "\n")); Utils::messageBox(Gtk::MESSAGE_WARNING, _("Recognition errors"), message); } OutputEditor::finalizeRead(data); } void OutputEditorHOCR::addPage(const Glib::ustring& hocrText, HOCRReadSessionData data) { xmlpp::DomParser parser; parser.parse_memory(hocrText); xmlpp::Document* doc = parser.get_document(); xmlpp::Element* pageDiv = doc->get_root_node(); if(!pageDiv || pageDiv->get_name() != "div") { return; } std::map attrs = HOCRItem::deserializeAttrGroup(pageDiv->get_attribute_value("title")); attrs["image"] = Glib::ustring::compose("'%1'", data.pageInfo.filename); attrs["ppageno"] = Glib::ustring::compose("%1", data.pageInfo.page); attrs["rot"] = Glib::ustring::compose("%1", data.pageInfo.angle); attrs["res"] = Glib::ustring::compose("%1", data.pageInfo.resolution); pageDiv->set_attribute("title", HOCRItem::serializeAttrGroup(attrs)); Gtk::TreeIter index = m_document->insertPage(data.insertIndex, pageDiv, true); expandCollapseChildren(index, true); m_treeView->expand_to_path(m_document->get_path(index)); m_treeView->expand_row(m_document->get_path(index), true); MAIN->setOutputPaneVisible(true); m_modified = true; } bool OutputEditorHOCR::containsSource(const std::string& source, int sourcePage) const { for(int i = 0, n = m_document->pageCount(); i < n; ++i) { const HOCRPage* page = m_document->page(i); if(page->pageNr() == sourcePage && page->sourceFile() == source) { return true; } } return false; } void OutputEditorHOCR::navigateTargetChanged() { Glib::ustring target = (*ui.comboNavigation->get_active())[m_navigationComboCols.itemClass]; bool allowExpandCollapse = target.substr(0, 9) != "ocrx_word"; ui.buttonExpandAll->set_sensitive(allowExpandCollapse); ui.buttonCollapseAll->set_sensitive(allowExpandCollapse); } void OutputEditorHOCR::expandCollapseItemClass(bool expand) { Glib::ustring target = (*ui.comboNavigation->get_active())[m_navigationComboCols.itemClass]; Gtk::TreeIter start = m_document->get_iter("0"); Gtk::TreeIter next = start; do { const HOCRItem* item = m_document->itemAtIndex(next); if(item && item->itemClass() == target) { if(expand) { m_treeView->expand_to_path(m_document->get_path(next)); for(const Gtk::TreeIter& child : next->children()) { m_treeView->collapse_row(m_document->get_path(child)); } } else { m_treeView->collapse_row(m_document->get_path(next)); } } next = m_document->nextIndex(next); } while(next != start); Gtk::TreeIter it = m_treeView->currentIndex(); if(it) { m_treeView->scroll_to_row(m_document->get_path(it)); } } void OutputEditorHOCR::navigateNextPrev(bool next) { Glib::ustring target = (*ui.comboNavigation->get_active())[m_navigationComboCols.itemClass]; bool misspelled = false; bool lowconf = false; if(target == "ocrx_word_bad") { target = "ocrx_word"; misspelled = true; } else if(target == "ocrx_word_lowconf") { target = "ocrx_word"; lowconf = true; } Gtk::TreeIter start = m_treeView->currentIndex(); m_treeView->setCurrentIndex(m_document->prevOrNextIndex(next, start, target, misspelled, lowconf)); } void OutputEditorHOCR::expandCollapseChildren(const Gtk::TreeIter& index, bool expand) const { if(expand) { m_treeView->expand_to_path(m_document->get_path(index)); m_treeView->expand_row(m_document->get_path(index), true); } else { m_treeView->collapse_row(m_document->get_path(index)); } } bool OutputEditorHOCR::showPage(const HOCRPage* page) { m_connectionSourceChanged.block(); bool success = page && MAIN->getSourceManager()->addSource(Gio::File::create_for_path(page->sourceFile()), true) && MAIN->getDisplayer()->setup(&page->pageNr(), &page->resolution(), &page->angle()); m_connectionSourceChanged.unblock(); if(success) { sourceChanged(); } return success; } int OutputEditorHOCR::currentPage() { std::vector selected = m_treeView->get_selection()->get_selected_rows(); if(selected.empty()) { return m_document->pageCount(); } Gtk::TreeModel::Path path = selected.front(); if(path.empty()) { return m_document->pageCount(); } return path.front(); } void OutputEditorHOCR::showItemProperties(const Gtk::TreeIter& index, const Gtk::TreeIter& prev) { m_tool->setAction(DisplayerToolHOCR::ACTION_NONE); const HOCRItem* prevItem = m_document->itemAtIndex(prev); m_propStore->clear(); ui.textviewSource->get_buffer()->set_text(""); const HOCRItem* currentItem = m_document->itemAtIndex(index); if(!currentItem) { m_tool->clearSelection(); return; } const HOCRPage* page = currentItem->page(); std::map attrs = currentItem->getAllAttributes(); for(auto it = attrs.begin(), itEnd = attrs.end(); it != itEnd; ++it) { Glib::ustring attrName = it->first; if(attrName == "class" || attrName == "id") { continue; } std::vector parts = Utils::string_split(attrName, ':'); Gtk::TreeIter item = m_propStore->append(); item->set_value(m_propStoreCols.attr, attrName); item->set_value(m_propStoreCols.name, parts[parts.size() - 1]); item->set_value(m_propStoreCols.value, it->second); item->set_value(m_propStoreCols.editable, attributeEditable(attrName)); item->set_value(m_propStoreCols.background, Glib::ustring("#FFF")); item->set_value(m_propStoreCols.weight, static_cast(Pango::WEIGHT_NORMAL)); } // ocr_class:attr_key:attr_values std::map>> occurrences; currentItem->getPropagatableAttributes(occurrences); for(auto it = occurrences.begin(), itEnd = occurrences.end(); it != itEnd; ++it) { Gtk::TreeIter item = m_propStore->append(); Glib::ustring itemClass = it->first; item->set_value(m_propStoreCols.name, itemClass); item->set_value(m_propStoreCols.editable, false); item->set_value(m_propStoreCols.background, Glib::ustring("#C0C0C0")); item->set_value(m_propStoreCols.weight, static_cast(Pango::WEIGHT_BOLD)); for(auto attrIt = it->second.begin(), attrItEnd = it->second.end(); attrIt != attrItEnd; ++attrIt) { const Glib::ustring& attrName = attrIt->first; const std::set& attrValues = attrIt->second; int attrValueCount = attrValues.size(); Gtk::TreeIter item = m_propStore->append(); std::vector parts = Utils::string_split(attrName, ':'); item->set_value(m_propStoreCols.attr, attrName); item->set_value(m_propStoreCols.name, parts[parts.size() - 1]); item->set_value(m_propStoreCols.value, attrValueCount > 1 ? "" : * (attrValues.begin())); item->set_value(m_propStoreCols.itemClass, itemClass); item->set_value(m_propStoreCols.editable, attributeEditable(attrName)); item->set_value(m_propStoreCols.placeholder, attrValueCount > 1 ? _("Multiple values") : Glib::ustring()); item->set_value(m_propStoreCols.background, Glib::ustring("#FFF")); item->set_value(m_propStoreCols.weight, static_cast(Pango::WEIGHT_NORMAL)); } } ui.textviewSource->get_buffer()->set_text(currentItem->toHtml()); if(showPage(page)) { // Update preview if necessary if(!prevItem || prevItem->page() != page) { updatePreview(); } // Minimum bounding box Geometry::Rectangle minBBox; if(currentItem->itemClass() == "ocr_page") { minBBox = currentItem->bbox(); } else { for(const HOCRItem* child : currentItem->children()) { minBBox = minBBox.unite(child->bbox()); } } m_tool->setSelection(currentItem->bbox(), minBBox); } } Glib::RefPtr OutputEditorHOCR::attributeValidator(const Glib::ustring& attribName) const { static std::map> validators = { {"title:bbox", Glib::Regex::create("^\\d+\\s+\\d+\\s+\\d+\\s+\\d+$")}, {"lang", Glib::Regex::create("^[a-z]{2,}(?:_[A-Z]{2,})?$")}, {"title:x_fsize", Glib::Regex::create("^\\d+$")}, {"title:baseline", Glib::Regex::create("^[-+]?\\d+\\.?\\d*\\s[-+]?\\d+\\.?\\d*$")} }; auto it = validators.find(attribName); if(it == validators.end()) { return Glib::RefPtr(); } else { return it->second; } } bool OutputEditorHOCR::attributeEditable(const Glib::ustring& attribName) const { static std::vector editableAttrs = {"title:bbox", "lang", "title:x_fsize", "title:baseline", "title:x_font", "bold", "italic"}; return std::find(editableAttrs.begin(), editableAttrs.end(), attribName) != editableAttrs.end(); } void OutputEditorHOCR::editAttribute(const Glib::ustring& path, const Glib::ustring& value) { Gtk::TreeIter treeIt = m_treeView->currentIndex(); Gtk::TreeIter propIt = m_propStore->get_iter(path); Glib::ustring attrName = (*propIt)[m_propStoreCols.attr]; Glib::ustring itemClass = (*propIt)[m_propStoreCols.itemClass]; Glib::RefPtr validator = attributeValidator(attrName); if(treeIt && (!validator || validator->match(value))) { m_document->editItemAttribute(treeIt, attrName, value, itemClass); } } void OutputEditorHOCR::updateCurrentItemBBox(const Geometry::Rectangle& bbox) { Glib::ustring bboxstr = Glib::ustring::compose("%1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height); m_document->editItemAttribute(m_treeView->currentIndex(), "title:bbox", bboxstr); } void OutputEditorHOCR::updateAttributes(const Gtk::TreeIter& it, const Glib::ustring& attr, const Glib::ustring& value) { Gtk::TreeIter current = m_treeView->currentIndex(); if(current && it == current) { for(const Gtk::TreeIter& propIt : m_propStore->children()) { if((*propIt)[m_propStoreCols.attr] == attr) { (*propIt)[m_propStoreCols.value] = value; break; } } } } void OutputEditorHOCR::updateSourceText() { if(ui.notebook->get_current_page() == 1) { const HOCRItem* currentItem = m_document->itemAtIndex(m_treeView->currentIndex()); if(currentItem) { ui.textviewSource->get_buffer()->set_text(currentItem->toHtml()); } } } void OutputEditorHOCR::itemAttributeChanged(const Gtk::TreeIter& itemIndex, const Glib::ustring& name, const Glib::ustring& /*value*/) { const HOCRItem* currentItem = m_document->itemAtIndex(itemIndex); if(name == "title:bbox" && currentItem) { // Minimum bounding box Geometry::Rectangle minBBox; if(currentItem->itemClass() == "ocr_page") { minBBox = currentItem->bbox(); } else { for(const HOCRItem* child : currentItem->children()) { minBBox = minBBox.unite(child->bbox()); } } m_tool->setSelection(currentItem->bbox(), minBBox); } } void OutputEditorHOCR::bboxDrawn(const Geometry::Rectangle& bbox, int action) { xmlpp::Document doc; Gtk::TreeIter current = m_treeView->currentIndex(); const HOCRItem* currentItem = m_document->itemAtIndex(current); if(!currentItem) { return; } std::map>> propAttrs; currentItem->getPropagatableAttributes(propAttrs); xmlpp::Element* newElement; if(action == DisplayerToolHOCR::ACTION_DRAW_GRAPHIC_RECT) { newElement = doc.create_root_node("div"); newElement->set_attribute("class", "ocr_graphic"); newElement->set_attribute("title", Glib::ustring::compose("bbox %1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height)); } else if(action == DisplayerToolHOCR::ACTION_DRAW_CAREA_RECT) { newElement = doc.create_root_node("div"); newElement->set_attribute("class", "ocr_carea"); newElement->set_attribute("title", Glib::ustring::compose("bbox %1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height)); } else if(action == DisplayerToolHOCR::ACTION_DRAW_PAR_RECT) { newElement = doc.create_root_node("p"); newElement->set_attribute("class", "ocr_par"); newElement->set_attribute("title", Glib::ustring::compose("bbox %1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height)); } else if(action == DisplayerToolHOCR::ACTION_DRAW_LINE_RECT) { newElement = doc.create_root_node("span"); newElement->set_attribute("class", "ocr_line"); std::set propLineBaseline = propAttrs["ocrx_line"]["baseline"]; // Tesseract does as follows: // row_height = x_height + ascenders - descenders // font_pt_size = row_height * 72 / dpi (72 = pointsPerInch) // As a first approximation, assume x_size = bbox.height() and ascenders = descenders = bbox.height() / 4 std::map titleAttrs; titleAttrs["bbox"] = Glib::ustring::compose("%1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height); titleAttrs["x_ascenders"] = Glib::ustring::compose("%1", 0.25 * bbox.height); titleAttrs["x_descenders"] = Glib::ustring::compose("%1", 0.25 * bbox.height); titleAttrs["x_size"] = Glib::ustring::compose("%1", bbox.height); titleAttrs["baseline"] = propLineBaseline.size() == 1 ? *propLineBaseline.begin() : Glib::ustring("0 0"); newElement->set_attribute("title", HOCRItem::serializeAttrGroup(titleAttrs)); } else if(action == DisplayerToolHOCR::ACTION_DRAW_WORD_RECT) { ui.entryAddWord->set_text(""); int response = ui.dialogAddWord->run(); ui.dialogAddWord->hide(); if(response != Gtk::RESPONSE_OK || ui.entryAddWord->get_text().empty()) { return; } newElement = doc.create_root_node("span"); newElement->set_attribute("class", "ocrx_word"); std::map> propWord = propAttrs["ocrx_word"]; newElement->set_attribute("lang", propWord["lang"].size() == 1 ? *propWord["lang"].begin() : m_document->defaultLanguage()); std::map titleAttrs; titleAttrs["bbox"] = Glib::ustring::compose("%1 %2 %3 %4", bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height); titleAttrs["x_font"] = propWord["title:x_font"].size() == 1 ? *propWord["title:x_font"].begin() : "sans"; titleAttrs["x_fsize"] = propWord["title:x_fsize"].size() == 1 ? *propWord["title:x_fsize"].begin() : Glib::ustring::compose("%1", std::round(bbox.height * 72. / currentItem->page()->resolution())); titleAttrs["x_wconf"] = "100"; newElement->set_attribute("title", HOCRItem::serializeAttrGroup(titleAttrs)); if (propWord["bold"].size() == 1) { newElement->set_attribute("bold", *propWord["bold"].begin()); } if (propWord["italic"].size() == 1) { newElement->set_attribute("italic", *propWord["italic"].begin()); } newElement->add_child_text(ui.entryAddWord->get_text()); } else { return; } Gtk::TreeIter index = m_document->addItem(current, newElement); if (index) { m_treeView->setCurrentIndex(index); } } void OutputEditorHOCR::showTreeWidgetContextMenu(GdkEventButton* ev) { std::vector paths = m_treeView->get_selection()->get_selected_rows(); int nIndices = paths.size(); if(nIndices > 1) { // Check if merging or swapping is allowed (items are valid siblings) const HOCRItem* firstItem = m_document->itemAtIndex(m_document->get_iter(paths.front())); if(!firstItem) { return; } std::set classes; classes.insert(firstItem->itemClass()); std::vector rows = {paths.front().back()}; for(int i = 1; i < nIndices; ++i) { const HOCRItem* item = m_document->itemAtIndex(m_document->get_iter(paths[i])); if(!item || item->parent() != firstItem->parent()) { return; } classes.insert(item->itemClass()); rows.push_back(paths[i].back()); } std::sort(rows.begin(), rows.end()); bool consecutive = (rows.back() - rows.front()) == nIndices - 1; bool graphics = firstItem->itemClass() == "ocr_graphic"; bool pages = firstItem->itemClass() == "ocr_page"; bool sameClass = classes.size() == 1; Gtk::Menu menu; Glib::RefPtr loop = Glib::MainLoop::create(); if(consecutive && !graphics && !pages && sameClass) { // Merging allowed Gtk::MenuItem* mergeItem = Gtk::manage(new Gtk::MenuItem(_("Merge"))); menu.append(*mergeItem); CONNECT(mergeItem, activate, [&] { Gtk::TreeIter newIndex = m_document->mergeItems(m_document->get_iter(paths.front())->parent(), rows.front(), rows.back()); m_treeView->setCurrentIndex(newIndex); }); if(firstItem->itemClass() != "ocr_carea") { Gtk::MenuItem* splitItem = Gtk::manage(new Gtk::MenuItem(_("Split from parent"))); menu.append(*splitItem); CONNECT(splitItem, activate, [&] { Gtk::TreeIter newIndex = m_document->splitItem(m_document->get_iter(paths.front())->parent(), rows.front(), rows.back()); m_treeView->setCurrentIndex(newIndex); expandCollapseChildren(newIndex, true); }); } } if(nIndices == 2) { // Swapping allowed Gtk::MenuItem* swapItem = Gtk::manage(new Gtk::MenuItem(_("Swap"))); menu.append(*swapItem); CONNECT(swapItem, activate, [&] { Gtk::TreeIter newIndex = m_document->swapItems(m_document->get_iter(paths.front())->parent(), rows.front(), rows.back()); m_treeView->setCurrentIndex(newIndex); }); } CONNECT(&menu, hide, [&] { loop->quit(); }); menu.show_all(); menu.popup(ev->button, ev->time); loop->run(); // Nothing else is allowed with multiple items selected return; } Gtk::TreeIter index = m_treeView->indexAtPos(ev->x, ev->y); const HOCRItem* item = m_document->itemAtIndex(index); if(!item) { return; } Gtk::Menu menu; Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocr_page") { Gtk::MenuItem* addGraphicItem = Gtk::manage(new Gtk::MenuItem(_("Add graphic region"))); menu.append(*addGraphicItem); CONNECT(addGraphicItem, activate, [this] { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_GRAPHIC_RECT); }); Gtk::MenuItem* addTextBlockItem = Gtk::manage(new Gtk::MenuItem(_("Add text block"))); menu.append(*addTextBlockItem); CONNECT(addTextBlockItem, activate, [this] { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_CAREA_RECT); }); } else if(itemClass == "ocr_carea") { Gtk::MenuItem* addParagraphItem = Gtk::manage(new Gtk::MenuItem(_("Add paragraph"))); menu.append(*addParagraphItem); CONNECT(addParagraphItem, activate, [this] { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_PAR_RECT); }); } else if(itemClass == "ocr_par") { Gtk::MenuItem* addLineItem = Gtk::manage(new Gtk::MenuItem(_("Add line"))); menu.append(*addLineItem); CONNECT(addLineItem, activate, [this] { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_LINE_RECT); }); } else if(itemClass == "ocr_line") { Gtk::MenuItem* addWordItem = Gtk::manage(new Gtk::MenuItem(_("Add word"))); menu.append(*addWordItem); CONNECT(addWordItem, activate, [this] { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_WORD_RECT); }); } else if(itemClass == "ocrx_word") { m_document->addSpellingActions(&menu, index); } if(!menu.get_children().empty()) { menu.append(*Gtk::manage(new Gtk::SeparatorMenuItem)); } if(itemClass == "ocr_par" || itemClass == "ocr_line" || itemClass == "ocrx_word") { Gtk::MenuItem* splitItem = Gtk::manage(new Gtk::MenuItem(_("Split from parent"))); CONNECT(splitItem, activate, [this, index, item] { Gtk::TreeIter newIndex = m_document->splitItem(index->parent(), item->index(), item->index()); m_treeView->setCurrentIndex(newIndex); expandCollapseChildren(newIndex, true); }); menu.append(*splitItem); } Gtk::MenuItem* removeItem = Gtk::manage(new Gtk::MenuItem(_("Remove"))); CONNECT(removeItem, activate, [this, index] { m_document->removeItem(index); }); menu.append(*removeItem); if(!index->children().empty()) { Gtk::MenuItem* expandItem = Gtk::manage(new Gtk::MenuItem(_("Expand all"))); CONNECT(expandItem, activate, [this, index] { expandCollapseChildren(index, true); }); menu.append(*expandItem); Gtk::MenuItem* collapseItem = Gtk::manage(new Gtk::MenuItem(_("Collapse all"))); CONNECT(collapseItem, activate, [this, index] { expandCollapseChildren(index, false); }); menu.append(*collapseItem); } Glib::RefPtr loop = Glib::MainLoop::create(); CONNECT(&menu, hide, [&] { loop->quit(); }); menu.show_all(); menu.popup(ev->button, ev->time); loop->run(); } void OutputEditorHOCR::pickItem(const Geometry::Point& point) { int pageNr; Glib::ustring filename = MAIN->getDisplayer()->getCurrentImage(pageNr); Gtk::TreeIter pageIndex = m_document->searchPage(filename, pageNr); const HOCRItem* currentItem = m_document->itemAtIndex(pageIndex); if(!currentItem) { return; } const HOCRPage* page = currentItem->page(); // Transform point in coordinate space used when page was OCRed double alpha = (page->angle() - MAIN->getDisplayer()->getCurrentAngle()) / 180. * M_PI; double scale = double(page->resolution()) / double(MAIN->getDisplayer()->getCurrentResolution()); Geometry::Point newPoint( scale * (point.x * std::cos(alpha) - point.y * std::sin(alpha)) + 0.5 * page->bbox().width, scale * (point.x * std::sin(alpha) + point.y * std::cos(alpha)) + 0.5 * page->bbox().height); m_treeView->setCurrentIndex(m_document->searchAtCanvasPos(pageIndex, newPoint)); m_treeView->grab_focus(); } bool OutputEditorHOCR::open(InsertMode mode, std::vector> files) { if(mode == InsertMode::Replace && !clear(false)) { return false; } if(files.empty()) { FileDialogs::FileFilter filter = {_("hOCR HTML Files"), {"text/html", "text/xml", "text/plain"}, {"*.html"}}; files = FileDialogs::open_dialog(_("Open hOCR File"), "", "outputdir", filter, true); } if(files.empty()) { return false; } std::vector failed; std::vector invalid; int added = 0; for(const Glib::RefPtr& file : files) { std::string filename = file->get_path(); std::string source; try { source = Glib::file_get_contents(filename); } catch(const Glib::Error&) { failed.push_back(filename); continue; } xmlpp::DomParser parser; try { parser.parse_memory(source); } catch(const xmlpp::exception&) { failed.push_back(filename); continue; } xmlpp::Document* doc = parser.get_document(); const xmlpp::Element* div = XmlUtils::firstChildElement(XmlUtils::firstChildElement(doc->get_root_node(), "body"), "div"); if(!div || div->get_attribute_value("class") != "ocr_page") { invalid.push_back(filename); continue; } int pos = mode == InsertMode::InsertBefore ? currentPage() : m_document->pageCount(); while(div) { m_document->insertPage(pos++, div, false, Glib::path_get_dirname(filename)); div = XmlUtils::nextSiblingElement(div, "div"); ++added; } } if(added > 0) { m_modified = mode != InsertMode::Replace; if(mode == InsertMode::Replace && m_filebasename.empty()) { m_filebasename = Utils::split_filename(files.front()->get_path()).first; } MAIN->setOutputPaneVisible(true); } std::vector errorMsg; if(!failed.empty()) { errorMsg.push_back(Glib::ustring::compose(_("The following files could not be opened:\n%1"), Utils::string_join(failed, "\n"))); } if(!invalid.empty()) { errorMsg.push_back(Glib::ustring::compose(_("The following files are not valid hOCR HTML:\n%1"), Utils::string_join(invalid, "\n"))); } if(!errorMsg.empty()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Unable to open files"), Utils::string_join(errorMsg, "\n\n")); } return added > 0; } bool OutputEditorHOCR::selectPage(int nr) { if(!m_document || nr >= m_document->pageCount()) { return false; } Gtk::TreeIter index = m_document->indexAtItem(m_document->page(nr)); if(index) { m_treeView->setCurrentIndex(index); } return index; } bool OutputEditorHOCR::save(const std::string& filename) { Glib::ustring outname = filename; if(outname.empty()) { Glib::ustring suggestion = m_filebasename; if(suggestion.empty()) { std::vector sources = MAIN->getSourceManager()->getSelectedSources(); if(!sources.empty()) { suggestion = Utils::split_filename(sources.front()->file->get_path()).first; } else { suggestion = _("output"); } } FileDialogs::FileFilter filter = {_("hOCR HTML Files"), {"text/html"}, {"*.html"}}; outname = FileDialogs::save_dialog(_("Save hOCR Output..."), suggestion + ".html", "outputdir", filter); if(outname.empty()) { return false; } } std::ofstream file(outname); if(!file.is_open()) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Failed to save output"), _("Check that you have writing permissions in the selected folder.")); return false; } std::string current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; setlocale(LC_ALL, current.c_str()); Glib::ustring header = Glib::ustring::compose( "\n" "\n" "\n" " %1\n" " \n" " \n" " \n" "\n", Glib::path_get_basename(outname), tess.Version()); m_document->convertSourcePaths(Glib::path_get_dirname(outname), false); Glib::ustring body = m_document->toHTML(); m_document->convertSourcePaths(Glib::path_get_dirname(outname), true); Glib::ustring footer = "\n"; file.write(header.data(), header.bytes()); file.write(body.data(), body.bytes()); file.write(footer.data(), footer.bytes()); m_modified = false; m_filebasename = Utils::split_filename(filename).first; return true; } bool OutputEditorHOCR::crashSave(const std::string& filename) const { std::ofstream file(filename); if(file.is_open()) { Glib::ustring header = Glib::ustring::compose( "\n" "\n" "\n" " %1\n" " \n" " \n" "\n", Glib::path_get_basename(filename)); m_document->convertSourcePaths(Glib::path_get_dirname(filename), false); Glib::ustring body = m_document->toHTML(); m_document->convertSourcePaths(Glib::path_get_dirname(filename), true); Glib::ustring footer = "\n"; file.write(header.data(), header.bytes()); file.write(body.data(), body.bytes()); file.write(footer.data(), footer.bytes()); return true; } return false; } bool OutputEditorHOCR::exportToODT() { std::string suggestion = m_filebasename; if(suggestion.empty()) { std::vector sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.empty() ? Glib::path_get_basename(sources.front()->displayname) : _("output"); } FileDialogs::FileFilter filter = {_("OpenDocument Text Documents"), {"application/vnd.oasis.opendocument.text"}, {"*.odt"}}; std::string outname = FileDialogs::save_dialog(_("Save ODT Output..."), suggestion + ".odt", "outputdir", filter); if(outname.empty()) { return false; } m_treeView->grab_focus(); // Ensure any item editor loses focus and commits its changes MAIN->getDisplayer()->setBlockAutoscale(true); bool success = HOCROdtExporter().run(m_document.get(), m_filebasename); MAIN->getDisplayer()->setBlockAutoscale(false); return success; } bool OutputEditorHOCR::exportToPDF() { if(m_document->pageCount() == 0) { return false; } ui.buttonPreview->set_active(false); // Disable preview because if conflicts with preview from PDF dialog const HOCRItem* item = m_document->itemAtIndex(m_treeView->currentIndex()); const HOCRPage* page = item ? item->page() : m_document->page(0); bool success = false; if(!showPage(page)) { return false; } HOCRPdfExportDialog dialog(m_tool, m_document.get(), page, MAIN->getWindow()); if(dialog.run() != Gtk::RESPONSE_OK) { return false; } HOCRPdfExporter::PDFSettings settings = dialog.getPdfSettings(); std::string suggestion = m_filebasename; if(suggestion.empty()) { std::vector sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.empty() ? Glib::path_get_basename(sources.front()->displayname) : _("output"); } std::string outname; while(true) { FileDialogs::FileFilter filter = {_("PDF Files"), {"application/pdf"}, {"*.pdf"}}; outname = FileDialogs::save_dialog(_("Save PDF Output..."), suggestion + ".pdf", "outputdir", filter); if(outname.empty()) { break; } if(m_document->referencesSource(outname)) { Utils::messageBox(Gtk::MESSAGE_ERROR, _("Invalid Output"), _("Cannot overwrite a file which is a source image of this document.")); continue; } break; } if(outname.empty()) { return false; } MAIN->getDisplayer()->setBlockAutoscale(true); success = HOCRPdfExporter().run(m_document.get(), outname, &settings); MAIN->getDisplayer()->setBlockAutoscale(false); return success; } bool OutputEditorHOCR::exportToText() { std::string suggestion = m_filebasename; if(suggestion.empty()) { std::vector sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.empty() ? Glib::path_get_basename(sources.front()->displayname) : _("output"); } FileDialogs::FileFilter filter = {_("Text Files"), {"text/plain"}, {"*.txt"}}; std::string outname = FileDialogs::save_dialog(_("Save Text Output..."), suggestion + ".txt", "outputdir", filter); if(outname.empty()) { return false; } m_treeView->grab_focus(); // Ensure any item editor loses focus and commits its changes return HOCRTextExporter().run(m_document.get(), m_filebasename); } bool OutputEditorHOCR::clear(bool hide) { m_connectionPreviewTimer.disconnect(); ui.buttonPreview->set_active(false); if(!ui.boxEditorHOCR->get_visible()) { return true; } if(m_modified) { int response = Utils::messageBox(Gtk::MESSAGE_QUESTION, _("Output not saved"), _("Save output before proceeding?"), "", Utils::Button::Save | Utils::Button::Discard | Utils::Button::Cancel); if(response == Utils::Button::Save) { if(!save()) { return false; } } else if(response != Utils::Button::Discard) { return false; } } m_document = Glib::RefPtr(new HOCRDocument()); CONNECTX(m_document, row_inserted, [this](const Gtk::TreePath&, const Gtk::TreeIter&) { setModified(); }); CONNECTX(m_document, row_deleted, [this](const Gtk::TreePath&) { setModified(); }); CONNECTX(m_document, row_changed, [this](const Gtk::TreePath&, const Gtk::TreeIter&) { setModified(); updateSourceText(); }); CONNECTX(m_document, item_attribute_changed, [this](const Gtk::TreeIter&, const Glib::ustring&, const Glib::ustring&) { setModified(); }); CONNECTX(m_document, item_attribute_changed, [this](const Gtk::TreeIter & it, const Glib::ustring & attr, const Glib::ustring & value) { updateAttributes(it, attr, value); updateSourceText(); }); m_treeView->set_model(m_document); ui.textviewSource->get_buffer()->set_text(""); m_tool->clearSelection(); m_modified = false; ui.buttonSave->set_sensitive(false); ui.buttonExport->set_sensitive(false); ui.boxNavigation->set_sensitive(false); m_filebasename.clear(); if(hide) { MAIN->setOutputPaneVisible(false); } return true; } void OutputEditorHOCR::setLanguage(const Config::Lang& lang) { m_document->setDefaultLanguage(lang.code); } void OutputEditorHOCR::onVisibilityChanged(bool /*visible*/) { m_searchFrame->hideSubstitutionsManager(); } bool OutputEditorHOCR::findReplaceInItem(const Gtk::TreeIter& index, const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace, bool& currentSelectionMatchesSearch) { // Check that the item is a word const HOCRItem* item = m_document->itemAtIndex(index); if(!item || item->itemClass() != "ocrx_word") { return false; } Gtk::TreePath path = m_document->get_path(index); // If the item is already in edit mode, continue searching inside the text if(m_treeViewTextCell->get_entry() && m_treeViewTextCell->get_current_path() == path.to_string()) { Gtk::Entry* editor = m_treeViewTextCell->get_entry(); Glib::ustring text = editor->get_text(); int start, end; bool hasSel = editor->get_selection_bounds(start, end); bool matchesSearch = hasSel && Utils::strings_equal(text.substr(start, end - start), searchstr, matchCase); if(matchesSearch && replace) { editor->set_text(text.substr(0, start) + replacestr + text.substr(end)); editor->select_region(start, start + replacestr.length()); return true; } bool matchesReplace = hasSel && Utils::strings_equal(text.substr(start, end - start), replacestr, matchCase); int pos = -1; if(backwards) { pos = start - 1; pos = pos < 0 ? -1 : Utils::string_lastIndex(text, searchstr, pos, matchCase); } else { pos = matchesSearch ? start + searchstr.length() : matchesReplace ? start + replacestr.length() : start; pos = Utils::string_firstIndex(text, searchstr, pos, matchCase); } if(pos != -1) { editor->select_region(pos, pos + searchstr.length()); return true; } currentSelectionMatchesSearch = matchesSearch; return false; } // Otherwise, if item contains text, set it in edit mode int pos = backwards ? Utils::string_lastIndex(item->text(), searchstr, -1, matchCase) : Utils::string_firstIndex(item->text(), searchstr, 0, matchCase); if(pos != -1) { if(m_treeViewTextCell->get_entry()) { m_treeViewTextCell->get_entry()->editing_done(); // Commit previous changes } m_treeView->setCurrentIndex(m_document->get_iter(path)); m_treeView->set_cursor(path, *m_treeView->get_column(0), *m_treeViewTextCell, true); g_assert(m_treeViewTextCell->get_current_path() == path.to_string() && m_treeViewTextCell->get_entry()); m_treeViewTextCell->get_entry()->select_region(pos, pos + searchstr.length()); return true; } return false; } void OutputEditorHOCR::findReplace(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace) { m_searchFrame->clearErrorState(); Gtk::TreeIter current = m_treeView->currentIndex(); if(!current) { current = m_document->get_iter(m_document->get_root_path(backwards ? (m_document->pageCount() - 1) : 0)); } Gtk::TreeIter neww = current; bool currentSelectionMatchesSearch = false; while(!findReplaceInItem(neww, searchstr, replacestr, matchCase, backwards, replace, currentSelectionMatchesSearch)) { neww = backwards ? m_document->prevIndex(neww) : m_document->nextIndex(neww); if(!neww || neww == current) { // Break endless loop if(!currentSelectionMatchesSearch) { m_searchFrame->setErrorState(); } return; } } } void OutputEditorHOCR::replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Replacing...")); Gtk::TreeIter start = m_document->get_iter(m_document->get_root_path(0)); Gtk::TreeIter curr = start; int count = 0; do { const HOCRItem* item = m_document->itemAtIndex(curr); if(item && item->itemClass() == "ocrx_word") { Glib::ustring text = item->text(); if(Utils::string_replace(text, searchstr, replacestr, matchCase)) { ++count; m_document->editItemText(curr, text); } } curr = m_document->nextIndex(curr); while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } } while(curr != start); if(count == 0) { m_searchFrame->setErrorState(); } MAIN->popState(); } void OutputEditorHOCR::applySubstitutions(const std::map& substitutions, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Applying substitutions...")); Gtk::TreeIter start = m_document->get_iter(m_document->get_root_path(0)); for(auto it = substitutions.begin(), itEnd = substitutions.end(); it != itEnd; ++it) { Glib::ustring search = it->first; Glib::ustring replace = it->second; Gtk::TreeIter curr = start; do { const HOCRItem* item = m_document->itemAtIndex(curr); if(item && item->itemClass() == "ocrx_word") { Glib::ustring text = item->text(); if(Utils::string_replace(text, search, replace, matchCase)) { m_document->editItemText(curr, text); } } curr = m_document->nextIndex(curr); while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } } while(curr != start); } MAIN->popState(); } void OutputEditorHOCR::sourceChanged() { int page; std::string path = MAIN->getDisplayer()->getCurrentImage(page); // Check if source is in document tree Gtk::TreeIter pageIndex = m_document->searchPage(path, page); if(!pageIndex) { ui.buttonPreview->set_active(false); m_treeView->setCurrentIndex(Gtk::TreeIter()); } else { Gtk::TreeIter curIndex = m_treeView->currentIndex(); while(curIndex && curIndex != pageIndex && curIndex->parent()) { curIndex = curIndex->parent(); } if(curIndex && curIndex != pageIndex) { m_treeView->setCurrentIndex(pageIndex); } } } void OutputEditorHOCR::previewToggled() { Gtk::TreeIter index = m_treeView->currentIndex(); if(ui.buttonPreview->get_active() && !index && m_document->pageCount() > 0) { m_treeView->setCurrentIndex(m_document->indexAtItem(m_document->page(0))); } else { updatePreview(); } } void OutputEditorHOCR::updatePreview() { const HOCRItem* item = m_document->itemAtIndex(m_treeView->currentIndex()); if(!ui.buttonPreview->get_active() || !item) { m_preview->setVisible(false); return; } const HOCRPage* page = item->page(); const Geometry::Rectangle& bbox = page->bbox(); Cairo::RefPtr image = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, bbox.width, bbox.height); Cairo::RefPtr context = Cairo::Context::create(image); context->save(); context->rectangle(0, 0, image->get_width(), image->get_height()); context->set_source_rgba(1., 1., 1., .5); context->fill(); context->restore(); drawPreview(context, page); m_preview->setImage(image); m_preview->setRect(Geometry::Rectangle(-0.5 * image->get_width(), -0.5 * image->get_height(), image->get_width(), image->get_height())); m_preview->setVisible(true); } void OutputEditorHOCR::drawPreview(Cairo::RefPtr context, const HOCRItem* item) { if(!item->isEnabled()) { return; } Glib::ustring itemClass = item->itemClass(); if(itemClass == "ocr_line") { std::pair baseline = item->baseLine(); const Geometry::Rectangle& lineRect = item->bbox(); for(HOCRItem* wordItem : item->children()) { if(!wordItem->isEnabled()) { continue; } const Geometry::Rectangle& wordRect = wordItem->bbox(); context->select_font_face(wordItem->fontFamily().empty() ? "sans" : wordItem->fontFamily(), wordItem->fontItalic() ? Cairo::FONT_SLANT_ITALIC : Cairo::FONT_SLANT_NORMAL, wordItem->fontBold() ? Cairo::FONT_WEIGHT_BOLD : Cairo::FONT_WEIGHT_NORMAL); context->set_font_size(wordItem->fontSize() * (item->page()->resolution() / 72.)); // See https://github.com/kba/hocr-spec/issues/15 double y = lineRect.y + lineRect.height + (wordRect.x + 0.5 * wordRect.width - lineRect.x) * baseline.first + baseline.second; context->move_to(wordRect.x, y); context->show_text(wordItem->text()); } } else if(itemClass == "ocr_graphic") { const Geometry::Rectangle& bbox = item->bbox(); context->save(); context->move_to(bbox.x, bbox.y); context->set_source(m_tool->getSelection(bbox), bbox.x, bbox.y); context->paint(); context->restore(); } else { for(HOCRItem* childItem : item->children()) { drawPreview(context, childItem);; } } } gImageReader-3.4.0/gtk/src/hocr/OutputEditorHOCR.hh000066400000000000000000000150601417507262200220150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorHOCR.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITORHOCR_HH #define OUTPUTEDITORHOCR_HH #include #include "Config.hh" #include "Geometry.hh" #include "OutputEditor.hh" #include "ui_OutputEditorHOCR.hh" class DisplayerImageItem; class DisplayerToolHOCR; namespace Geometry { class Rectangle; } class HOCRDocument; class HOCRItem; class HOCRPage; class SearchReplaceFrame; class OutputEditorHOCR : public OutputEditor { public: class HOCRBatchProcessor : public BatchProcessor { public: std::string fileSuffix() const override { return std::string(".html"); } void writeHeader(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo) const override; void writeFooter(std::ostream& dev) const override; void appendOutput(std::ostream& dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfos, bool firstArea) const override; }; enum class InsertMode { Replace, Append, InsertBefore }; OutputEditorHOCR(DisplayerToolHOCR* tool); ~OutputEditorHOCR(); Gtk::Box* getUI() const override { return ui.boxEditorHOCR; } ReadSessionData* initRead(tesseract::TessBaseAPI& tess) override; void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) override; void readError(const Glib::ustring& errorMsg, ReadSessionData* data) override; void finalizeRead(ReadSessionData* data) override; BatchProcessor* createBatchProcessor(const std::map& /*options*/) const override { return new HOCRBatchProcessor; } bool containsSource(const std::string& source, int sourcePage) const override; void onVisibilityChanged(bool /*visible*/) override; bool clear(bool hide = true) override; void setLanguage(const Config::Lang& lang) override; bool open(const std::string& file) override { return open(InsertMode::Replace, {Gio::File::create_for_path(file)}); } bool crashSave(const std::string& filename) const override; bool open(InsertMode mode, std::vector> files = std::vector>()); bool save(const std::string& filename = ""); bool exportToPDF(); bool exportToText(); bool exportToODT(); HOCRDocument* getDocument() const { return m_document.get(); } DisplayerToolHOCR* getTool() const { return m_tool; } bool selectPage(int nr); private: class HOCRTreeView; class HOCRCellRendererText; class HOCRAttribRenderer; struct HOCRReadSessionData : ReadSessionData { int insertIndex; std::vector errors; }; struct NavigationComboColumns : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn label; Gtk::TreeModelColumn itemClass; NavigationComboColumns() { add(label); add(itemClass); } } m_navigationComboCols; struct PropStoreColumns : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn attr; Gtk::TreeModelColumn name; Gtk::TreeModelColumn value; Gtk::TreeModelColumn multiple; Gtk::TreeModelColumn placeholder; Gtk::TreeModelColumn itemClass; Gtk::TreeModelColumn editable; Gtk::TreeModelColumn background; Gtk::TreeModelColumn weight; PropStoreColumns() { add(attr); add(name); add(value); add(multiple); add(placeholder); add(itemClass); add(editable); add(background); add(weight); } } m_propStoreCols; Ui::OutputEditorHOCR ui; ClassData m_classdata; DisplayerImageItem* m_preview = nullptr; sigc::connection m_connectionPreviewTimer; HOCRTreeView* m_treeView; HOCRCellRendererText* m_treeViewTextCell; Glib::RefPtr m_propStore; SearchReplaceFrame* m_searchFrame; DisplayerToolHOCR* m_tool; bool m_modified = false; std::string m_filebasename; InsertMode m_insertMode = InsertMode::Append; Glib::RefPtr m_document; sigc::connection m_connectionCustomFont; sigc::connection m_connectionDefaultFont; sigc::connection m_connectionSourceChanged; Glib::RefPtr attributeValidator(const Glib::ustring& attribName) const; bool attributeEditable(const Glib::ustring& attribName) const; void expandCollapseChildren(const Gtk::TreeIter& index, bool expand) const; bool findReplaceInItem(const Gtk::TreeIter& index, const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace, bool& currentSelectionMatchesSearch); bool showPage(const HOCRPage* page); int currentPage(); void bboxDrawn(const Geometry::Rectangle& bbox, int action); void addPage(const Glib::ustring& hocrText, HOCRReadSessionData data); void editAttribute(const Glib::ustring& path, const Glib::ustring& value); void expandCollapseItemClass(bool expand); void navigateNextPrev(bool next); void navigateTargetChanged(); void pickItem(const Geometry::Point& point); void setFont(); void setInsertMode(InsertMode mode, const std::string& iconName); void setModified(); void showItemProperties(const Gtk::TreeIter& index, const Gtk::TreeIter& prev = Gtk::TreeIter()); void showTreeWidgetContextMenu(GdkEventButton* ev); void itemAttributeChanged(const Gtk::TreeIter& itemIndex, const Glib::ustring& name, const Glib::ustring& value); void updateSourceText(); void updateAttributes(const Gtk::TreeIter& it, const Glib::ustring& attr, const Glib::ustring& value); void updateCurrentItemBBox(const Geometry::Rectangle& bbox); void findReplace(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase, bool backwards, bool replace); void replaceAll(const Glib::ustring& searchstr, const Glib::ustring& replacestr, bool matchCase); void applySubstitutions(const std::map& substitutions, bool matchCase); void sourceChanged(); void previewToggled(); void updatePreview(); void drawPreview(Cairo::RefPtr context, const HOCRItem* item); }; #endif // OUTPUTEDITORHOCR_HH gImageReader-3.4.0/gtk/src/hocr/XmlUtils.cc000066400000000000000000000053311417507262200204410ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * XmlUtils.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "XmlUtils.hh" #include "Utils.hh" #include #include Glib::ustring XmlUtils::elementText(const xmlpp::Element* element) { if(!element) { return Glib::ustring(); } Glib::ustring text; for(const xmlpp::Node* node : element->get_children()) { if(dynamic_cast(node)) { text += static_cast(node)->get_content(); } else if(dynamic_cast(node)) { text += elementText(static_cast(node)); } } return Utils::string_trim(text); } const xmlpp::Element* XmlUtils::firstChildElement(const xmlpp::Node* node, const Glib::ustring& name) { if(!node) { return nullptr; } const xmlpp::Node* child = node->get_first_child(name); while(child && !dynamic_cast(child)) { child = child->get_next_sibling(); } return child ? static_cast(child) : nullptr; } const xmlpp::Element* XmlUtils::nextSiblingElement(const xmlpp::Node* node, const Glib::ustring& name) { if(!node) { return nullptr; } const xmlpp::Node* child = node->get_next_sibling(); if(name != "") { while(child && (child->get_name() != name || !dynamic_cast(child))) { child = child->get_next_sibling(); } } else { while(child && !dynamic_cast(child)) { child = child->get_next_sibling(); } } return child ? static_cast(child) : nullptr; } std::list XmlUtils::elementsByTagName(const xmlpp::Element* element, const Glib::ustring& name) { std::list elems; for(const xmlpp::Node* child : element->get_children()) { if(const xmlpp::Element* childElem = dynamic_cast(child)) { if(childElem->get_name() == name) { elems.push_back(childElem); } elems.splice(elems.end(), elementsByTagName(childElem, name)); } } return elems; } gImageReader-3.4.0/gtk/src/hocr/XmlUtils.hh000066400000000000000000000026341417507262200204560ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * XmlUtils.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef XMLUTILS_HH #define XMLUTILS_HH #include #include namespace xmlpp { class Document; class Element; class Node; } class XmlUtils { public: static Glib::ustring elementText(const xmlpp::Element* element); static const xmlpp::Element* firstChildElement(const xmlpp::Node* node, const Glib::ustring& name = Glib::ustring()); static const xmlpp::Element* nextSiblingElement(const xmlpp::Node* node, const Glib::ustring& name = Glib::ustring()); static std::list elementsByTagName(const xmlpp::Element* element, const Glib::ustring& name); }; #endif // XMLUTILS_HH gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/000077500000000000000000000000001417507262200224135ustar00rootroot00000000000000gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/Displayer.diff000066400000000000000000000056361417507262200252130ustar00rootroot00000000000000diff --git a/gtk/src/Displayer.cc b/gtk/src/Displayer.cc index e466e70f..c07e2280 100644 --- a/gtk/src/Displayer.cc +++ b/gtk/src/Displayer.cc @@ -99,6 +99,10 @@ Displayer::Displayer(const Ui::MainWindow& _ui) ui.iconviewThumbnails->scroll_to_path(path, false, 0., 0.); m_connection_thumbClicked.block(false); }); + CONNECT(m_hadj, changed, [this] { m_signalViewportChanged.emit(); }); + CONNECT(m_hadj, value_changed, [this] { m_signalViewportChanged.emit(); }); + CONNECT(m_vadj, changed, [this] { m_signalViewportChanged.emit(); }); + CONNECT(m_vadj, value_changed, [this] { m_signalViewportChanged.emit(); }); ADD_SETTING(SwitchSettingT("thumbnails", ui.checkBoxThumbnails)); // Adjust paned position as soon as window is visible @@ -387,6 +391,7 @@ void Displayer::setZoom(Zoom zoom) { m_connection_zoomfitClicked.block(false); m_connection_zoomoneClicked.block(false); + m_signalViewportChanged.emit(); } void Displayer::setRotateMode(RotateMode mode, const std::string& iconName) { @@ -671,6 +676,14 @@ Geometry::Point Displayer::mapToView(const Geometry::Point& p) const { alloc.get_y() + 0.5 * alloc.get_height() + p.y * m_scale); } +void Displayer::mapViewToRoot(int x_view, int y_view, int& x_root, int& y_root) const { + ui.viewportDisplay->translate_coordinates(*ui.viewportDisplay->get_toplevel(), x_view, y_view, x_root, y_root); + int win_x, win_y; + MAIN->getWindow()->get_window()->get_origin(win_x, win_y); + x_root += win_x - m_hadj->get_value(); + y_root += win_y - m_vadj->get_value(); +} + Cairo::RefPtr Displayer::getImage(const Geometry::Rectangle& rect) const { Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, std::ceil(rect.width), std::ceil(rect.height)); Cairo::RefPtr ctx = Cairo::Context::create(surf); diff --git a/gtk/src/Displayer.hh b/gtk/src/Displayer.hh index ae6d1012..80e80deb 100644 --- a/gtk/src/Displayer.hh +++ b/gtk/src/Displayer.hh @@ -62,6 +62,7 @@ public: Geometry::Rectangle getSceneBoundingRect() const; Geometry::Point mapToSceneClamped(const Geometry::Point& p) const; Geometry::Point mapToView(const Geometry::Point& p) const; + void mapViewToRoot(int x_view, int y_view, int& x_root, int& y_root) const; bool hasMultipleOCRAreas(); std::vector> getOCRAreas(); bool allowAutodetectOCRAreas() const; @@ -77,6 +78,8 @@ public: void resortItems(); void setBlockAutoscale(bool block); + sigc::signal signal_viewportChanged() const { return m_signalViewportChanged; } + private: enum class Zoom { In, Out, Fit, One }; @@ -102,6 +105,8 @@ private: double m_panPos[2] = {0., 0.}; Glib::RefPtr m_defaultCursor; + sigc::signal m_signalViewportChanged; + sigc::connection m_renderTimer; sigc::connection m_connection_pageSpinChanged; sigc::connection m_connection_rotSpinChanged; gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc000066400000000000000000000627171417507262200264400ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRProofReadWidget.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "HOCRProofReadWidget.hh" #include "Displayer.hh" #include "ConfigSettings.hh" #include "HOCRDocument.hh" #include "HOCRProofReadWidget.hh" #include "HOCRSpellChecker.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "Utils.hh" #include class HOCRProofReadWidget::LineEdit : public Gtk::Entry { public: LineEdit(HOCRProofReadWidget* proofReadWidget, HOCRItem* wordItem) : m_proofReadWidget(proofReadWidget), m_wordItem(wordItem) { set_text(wordItem->text()); CONNECT(this, changed, [this] {onTextChanged(); }); Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); CONNECT(document, row_changed, [this](const Gtk::TreePath & path, const Gtk::TreeIter & iter) { onModelDataChanged(path, iter); }); CONNECT(document, item_attribute_changed, [this](const Gtk::TreeIter & iter, const Glib::ustring & name, const Glib::ustring & value) { onAttributeChanged(iter, name, value); }); CONNECT(this, key_press_event, [this](GdkEventKey * ev) { return key_press_event(ev); }, false); CONNECT(this, focus_in_event, [this](GdkEventFocus * ev) { return focus_in_event(ev); }, false); Gtk::TreeIter index = document->indexAtItem(m_wordItem); if(document->indexIsMisspelledWord(index)) { Utils::set_error_state(this); } Pango::FontDescription font; font.set_weight(m_wordItem->fontBold() ? Pango::WEIGHT_BOLD : Pango::WEIGHT_NORMAL); font.set_style(m_wordItem->fontItalic() ? Pango::STYLE_ITALIC : Pango::STYLE_NORMAL); override_font(font); set_width_chars(1); get_style_context()->add_provider(entryStyleProvider(), 1000); get_style_context()->add_class("nopadding"); } const HOCRItem* item() const { return m_wordItem; } private: ClassData m_classdata; HOCRProofReadWidget* m_proofReadWidget = nullptr; HOCRItem* m_wordItem = nullptr; bool m_blockSetText = false; static Glib::RefPtr entryStyleProvider() { static Glib::RefPtr provider = createEntryStyleProvider(); return provider; } static Glib::RefPtr createEntryStyleProvider() { Glib::RefPtr provider = Gtk::CssProvider::create(); provider->load_from_data(".nopadding { padding: 1px; border: 1px solid #ddd; }"); return provider; } void onTextChanged() { Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); // Update data in document Gtk::TreeIter index = document->indexAtItem(m_wordItem); m_blockSetText = true; document->editItemText(index, get_text()); m_blockSetText = false; } void onModelDataChanged(const Gtk::TreePath& /*path*/, const Gtk::TreeIter& iter) { Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); Gtk::TreeIter index = document->indexAtItem(m_wordItem); if(iter == index) { set_text(m_wordItem->text()); if(document->indexIsMisspelledWord(index)) { Utils::set_error_state(this); } else { Utils::clear_error_state(this); } } } void onAttributeChanged(const Gtk::TreeIter& iter, const Glib::ustring& name, const Glib::ustring& /*value*/) { Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); if(document->itemAtIndex(iter) == m_wordItem) { if(name == "bold" || name == "italic") { Pango::FontDescription font; font.set_weight(m_wordItem->fontBold() ? Pango::WEIGHT_BOLD : Pango::WEIGHT_NORMAL); font.set_style(m_wordItem->fontItalic() ? Pango::STYLE_ITALIC : Pango::STYLE_NORMAL); override_font(font); } else if(name == "title:bbox") { Geometry::Point sceneCorner = MAIN->getDisplayer()->getSceneBoundingRect().topLeft(); Geometry::Rectangle sceneBBox = m_wordItem->bbox().translate(sceneCorner.x, sceneCorner.y); Geometry::Point bottomLeft = MAIN->getDisplayer()->mapToView(sceneBBox.bottomLeft()); Geometry::Point bottomRight = MAIN->getDisplayer()->mapToView(sceneBBox.bottomRight()); // TODO? // int frameX = parentWidget()->parentWidget()->parentWidget()->pos().x(); // move(bottomLeft.x - frameX, 0); int min_height, nat_height; get_preferred_height(min_height, nat_height); set_size_request(bottomRight.x - bottomLeft.x + 8, nat_height); // 8: border + padding } } } bool key_press_event(GdkEventKey* ev) { Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); bool nextLine = (ev->state == 0 && ev->keyval == GDK_KEY_Down) || (ev->keyval == GDK_KEY_Tab && m_wordItem == m_wordItem->parent()->children().back()); bool prevLine = (ev->state == 0 && ev->keyval == GDK_KEY_Up) || (ev->state == GdkModifierType::GDK_SHIFT_MASK && ev->keyval == GDK_KEY_Tab && m_wordItem == m_wordItem->parent()->children().front()); if(nextLine || prevLine) { bool next = false; Gtk::TreeIter index; if(nextLine) { next = true; index = document->indexAtItem(m_wordItem); // Move to first word of next line index = document->prevOrNextIndex(next, index, "ocr_line"); index = document->prevOrNextIndex(true, index, "ocrx_word"); } else if(prevLine) { index = document->indexAtItem(m_wordItem); // Move to last word of prev line index = document->prevOrNextIndex(false, index, "ocr_line"); index = document->prevOrNextIndex(false, index, "ocrx_word"); } m_proofReadWidget->documentTree()->get_selection()->unselect_all(); m_proofReadWidget->documentTree()->get_selection()->select(index); } else if(ev->keyval == GDK_KEY_space && ev->state == GdkModifierType::GDK_CONTROL_MASK) { // Spelling menu Gtk::TreeIter index = document->indexAtItem(m_wordItem); Gtk::Menu menu; document->addSpellingActions(&menu, index); auto positioner = sigc::bind(sigc::ptr_fun(Utils::popup_positioner), this, &menu, false, true); menu.popup(positioner, 0, gtk_get_current_event_time()); } else if((ev->keyval == GDK_KEY_Return || ev->keyval == GDK_KEY_KP_Enter) && ev->state == GdkModifierType::GDK_CONTROL_MASK) { Gtk::TreeIter index = document->indexAtItem(m_wordItem); document->addWordToDictionary(index); } else if(ev->keyval == GDK_KEY_b && ev->state == GdkModifierType::GDK_CONTROL_MASK) { // Bold Gtk::TreeIter index = document->indexAtItem(m_wordItem); document->editItemAttribute(index, "bold", m_wordItem->fontBold() ? "0" : "1"); } else if(ev->keyval == GDK_KEY_i && ev->state == GdkModifierType::GDK_CONTROL_MASK) { // Italic Gtk::TreeIter index = document->indexAtItem(m_wordItem); document->editItemAttribute(index, "italic", m_wordItem->fontItalic() ? "0" : "1"); } else if((ev->keyval == GDK_KEY_Up || ev->keyval == GDK_KEY_Down) && ev->state & GdkModifierType::GDK_CONTROL_MASK) { // Adjust bbox top/bottom Gtk::TreeIter index = document->indexAtItem(m_wordItem); Geometry::Rectangle bbox = m_wordItem->bbox(); if(ev->state & GdkModifierType::GDK_SHIFT_MASK) { bbox.setBottom(bbox.bottom() + (ev->keyval == GDK_KEY_Up ? -1 : 1)); } else { bbox.setTop(bbox.top() + (ev->keyval == GDK_KEY_Up ? -1 : 1)); } Glib::ustring bboxstr = Glib::ustring::compose("%1 %2 %3 %4", bbox.left(), bbox.top(), bbox.right(), bbox.bottom()); document->editItemAttribute(index, "title:bbox", bboxstr); } else if((ev->keyval == GDK_KEY_Left || ev->keyval == GDK_KEY_Right) && ev->state & GdkModifierType::GDK_CONTROL_MASK) { // Adjust bbox left/right Gtk::TreeIter index = document->indexAtItem(m_wordItem); Geometry::Rectangle bbox = m_wordItem->bbox(); if(ev->state & GdkModifierType::GDK_SHIFT_MASK) { bbox.setRight(bbox.right() + (ev->keyval == GDK_KEY_Left ? -1 : 1)); } else { bbox.setLeft(bbox.left() + (ev->keyval == GDK_KEY_Left ? -1 : 1)); } Glib::ustring bboxstr = Glib::ustring::compose("%1 %2 %3 %4", bbox.left(), bbox.top(), bbox.right(), bbox.bottom()); document->editItemAttribute(index, "title:bbox", bboxstr); } else if(ev->keyval == GDK_KEY_D && ev->state == GdkModifierType::GDK_CONTROL_MASK) { // Divide Gtk::TreeIter index = document->indexAtItem(m_wordItem); document->splitItemText(index, property_cursor_position(), get_pango_context()); } else if(ev->keyval == GDK_KEY_M && ev->state & GdkModifierType::GDK_CONTROL_MASK) { // Merge Gtk::TreeIter index = document->indexAtItem(m_wordItem); document->mergeItemText(index, (ev->state & GdkModifierType::GDK_SHIFT_MASK) != 0); } else if(ev->keyval == GDK_KEY_Delete && ev->state == GdkModifierType::GDK_CONTROL_MASK) { Gtk::TreeIter index = document->indexAtItem(m_wordItem); document-> removeItem(index); } else if(ev->keyval == GDK_KEY_plus && ev->state & GdkModifierType::GDK_CONTROL_MASK) { m_proofReadWidget->adjustFontSize(+1); } else if((ev->keyval == GDK_KEY_minus || ev->keyval == GDK_KEY_underscore) && ev->state & GdkModifierType::GDK_CONTROL_MASK) { m_proofReadWidget->adjustFontSize(-1); } else { return false; } return true; } bool focus_in_event(GdkEventFocus* ev) { Glib::RefPtr document = Glib::RefPtr::cast_static(m_proofReadWidget->documentTree()->get_model()); m_proofReadWidget->documentTree()->get_selection()->unselect_all(); m_proofReadWidget->documentTree()->get_selection()->select(document->indexAtItem(m_wordItem)); m_proofReadWidget->setConfidenceLabel(std::atoi(m_wordItem->getTitleAttribute("x_wconf").data())); return false; // TODO // if(ev->reason() != Qt::MouseFocusReason) { // deselect(); // setCursorPosition(0); // } } }; HOCRProofReadWidget::HOCRProofReadWidget(Gtk::TreeView* treeView) : Gtk::Window(Gtk::WINDOW_POPUP), m_treeView(treeView) { m_mainLayout = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); m_mainLayout->set_margin_left(2); m_mainLayout->set_margin_right(2); m_mainLayout->set_margin_top(2); m_mainLayout->set_margin_bottom(2); m_mainLayout->set_spacing(2); add(*m_mainLayout); set_transient_for(*MAIN->getWindow()); m_linesLayout = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); m_mainLayout->pack_start(*m_linesLayout, false, true); m_controlsWidget = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); m_controlsWidget->set_spacing(2); m_mainLayout->pack_start(*m_controlsWidget, false, true); Pango::FontDescription smallFont; smallFont.set_size(0.8 * smallFont.get_size()); m_confidenceLabel = Gtk::manage(new Gtk::Label()); m_confidenceLabel->override_font(smallFont); m_controlsWidget->pack_start(*m_confidenceLabel, true, true); Gtk::Button* helpButton = Gtk::manage(new Gtk::Button(_("Keyboard shortcuts"))); helpButton->set_relief(Gtk::RELIEF_NONE); CONNECT(helpButton, clicked, [this] { showShortcutsDialog(); }); m_controlsWidget->pack_start(*helpButton, false, true); m_settingsButton = Gtk::manage(new Gtk::Button()); m_settingsButton->set_relief(Gtk::RELIEF_NONE); m_settingsButton->set_image_from_icon_name("preferences-system"); CONNECT(m_settingsButton, clicked, [this] { showSettingsMenu(); }); m_controlsWidget->pack_start(*m_settingsButton, false, true); m_settingsMenu = new Gtk::Window(Gtk::WINDOW_POPUP); m_settingsMenu->set_type_hint(Gdk::WINDOW_TYPE_HINT_POPUP_MENU); m_settingsMenu->set_attached_to(*this); Gtk::Grid* grid = Gtk::manage(new Gtk::Grid()); grid->set_column_spacing(2); grid->set_row_spacing(2); m_settingsMenu->add(*grid); grid->attach(*Gtk::manage(new Gtk::Label(_("Lines before:"))), 0, 0); m_spinLinesBefore = Gtk::manage(new Gtk::SpinButton()); m_spinLinesBefore->set_range(0, 10); m_spinLinesBefore->set_increments(1, 1); CONNECT(m_spinLinesBefore, value_changed, [this] { updateWidget(true); }); grid->attach(*m_spinLinesBefore, 1, 0); grid->attach(*Gtk::manage(new Gtk::Label(_("Lines after:"))), 0, 0); m_spinLinesAfter = Gtk::manage(new Gtk::SpinButton()); m_spinLinesAfter->set_range(0, 10); m_spinLinesAfter->set_increments(1, 1); CONNECT(m_spinLinesAfter, value_changed, [this] { updateWidget(true); }); grid->attach(*m_spinLinesAfter, 1, 0); m_settingsMenu->show_all(); m_settingsMenu->hide(); ADD_SETTING(SpinSetting("proofreadlinesbefore", m_spinLinesBefore)); ADD_SETTING(SpinSetting("proofreadlinesafter", m_spinLinesAfter)); CONNECT(m_treeView->get_selection(), changed, [this] { updateWidget(); }); Glib::RefPtr document = Glib::RefPtr::cast_static(documentTree()->get_model()); // Clear for rebuild if structure changes CONNECT(document, row_deleted, [this](const Gtk::TreePath&) { updateWidget(); }); CONNECT(document, row_inserted, [this](const Gtk::TreePath&, const Gtk::TreeIter&) { updateWidget(); }); CONNECT(document, rows_reordered, [this](const Gtk::TreePath&, const Gtk::TreeIter&, int*) { updateWidget(); }); // CONNECT(MAIN->getDisplayer(), imageChanged, [this] { updateWidget(true); }); CONNECT(MAIN->getDisplayer(), viewportChanged, [this] { repositionWidget(); }); CONNECT(MAIN->getWindow(), window_state_event, [this](GdkEventWindowState * ev) { set_visible(ev->new_window_state == GDK_WINDOW_STATE_FOCUSED); return false; }); Glib::RefPtr wconfStyleProvider = Gtk::CssProvider::create(); wconfStyleProvider->load_from_data( ".wconfLt70 { background-color: #ffb2b2; }" ".wconfLt80 { background-color: #ffdab0; }" ".wconfLt90 { background-color: #fffdb4; }" ); m_confidenceLabel->get_style_context()->add_provider(wconfStyleProvider, 10000); // Show all children, but start hidden show_all(); hide(); } HOCRProofReadWidget::~HOCRProofReadWidget() { delete m_settingsMenu; } void HOCRProofReadWidget::showSettingsMenu() { int x_root, y_root; m_settingsButton->get_window()->get_origin(x_root, y_root); x_root += m_settingsButton->get_allocation().get_x(); y_root += m_settingsButton->get_allocation().get_y(); Glib::RefPtr loop = Glib::MainLoop::create(); Glib::RefPtr screen = MAIN->getWindow()->get_screen(); Gdk::Rectangle rect = screen->get_monitor_workarea(screen->get_monitor_at_point(x_root, y_root)); int w, h, trash; m_settingsMenu->get_preferred_width(trash, w); m_settingsMenu->get_preferred_height(trash, h); int x = std::min(std::max(int(x_root), rect.get_x()), rect.get_x() + rect.get_width() - w); int y = std::min(std::max(int(y_root), rect.get_y()), rect.get_y() + rect.get_height() - h); m_settingsMenu->move(x, y); m_settingsMenu->show(); GdkWindow* gdkwin = m_settingsMenu->get_window()->gobj(); #if GTK_CHECK_VERSION(3,20,0) gdk_seat_grab(gdk_device_get_seat(gtk_get_current_event_device()), gdkwin, GDK_SEAT_CAPABILITY_ALL, true, nullptr, nullptr, nullptr, nullptr); #else gdk_device_grab(gtk_get_current_event_device(), gdkwin, GDK_OWNERSHIP_APPLICATION, true, GDK_BUTTON_PRESS_MASK, nullptr, event->time); #endif loop->run(); m_settingsMenu->hide(); #if GTK_CHECK_VERSION(3,20,0) gdk_seat_ungrab(gdk_device_get_seat(gtk_get_current_event_device())); #else gdk_device_ungrab(gtk_get_current_event_device(), gtk_get_current_event_time()); #endif } void HOCRProofReadWidget::clear() { for(auto it = m_currentLines.begin(), itEnd = m_currentLines.end(); it != itEnd; ++it) { delete it->second; } m_currentLines.clear(); m_currentLine = nullptr; m_confidenceLabel->set_text(""); for(const Glib::ustring& className : m_confidenceLabel->get_style_context()->list_classes()) { m_confidenceLabel->get_style_context()->remove_class(className); } hide(); } void HOCRProofReadWidget::updateWidget(bool force) { Glib::RefPtr document = Glib::RefPtr::cast_static(m_treeView->get_model()); std::vector items = m_treeView->get_selection()->get_selected_rows(); Gtk::TreeIter current = items.empty() ? Gtk::TreeIter() : document->get_iter(items[0]); int nrLinesBefore = m_spinLinesBefore->get_value_as_int(); int nrLinesAfter = m_spinLinesAfter->get_value_as_int(); const HOCRItem* item = document->itemAtIndex(current); if(!item) { clear(); return; } const HOCRItem* lineItem = nullptr; const HOCRItem* wordItem = nullptr; if(item->itemClass() == "ocrx_word") { lineItem = item->parent(); wordItem = item; } else if(item->itemClass() == "ocr_line") { lineItem = item; } else { clear(); return; } const std::vector& siblings = lineItem->parent()->children(); int targetLine = lineItem->index(); if(lineItem != m_currentLine || force) { // Rebuild widget std::map newLines; int insPos = 0; for(int i = std::max(0, targetLine - nrLinesBefore), j = std::min(int(siblings.size()) - 1, targetLine + nrLinesAfter); i <= j; ++i) { HOCRItem* linei = siblings[i]; auto it = m_currentLines.find(linei); if(it != m_currentLines.end()) { newLines[linei] = it->second; m_currentLines.erase(it); insPos = Utils::vector_index_of(m_linesLayout->get_children(), static_cast(newLines[linei])) + 1; } else { Gtk::Box* lineWidget = Gtk::manage(new Gtk::Box); for(HOCRItem* word : siblings[i]->children()) { lineWidget->pack_start(*Gtk::manage(new LineEdit(this, word)), false, true); } m_linesLayout->pack_start(*lineWidget, false, true); m_linesLayout->reorder_child(*lineWidget, insPos++); newLines.insert(std::make_pair(linei, lineWidget)); } } for(auto it = m_currentLines.begin(), itEnd = m_currentLines.end(); it != itEnd; ++it) { delete it->second; } m_currentLines.clear(); m_currentLines = newLines; m_currentLine = lineItem; repositionWidget(); } // Select selected word or first item of middle line LineEdit* focusLineEdit = static_cast(m_currentLines[lineItem]->get_children()[wordItem ? wordItem->index() : 0]); if(focusLineEdit && !m_treeView->has_focus()) { focusLineEdit->grab_focus(); } } void HOCRProofReadWidget::repositionWidget() { if(m_currentLines.empty()) { return; } // Position frame Displayer* displayer = MAIN->getDisplayer(); int frameXmin = std::numeric_limits::max(); int frameXmax = 0; Geometry::Point sceneCorner = displayer->getSceneBoundingRect().topLeft(); for(auto pair : m_currentLines) { Gtk::Box* lineWidget = pair.second; if(lineWidget->get_children().empty()) { continue; } // First word LineEdit* lineEdit = static_cast(lineWidget->get_children()[0]); Geometry::Point bottomLeft = displayer->mapToView(lineEdit->item()->bbox().translate(sceneCorner.x, sceneCorner.y).bottomLeft()); frameXmin = std::min(frameXmin, int(bottomLeft.x)); } Geometry::Point bottomLeft = displayer->mapToView(m_currentLine->bbox().translate(sceneCorner.x, sceneCorner.y).bottomLeft()); Geometry::Point topLeft = displayer->mapToView(m_currentLine->bbox().translate(sceneCorner.x, sceneCorner.y).topLeft()); int frameY = bottomLeft.y; // Recompute font sizes so that text matches original as closely as possible Pango::FontDescription font = get_style_context()->get_font(); Glib::RefPtr layout = Pango::Layout::create(get_pango_context()); double avgFactor = 0.0; int nFactors = 0; // First pass: min scaling factor, move to correct location for(auto pair : m_currentLines) { Gtk::Box* lineWidget = pair.second; int prevRight = frameXmin; for(int i = 0, n = lineWidget->get_children().size(); i < n; ++i) { LineEdit* lineEdit = static_cast(lineWidget->get_children()[i]); Geometry::Rectangle sceneBBox = lineEdit->item()->bbox().translate(sceneCorner.x, sceneCorner.y); Geometry::Point bottomLeft = displayer->mapToView(sceneBBox.bottomLeft()); Geometry::Point bottomRight = displayer->mapToView(sceneBBox.bottomRight()); // Factor weighed by length layout->set_text(lineEdit->get_text()); int width, height; layout->get_pixel_size(width, height); double factor = (bottomRight.x - bottomLeft.x) / double(width); avgFactor += lineEdit->get_text().length() * factor; nFactors += lineEdit->get_text().length(); lineEdit->set_margin_left(bottomLeft.x - prevRight - 6); // 4: border + padding prevRight = bottomRight.x; int min_height, nat_height; lineEdit->get_preferred_height(min_height, nat_height); lineEdit->set_size_request(bottomRight.x - bottomLeft.x + 8, nat_height); // 8: border + padding frameXmax = std::max(frameXmax, int(bottomRight.x) + 8); } } avgFactor = avgFactor > 0 ? avgFactor / nFactors : 1.; // Second pass: apply font sizes, set line heights font.set_size(font.get_size() * avgFactor); layout->set_font_description(font); int fontWidth, fontHeight; layout->get_pixel_size(fontWidth, fontHeight); for(auto pair : m_currentLines) { Gtk::Box* lineWidget = pair.second; for(int i = 0, n = lineWidget->get_children().size(); i < n; ++i) { LineEdit* lineEdit = static_cast(lineWidget->get_children()[i]); Pango::FontDescription lineEditFont = lineEdit->get_style_context()->get_font(); lineEditFont.set_size(font.get_size() + m_fontSizeDiff); lineEdit->override_font(lineEditFont); int width, height; lineEdit->get_size_request(width, height); lineEdit->set_size_request(width, fontHeight + 5); } int width, height; lineWidget->get_size_request(width, height); lineWidget->set_size_request(width, fontHeight + 10); } frameY += 10; resize(frameXmax - frameXmin + 2 + 2 * m_mainLayout->get_spacing(), m_currentLines.size() * (fontHeight + 10) + 2 * m_mainLayout->get_spacing() + m_controlsWidget->get_allocated_height()); // Place widget above line if it overflows page Glib::RefPtr document = Glib::RefPtr::cast_static(m_treeView->get_model()); std::vector items = m_treeView->get_selection()->get_selected_rows(); Gtk::TreeIter current = items.empty() ? Gtk::TreeIter() : document->get_iter(items[0]); const HOCRItem* item = document->itemAtIndex(current); Geometry::Rectangle sceneBBox = item->page()->bbox().translate(sceneCorner.x, sceneCorner.y); double maxy = displayer->mapToView(sceneBBox.bottomLeft()).y; if(frameY + get_allocated_height() - maxy > 0) { frameY = topLeft.y - get_allocated_height(); } int x_root, y_root; displayer->mapViewToRoot(frameXmin - m_mainLayout->get_spacing(), frameY, x_root, y_root); move(x_root, y_root); show_all(); } void HOCRProofReadWidget::showShortcutsDialog() { Glib::ustring text = _( "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge with previous word
Ctrl+Shift+MMerge with next word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" ); // Just to keep the same translation string with the qt interface Utils::string_replace(text, "", "", true); Utils::string_replace(text, "", "\n", true); Utils::string_replace(text, "
", "", true); Utils::string_replace(text, "", "\t\t", true); Utils::string_replace(text, "
", "", true); Utils::messageBox(Gtk::MESSAGE_INFO, _("Keyboard Shortcuts"), text, "", Utils::Button::Ok, MAIN->getWindow()); } Glib::ustring HOCRProofReadWidget::confidenceStyle(int wconf) const { if(wconf < 70) { return "wconfLt70"; } else if(wconf < 80) { return "wconfLt80"; } else if(wconf < 90) { return "wconfLt90;"; } return Glib::ustring(); } void HOCRProofReadWidget::setConfidenceLabel(int wconf) { m_confidenceLabel->set_text(Glib::ustring::compose(_("Confidence: %1"), wconf)); Glib::ustring style = confidenceStyle(wconf); if(style.empty()) { while(!m_currentLines.empty()) { delete m_currentLines.begin()->second; } } else { m_confidenceLabel->get_style_context()->add_class(style); } } void HOCRProofReadWidget::adjustFontSize(int diff) { m_fontSizeDiff += diff; repositionWidget(); } gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.hh000066400000000000000000000040101417507262200264300ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRProofReadWidget.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPROOFREADWIDGET_HH #define HOCRPROOFREADWIDGET_HH #include #include "common.hh" class HOCRItem; class HOCRProofReadWidget : public Gtk::Window { public: HOCRProofReadWidget(Gtk::TreeView* treeView); ~HOCRProofReadWidget(); void clear(); Gtk::TreeView* documentTree() const { return m_treeView; } void setConfidenceLabel(int wconf); Glib::ustring confidenceStyle(int wconf) const; void adjustFontSize(int diff); private: class LineEdit; ClassData m_classdata; Gtk::Box* m_mainLayout = nullptr; Gtk::TreeView* m_treeView = nullptr; Gtk::Box* m_linesLayout = nullptr; const HOCRItem* m_currentLine = nullptr; Gtk::Box* m_controlsWidget = nullptr; Gtk::Label* m_confidenceLabel = nullptr; std::map m_currentLines; Gtk::Window* m_settingsMenu = nullptr; Gtk::SpinButton* m_spinLinesBefore = nullptr; Gtk::SpinButton* m_spinLinesAfter = nullptr; Gtk::Button* m_settingsButton = nullptr; int m_fontSizeDiff = 0; // TODO: Disable auto tab handling // bool focusNextPrevChild(bool) override { return false; } void showSettingsMenu(); void repositionWidget(); void updateWidget(bool force = false); void showShortcutsDialog(); }; #endif // HOCRPROOFREADWIDGET_HH gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/OutputEditorHOCR.patch000066400000000000000000000032171417507262200265620ustar00rootroot00000000000000diff --git a/gtk/src/hocr/OutputEditorHOCR.cc b/gtk/src/hocr/OutputEditorHOCR.cc index 1c729e70..7178139c 100644 --- a/gtk/src/hocr/OutputEditorHOCR.cc +++ b/gtk/src/hocr/OutputEditorHOCR.cc @@ -972,18 +972,22 @@ void OutputEditorHOCR::pickItem(const Geometry::Point& point) { int pageNr; Glib::ustring filename = MAIN->getDisplayer()->getCurrentImage(pageNr); Gtk::TreeIter pageIndex = m_document->searchPage(filename, pageNr); - const HOCRItem* currentItem = m_document->itemAtIndex(pageIndex); - if(!currentItem) { + const HOCRItem* pageItem = m_document->itemAtIndex(pageIndex); + if(!pageItem) { return; } - const HOCRPage* page = currentItem->page(); + const HOCRPage* page = pageItem->page(); // Transform point in coordinate space used when page was OCRed double alpha = (page->angle() - MAIN->getDisplayer()->getCurrentAngle()) / 180. * M_PI; double scale = double(page->resolution()) / double(MAIN->getDisplayer()->getCurrentResolution()); Geometry::Point newPoint( scale * (point.x * std::cos(alpha) - point.y * std::sin(alpha)) + 0.5 * page->bbox().width, scale * (point.x * std::sin(alpha) + point.y * std::cos(alpha)) + 0.5 * page->bbox().height); - showItemProperties(m_document->searchAtCanvasPos(pageIndex, newPoint)); - m_treeView->grab_focus(); + Gtk::TreeIter index = m_document->searchAtCanvasPos(pageIndex, newPoint); + showItemProperties(index); + const HOCRItem* item = m_document->itemAtIndex(index); + if(item->itemClass() != "ocrx_word" && item->itemClass() != "ocr_line") { + m_treeView->grab_focus(); + } } bool OutputEditorHOCR::open(InsertMode mode, std::vector> files) { gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/Utils.patch000066400000000000000000000011361417507262200245350ustar00rootroot00000000000000diff --git a/gtk/src/Utils.hh b/gtk/src/Utils.hh index 3dd660b7..712d8e69 100644 --- a/gtk/src/Utils.hh +++ b/gtk/src/Utils.hh @@ -116,6 +116,12 @@ std::vector vector_slice(const std::vector& vector, int start, int count = return result; } +template +int vector_index_of(const std::vector& vector, T item) { + auto it = std::find(vector.begin(), vector.end(), item); + return it == vector.end() ? -1 : std::distance(vector.begin(), it); +} + template> rev_iters reverse(T& t) { return { t.rbegin(), t.rend() }; gImageReader-3.4.0/gtk/src/hocr/wip_proofreadwidget/schema.patch000066400000000000000000000016561417507262200247040ustar00rootroot00000000000000diff --git a/gtk/data/org.gnome.gimagereader.gschema.xml b/gtk/data/org.gnome.gimagereader.gschema.xml index 92b34868..4df03249 100644 --- a/gtk/data/org.gnome.gimagereader.gschema.xml +++ b/gtk/data/org.gnome.gimagereader.gschema.xml @@ -316,5 +316,15 @@ Syntax highlight mode Syntax highlight mode. + + 0 + Number of lines to show before current line + Number of lines to show before current line + + + 3 + Number of lines to show before current line + Number of lines to show before current line + gImageReader-3.4.0/gtk/src/main.cc000066400000000000000000000071351417507262200166550ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * main.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif #include "common.hh" #include "Application.hh" #include "Config.hh" #include "CrashHandler.hh" std::string pkgDir; std::string pkgExePath; static std::string get_application_dir(char* argv0) { #ifdef G_OS_WIN32 gchar* dir = g_win32_get_package_installation_directory_of_module(0); std::string pathstr = dir; g_free(dir); #else pid_t pid = getpid(); std::string exe = Glib::ustring::compose("/proc/%1/exe", pid); GError* err = nullptr; char* path = g_file_read_link(exe.c_str(), &err); std::string pathstr = Glib::build_filename(Glib::path_get_dirname(path), ".."); g_free(path); if(err) { if(Glib::path_is_absolute(argv0)) { pathstr = Glib::build_filename(Glib::path_get_dirname(argv0), ".."); } else { pathstr = Glib::build_filename(Glib::get_current_dir(), Glib::path_get_dirname(argv0), ".."); } } #endif return pathstr; } static std::string get_application_exec_path(char* argv0) { #ifdef G_OS_WIN32 char buf[MAX_PATH]; bool success = GetModuleFileName(0, buf, MAX_PATH) > 0; std::string pathstr = buf; #else pid_t pid = getpid(); std::string exe = Glib::ustring::compose("/proc/%1/exe", pid); GError* err = nullptr; char* path = g_file_read_link(exe.c_str(), &err); std::string pathstr = path; g_free(path); bool success = err == nullptr; #endif if(!success) { if(Glib::path_is_absolute(argv0)) { pathstr = Glib::path_get_dirname(argv0); } else { pathstr = Glib::build_filename(Glib::get_current_dir(), argv0); } } return pathstr; } int main (int argc, char* argv[]) { pkgDir = get_application_dir(argv[0]); pkgExePath = get_application_exec_path(argv[0]); #ifdef G_OS_WIN32 if(Glib::getenv("LANG").empty()) { gchar* locale = g_win32_getlocale(); Glib::setenv("LANG", locale); g_free(locale); } #endif std::string localeDir = Glib::build_filename(pkgDir, "share", "locale"); bindtextdomain(GETTEXT_PACKAGE, localeDir.c_str()); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); if(argc > 2 && std::strcmp("crashhandle", argv[1]) == 0) { // Run the crash handler CrashHandler app(argc, argv); return app.run(); } else if(argc >= 2 && std::strcmp("tessdatadir", argv[1]) == 0) { Config::openTessdataDir(); return 0; } else if(argc >= 2 && std::strcmp("spellingdir", argv[1]) == 0) { Config::openSpellingDir(); return 0; } else { // Run the normal application #ifdef G_OS_WIN32 Glib::setenv("TWAINDSM_LOG", Glib::build_filename(pkgDir, "twain.log")); std::freopen(Glib::build_filename(pkgDir, "gimagereader.log").c_str(), "w", stderr); #endif GtkSpell::init(); Gsv::init(); Application app(argc, argv, APPLICATION_ID, Gio::APPLICATION_HANDLES_OPEN); return app.run(); } } gImageReader-3.4.0/gtk/src/scanner/000077500000000000000000000000001417507262200170455ustar00rootroot00000000000000gImageReader-3.4.0/gtk/src/scanner/ScannerSane.cc000066400000000000000000000657721417507262200215750ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerSane.cc * Based on code from Simple Scan, which is: * Copyright (C) 2009-2013 Canonical Ltd. * Author: Robert Ancell * Modifications are: * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScannerSane.hh" #include #include #include void ScannerSane::init() { m_thread = new std::thread(&ScannerSane::run, this); } void ScannerSane::redetect() { m_requestQueue.enqueue({Request::Type::Redetect, 0}); } void ScannerSane::scan(const Params& params) { g_assert(params.depth == 8); // only 8 supported m_requestQueue.enqueue({Request::Type::StartScan, new ScanJob(params)}); } void ScannerSane::cancel() { m_requestQueue.enqueue({Request::Type::Cancel, 0}); } void ScannerSane::close() { m_requestQueue.enqueue({Request::Type::Quit, 0}); while(!m_finished) { if(Gtk::Main::events_pending()) { Gtk::Main::iteration(); } } m_thread->join(); delete m_thread; m_thread = nullptr; } /***************************** Thread functions ******************************/ void ScannerSane::run() { // Initialize sane SANE_Int version_code; SANE_Status status = sane_init(&version_code, nullptr); g_debug("sane_init() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { g_critical("Unable to initialize SANE backend: %s", sane_strstatus(status)); Utils::runInMainThreadBlocking([this] { m_signal_initFailed.emit(); }); return; } g_debug("SANE version %d.%d.%d", SANE_VERSION_MAJOR(version_code), SANE_VERSION_MINOR(version_code), SANE_VERSION_BUILD(version_code)); /* Scan for devices on first start */ doRedetect(); bool need_redetect = false; while(true) { // Fetch request if requests are pending or wait for request if idle if(!m_requestQueue.empty() || m_state == State::IDLE) { Request request = m_requestQueue.dequeue(); if(request.type == Request::Type::Redetect) { need_redetect = true; } else if(request.type == Request::Type::StartScan) { setState(State::OPEN); m_job = request.job; } else if(request.type == Request::Type::Cancel) { failScan(_("Scan canceled")); } else if(request.type == Request::Type::Quit) { doStop(); break; } } // Perform operations according to state if(m_state == State::IDLE) { if(need_redetect) { doRedetect(); need_redetect = false; } } else if(m_state == State::OPEN) { doOpen(); } else if(m_state == State::SET_OPTIONS) { doSetOptions(); } else if(m_state == State::START) { doStart(); } else if(m_state == State::GET_PARAMETERS) { doGetParameters(); } else if(m_state == State::READ) { doRead(); } } g_debug("sane_exit()"); // Commented to prevent crash, see https://bugs.launchpad.net/hplip/+bug/1315858 // sane_exit(); m_finished = true; } void ScannerSane::setState(State state) { m_state = state; Utils::runInMainThreadBlocking([this, state] { m_signal_scanStateChanged.emit(state); }); } void ScannerSane::failScan(const Glib::ustring& errorString) { doStop(); Utils::runInMainThreadBlocking([this, errorString] { m_signal_scanFailed.emit(errorString); }); } void ScannerSane::doRedetect() { std::vector devices; const SANE_Device** device_list = nullptr; SANE_Status status = sane_get_devices(&device_list, false); g_debug("sane_get_devices() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { g_critical("Unable to get SANE devices: %s", sane_strstatus(status)); } else { for(int i = 0; device_list[i] != nullptr; ++i) { g_debug("Device: name=\"%s\" vendor=\"%s\" model=\"%s\" type=\"%s\"", device_list[i]->name, device_list[i]->vendor, device_list[i]->model, device_list[i]->type); Device scan_device; scan_device.name = device_list[i]->name; /* Abbreviate HP as it is a long string and does not match what is on the physical scanner */ std::string vendor = device_list[i]->vendor; if(vendor == "Hewlett-Packard") { vendor = "HP"; } scan_device.label = Glib::ustring::compose("%1 %2", vendor, device_list[i]->model); std::replace(scan_device.label.begin(), scan_device.label.end(), '_', ' '); devices.push_back(scan_device); } } Utils::runInMainThreadBlocking([this, devices] { m_signal_devicesDetected.emit(devices); }); } void ScannerSane::doOpen() { if(m_job->params.device.empty()) { failScan(_("No scanner specified")); return; } SANE_Status status = sane_open(m_job->params.device.c_str(), &m_job->handle); g_debug("sane_open(\"%s\") -> %s", m_job->params.device.c_str(), sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { g_critical("Unable to get open device: %s", sane_strstatus(status)); m_job->handle = nullptr; failScan(getErrorMessage(status, _("Unable to connect to scanner"))); return; } setState(State::SET_OPTIONS); } void ScannerSane::doSetOptions() { g_debug("set_options"); int index = 0; const SANE_Option_Descriptor* option; std::map options; /* Build the option table */ while((option = sane_get_option_descriptor(m_job->handle, index)) != nullptr) { logOption(index, option); if( /* Ignore groups */ option->type != SANE_TYPE_GROUP && /* Option disabled */ (option->cap & SANE_CAP_INACTIVE) == 0 && /* Some options are unnamed (e.g. Option 0) */ option->name != nullptr && std::strlen(option->name) > 0 ) { options.insert({option->name, index}); } ++index; } /* Apply settings */ /* Pick source */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_SOURCE, index); if(option != nullptr) { std::vector flatbed_sources = { "Auto", SANE_I18N("Auto"), "Flatbed", SANE_I18N("Flatbed"), "FlatBed", "Normal", SANE_I18N("Normal") }; std::vector adf_sources = { "Automatic Document Feeder", SANE_I18N("Automatic Document Feeder"), "ADF", "Automatic Document Feeder(left aligned)", /* Seen in the proprietary brother3 driver */ "Automatic Document Feeder(centrally aligned)" /* Seen in the proprietary brother3 driver */ }; std::vector adf_front_sources = { "ADF Front", SANE_I18N("ADF Front") }; std::vector adf_back_sources = { "ADF Back", SANE_I18N("ADF Back") }; std::vector adf_duplex_sources = { "ADF Duplex", SANE_I18N("ADF Duplex") }; switch(m_job->params.type) { case ScanType::SINGLE: if(!setDefaultOption(m_job->handle, option, index)) if(!setConstrainedStringOption(m_job->handle, option, index, flatbed_sources, nullptr)) { g_warning("Unable to set single page source, please file a bug"); } break; case ScanType::ADF_FRONT: if(!setConstrainedStringOption(m_job->handle, option, index, adf_front_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { g_warning("Unable to set front ADF source, please file a bug"); } break; case ScanType::ADF_BACK: if(!setConstrainedStringOption(m_job->handle, option, index, adf_back_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { g_warning("Unable to set back ADF source, please file a bug"); } break; case ScanType::ADF_BOTH: if(!setConstrainedStringOption(m_job->handle, option, index, adf_duplex_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { g_warning("Unable to set duplex ADF source, please file a bug"); } break; } } /* Scan mode (before resolution as it tends to affect that */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_MODE, index); if(option != nullptr) { /* The names of scan modes often used in drivers, as taken from the sane-backends source */ std::vector color_scan_modes = { SANE_VALUE_SCAN_MODE_COLOR, "Color", "24bit Color" /* Seen in the proprietary brother3 driver */ }; std::vector gray_scan_modes = { SANE_VALUE_SCAN_MODE_GRAY, "Gray", "Grayscale", SANE_I18N("Grayscale"), "True Gray" /* Seen in the proprietary brother3 driver */ }; std::vector lineart_scan_modes = { SANE_VALUE_SCAN_MODE_LINEART, "Lineart", "LineArt", SANE_I18N("LineArt"), "Black & White", SANE_I18N("Black & White"), "Binary", SANE_I18N("Binary"), "Thresholded", SANE_VALUE_SCAN_MODE_GRAY, "Gray", "Grayscale", SANE_I18N("Grayscale"), "True Gray" /* Seen in the proprietary brother3 driver */ }; switch(m_job->params.scan_mode) { case ScanMode::COLOR: if(!setConstrainedStringOption(m_job->handle, option, index, color_scan_modes, nullptr)) { g_warning("Unable to set Color mode, please file a bug"); } break; case ScanMode::GRAY: if(!setConstrainedStringOption(m_job->handle, option, index, gray_scan_modes, nullptr)) { g_warning("Unable to set Gray mode, please file a bug"); } break; case ScanMode::LINEART: if(!setConstrainedStringOption(m_job->handle, option, index, lineart_scan_modes, nullptr)) { g_warning("Unable to set Lineart mode, please file a bug"); } break; default: break; } } /* Duplex */ option = getOptionByName(options, m_job->handle, "duplex", index); if(option != nullptr && option->type == SANE_TYPE_BOOL) { setBoolOption(m_job->handle, option, index, m_job->params.type == ScanType::ADF_BOTH, nullptr); } /* Multi-page options */ option = getOptionByName(options, m_job->handle, "batch-scan", index); if(option != nullptr && option->type == SANE_TYPE_BOOL) { setBoolOption(m_job->handle, option, index, m_job->params.type != ScanType::SINGLE, nullptr); } /* Disable compression, we will compress after scanning */ option = getOptionByName(options, m_job->handle, "compression", index); if(option != nullptr) { std::vector disable_compression_names = { SANE_I18N("None"), SANE_I18N("none"), "None", "none" }; if(!setConstrainedStringOption(m_job->handle, option, index, disable_compression_names, nullptr)) { g_warning("Unable to disable compression, please file a bug"); } } /* Set resolution and bit depth */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_RESOLUTION, index); if(option != nullptr) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.dpi, &m_job->params.dpi); } else { int dpi; setIntOption(m_job->handle, option, index, m_job->params.dpi, &dpi); m_job->params.dpi = dpi; } option = getOptionByName(options, m_job->handle, SANE_NAME_BIT_DEPTH, index); if(option != nullptr && m_job->params.depth > 0) { setIntOption(m_job->handle, option, index, m_job->params.depth, nullptr); } } /* Always use maximum scan area - some scanners default to using partial areas. This should be patched in sane-backends */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_BR_X, index); if(option != nullptr && option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, SANE_UNFIX(option->constraint.range->max), nullptr); } else { setIntOption(m_job->handle, option, index, option->constraint.range->max, nullptr); } } option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_BR_Y, index); if(option != nullptr && option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, SANE_UNFIX(option->constraint.range->max), nullptr); } else { setIntOption(m_job->handle, option, index, option->constraint.range->max, nullptr); } } /* Set page dimensions */ option = getOptionByName(options, m_job->handle, SANE_NAME_PAGE_WIDTH, index); if(option != nullptr && m_job->params.page_width > 0.0) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.page_width / 10.0, nullptr); } else { setIntOption(m_job->handle, option, index, m_job->params.page_width / 10, nullptr); } } option = getOptionByName(options, m_job->handle, SANE_NAME_PAGE_HEIGHT, index); if(option != nullptr && m_job->params.page_height > 0.0) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.page_height / 10.0, nullptr); } else { setIntOption(m_job->handle, option, index, m_job->params.page_height / 10, nullptr); } } setState(State::START); } void ScannerSane::doStart() { SANE_Status status = sane_start(m_job->handle); g_debug("sane_start -> %s", sane_strstatus(status)); if(status == SANE_STATUS_GOOD) { setState(State::GET_PARAMETERS); } else { doStop(); failScan(getErrorMessage(status, _("Unable to start scan"))); } } void ScannerSane::doGetParameters() { SANE_Status status = sane_get_parameters(m_job->handle, &m_job->parameters); g_debug("sane_get_parameters() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { failScan(getErrorMessage(status, _("Error communicating with scanner"))); return; } g_debug("Parameters: format=%s last_frame=%s bytes_per_line=%d pixels_per_line=%d lines=%d depth=%d", getFrameModeString(m_job->parameters.format).c_str(), m_job->parameters.last_frame ? "SANE_TRUE" : "SANE_FALSE", m_job->parameters.bytes_per_line, m_job->parameters.pixels_per_line, m_job->parameters.lines, m_job->parameters.depth); m_job->height = std::max(1, m_job->parameters.lines); m_job->rowstride = m_job->parameters.pixels_per_line * 3; // Buffer is for a 24 bit RGB image m_job->imgbuf.resize(std::size_t(m_job->rowstride) * m_job->parameters.lines); /* Prepare for read */ m_job->lineBuffer.resize(m_job->parameters.bytes_per_line); m_job->nUsed = 0; m_job->lineCount = 0; setState(State::READ); } void ScannerSane::doRead() { /* Read as many bytes as we need to complete a line */ int n_to_read = m_job->lineBuffer.size() - m_job->nUsed; SANE_Int n_read; unsigned char* b = &m_job->lineBuffer[m_job->nUsed]; SANE_Status status = sane_read(m_job->handle, b, n_to_read, &n_read); g_debug("sane_read(%d) -> (%s, %d)", n_to_read, sane_strstatus(status), n_read); /* Completed read */ if(status == SANE_STATUS_EOF) { // EOF with no data read, means ADF has no further page if(m_job->lineCount == 0) { doStop(); return; } if(m_job->parameters.lines > 0 && m_job->lineCount != m_job->parameters.lines) { g_critical("Scan completed with %d lines, expected %d lines", m_job->lineCount, m_job->parameters.lines); } if(m_job->nUsed > 0) { g_critical("Scan complete with %d bytes of unused data", m_job->nUsed); } doCompletePage(); return; } else if(status != SANE_STATUS_GOOD) { g_critical("Unable to read frame from device: %s", sane_strstatus(status)); failScan(_("Error communicating with scanner")); return; } m_job->nUsed += n_read; /* If we completed a line, feed it out */ if(m_job->nUsed >= (int)m_job->lineBuffer.size()) { g_assert(m_job->nUsed == m_job->parameters.bytes_per_line); ++m_job->lineCount; // Resize image if necessary if(m_job->lineCount > m_job->height) { m_job->height = m_job->lineCount; m_job->imgbuf.resize(std::size_t(m_job->rowstride) * m_job->height); } // Write data int offset = (m_job->lineCount - 1) * m_job->rowstride; if(m_job->parameters.format == SANE_FRAME_GRAY) { for(std::size_t i = 0; i < m_job->lineBuffer.size(); ++i) { std::memset(&m_job->imgbuf[offset + 3 * i], m_job->lineBuffer[i], 3); } } else if(m_job->parameters.format == SANE_FRAME_RGB) { std::memcpy(&m_job->imgbuf[offset], &m_job->lineBuffer[0], m_job->lineBuffer.size()); } else if(m_job->parameters.format == SANE_FRAME_RED) { for(std::size_t i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 0] = m_job->lineBuffer[i]; } } else if(m_job->parameters.format == SANE_FRAME_GREEN) { for(std::size_t i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 1] = m_job->lineBuffer[i]; } } else if(m_job->parameters.format == SANE_FRAME_BLUE) { for(std::size_t i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 2] = m_job->lineBuffer[i]; } } /* Reset buffer */ m_job->nUsed = 0; m_job->lineBuffer.resize(m_job->parameters.bytes_per_line); } } void ScannerSane::doCompletePage() { if(!m_job->parameters.last_frame) { setState(State::GET_PARAMETERS); return; } std::string filename = m_job->params.filename; if(m_job->params.type != ScanType::SINGLE) { std::pair parts = Utils::split_filename(filename); filename = Glib::ustring::compose("%1-%2.%3", parts.first, m_job->pageNumber, parts.second); filename = Utils::make_output_filename(filename); } std::string ext = Utils::split_filename(filename).second; try { Gdk::Pixbuf::create_from_data(m_job->imgbuf.data(), Gdk::COLORSPACE_RGB, false, 8, m_job->rowstride / 3, m_job->height, m_job->rowstride)->save(filename, ext); } catch(const Glib::Error&) { failScan(_("Failed to save image")); return; } m_job->imgbuf.clear(); Utils::runInMainThreadBlocking([this, filename] { m_signal_pageAvailable.emit(filename); }); if(m_job->params.type != ScanType::SINGLE) { ++m_job->pageNumber; setState(State::GET_PARAMETERS); return; } doStop(); } void ScannerSane::doStop() { if(m_job != nullptr) { if(m_job->handle != nullptr) { g_debug("sane_close()"); sane_close(m_job->handle); } delete m_job; m_job = nullptr; setState(State::IDLE); } } /***************************** Sane option stuff *****************************/ const SANE_Option_Descriptor* ScannerSane::getOptionByName(const std::map& options, SANE_Handle, const std::string& name, int& index) { std::map::const_iterator it = options.find(name); if(it != options.end()) { index = it->second; return sane_get_option_descriptor(m_job->handle, index); } index = 0; return nullptr; } bool ScannerSane::setDefaultOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index) { /* Check if supports automatic option */ if((option->cap & SANE_CAP_AUTOMATIC) == 0) { return false; } SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_AUTO, nullptr, nullptr); g_debug("sane_control_option(%d, SANE_ACTION_SET_AUTO) -> %s", option_index, sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { g_warning("Error setting default option %s: %s", option->name, sane_strstatus(status)); } return status == SANE_STATUS_GOOD; } void ScannerSane::setBoolOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, bool value, bool* result) { if(option->type != SANE_TYPE_BOOL) { return; } SANE_Bool v = static_cast(value); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v, nullptr); if(result) { *result = static_cast(v); } g_debug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %s) -> (%s, %s)", option_index, value ? "SANE_TRUE" : "SANE_FALSE", sane_strstatus(status), result ? "SANE_TRUE" : "SANE_FALSE"); } void ScannerSane::setIntOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, int value, int* result) { if(option->type != SANE_TYPE_INT) { return; } SANE_Word v = static_cast(value); if(option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->constraint.range->quant != 0) { v *= option->constraint.range->quant; } v = std::max(option->constraint.range->min, std::min(option->constraint.range->max, v)); } else if(option->constraint_type == SANE_CONSTRAINT_WORD_LIST) { int distance = std::numeric_limits::max(); int nearest = 0; /* Find nearest value to requested */ for(int i = 0; i < option->constraint.word_list[0]; ++i) { int x = option->constraint.word_list[i + 1]; int d = std::abs(x - v); if(d < distance) { distance = d; nearest = x; } } v = nearest; } SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v, nullptr); g_debug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %d) -> (%s, %d)", option_index, value, sane_strstatus(status), v); if(result) { *result = v; } } void ScannerSane::setFixedOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, double value, double* result) { if(option->type != SANE_TYPE_FIXED) { return; } double v = value; if(option->constraint_type == SANE_CONSTRAINT_RANGE) { double min = SANE_UNFIX(option->constraint.range->min); double max = SANE_UNFIX(option->constraint.range->max); v = std::max(min, std::min(max, v)); } else if(option->constraint_type == SANE_CONSTRAINT_WORD_LIST) { double distance = std::numeric_limits::max(); double nearest = 0.0; /* Find nearest value to requested */ for(int i = 0; i < option->constraint.word_list[0]; ++i) { double x = SANE_UNFIX(option->constraint.word_list[i + 1]); double d = std::abs(x - v); if(d < distance) { distance = d; nearest = x; } } v = nearest; } SANE_Fixed v_fixed = SANE_FIX(v); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v_fixed, nullptr); g_debug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %f) -> (%s, %f)", option_index, value, sane_strstatus(status), SANE_UNFIX(v_fixed)); if(result) { *result = SANE_UNFIX(v_fixed); } } bool ScannerSane::setStringOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const std::string& value, std::string* result) { if(option->type != SANE_TYPE_STRING) { return false; } char* v = new char[value.size() + 1]; // +1: \0 strncpy(v, value.c_str(), value.size() + 1); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, v, nullptr); g_debug("sane_control_option(%d, SANE_ACTION_SET_VALUE, \"%s\") -> (%s, \"%s\")", option_index, value.c_str(), sane_strstatus(status), v); if(result) { *result = v; } delete[] v; return status == SANE_STATUS_GOOD; } bool ScannerSane::setConstrainedStringOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const std::vector& values, std::string* result) { if(option->type != SANE_TYPE_STRING) { return false; } if(option->constraint_type != SANE_CONSTRAINT_STRING_LIST) { return false; } for(const std::string& value : values) { for(int j = 0; option->constraint.string_list[j] != nullptr; ++j) { if(value == option->constraint.string_list[j]) { return setStringOption(handle, option, option_index, value, result); } } } if(result) { *result = ""; } return false; } void ScannerSane::logOption(SANE_Int index, const SANE_Option_Descriptor* option) { Glib::ustring s = Glib::ustring::compose("Option %1:", index); if(option->name && std::strlen(option->name) > 0) { s += Glib::ustring::compose(" name='%1'", option->name); } if(option->title && std::strlen(option->title) > 0) { s += Glib::ustring::compose(" title='%1'", option->title); } Glib::ustring typestr[] = {"bool", "int", "fixed", "string", "button", "group"}; if(option->type <= SANE_TYPE_GROUP) { s += Glib::ustring::compose(" type=%1", typestr[option->type]); } else { s += Glib::ustring::compose(" type=%1", option->type); } s += Glib::ustring::compose(" size=%1", option->size); Glib::ustring unitstr[] = {"none", "pixel", "bit", "mm", "dpi", "percent", "microseconds"}; if(option->unit <= SANE_UNIT_MICROSECOND) { s += Glib::ustring::compose(" unit=%1", unitstr[option->unit]); } else { s += Glib::ustring::compose(" unit=%1", option->unit); } switch(option->constraint_type) { case SANE_CONSTRAINT_RANGE: if(option->type == SANE_TYPE_FIXED) { s += Glib::ustring::compose(" min=%1, max=%2, quant=%3", SANE_UNFIX(option->constraint.range->min), SANE_UNFIX(option->constraint.range->max), option->constraint.range->quant); } else { s += Glib::ustring::compose(" min=%1, max=%2, quant=%3", option->constraint.range->min, option->constraint.range->max, option->constraint.range->quant); } break; case SANE_CONSTRAINT_WORD_LIST: s += " values=["; for(int i = 0; i < option->constraint.word_list[0]; ++i) { if(i > 0) { s += ", "; } if(option->type == SANE_TYPE_INT) { s += Glib::ustring::compose("%1", option->constraint.word_list[i + 1]); } else { s += Glib::ustring::compose("%1", SANE_UNFIX(option->constraint.word_list[i + 1])); } } s += "]"; break; case SANE_CONSTRAINT_STRING_LIST: s += " values=["; for(int i = 0; option->constraint.string_list[i] != nullptr; ++i) { if(i > 0) { s += ", "; } s += Glib::ustring::compose("\"%1\"", option->constraint.string_list[i]); } s += "]"; break; default: break; } int cap = option->cap; if(cap != 0) { s += " cap="; if((cap & SANE_CAP_SOFT_SELECT) != 0) { s += "soft-select,"; cap &= ~SANE_CAP_SOFT_SELECT; } if((cap & SANE_CAP_HARD_SELECT) != 0) { s += "hard-select,"; cap &= ~SANE_CAP_HARD_SELECT; } if((cap & SANE_CAP_SOFT_DETECT) != 0) { s += "soft-detect,"; cap &= ~SANE_CAP_SOFT_DETECT; } if((cap & SANE_CAP_EMULATED) != 0) { s += "emulated,"; cap &= ~SANE_CAP_EMULATED; } if((cap & SANE_CAP_AUTOMATIC) != 0) { s += "automatic,"; cap &= ~SANE_CAP_AUTOMATIC; } if((cap & SANE_CAP_INACTIVE) != 0) { s += "inactive,"; cap &= ~SANE_CAP_INACTIVE; } if((cap & SANE_CAP_ADVANCED) != 0) { s += "advanced,"; cap &= ~SANE_CAP_ADVANCED; } /* Unknown capabilities */ if(cap != 0) { s += Glib::ustring::compose("unknown (%1)", cap); } } g_debug("%s", s.c_str()); if(option->desc != nullptr) { g_debug(" Description: %s", option->desc); } } Glib::ustring ScannerSane::getFrameModeString(SANE_Frame frame) { Glib::ustring framestr[] = {"SANE_FRAME_GRAY", "SANE_FRAME_RGB", "SANE_FRAME_RED", "SANE_FRAME_GREEN", "SANE_FRAME_BLUE"}; if(frame <= SANE_FRAME_BLUE) { return framestr[frame]; } else { return Glib::ustring::compose("SANE_FRAME(%1)", frame); } } Glib::ustring ScannerSane::getErrorMessage(SANE_Status status, const Glib::ustring& defaultMessage) { switch (status) { case SANE_STATUS_CANCELLED: return _("Operation is cancelled."); case SANE_STATUS_DEVICE_BUSY: return _("Device is busy."); case SANE_STATUS_COVER_OPEN: return _("Cover is opened."); case SANE_STATUS_JAMMED: return _("Document feeder jammed."); case SANE_STATUS_NO_DOCS: return _("Document feeder out of documents."); case SANE_STATUS_ACCESS_DENIED: return _("Access to scanner is denied."); default: return defaultMessage; } } gImageReader-3.4.0/gtk/src/scanner/ScannerSane.hh000066400000000000000000000066541417507262200216010ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerSane.hh * Based on code from Simple Scan, which is: * Copyright (C) 2009-2013 Canonical Ltd. * Author: Robert Ancell * Modifications are: * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_SANE_HH #define SCANNER_SANE_HH #include "../Scanner.hh" #include "../Utils.hh" #include namespace std { class thread; } class ScannerSane : public Scanner { public: void init() override; void redetect() override; void scan(const Params& params) override; void cancel() override; void close() override; private: struct ScanJob { ScanJob(const Params& _params) : params(_params) {} Params params; SANE_Handle handle = nullptr; SANE_Parameters parameters; std::vector lineBuffer; std::vector imgbuf; int nUsed = 0; // Number of used bytes in the line buffer int lineCount = 0; // Number of read lines int height = 0; int rowstride = 0; int pageNumber = 0; }; struct Request { enum class Type { Redetect, StartScan, Cancel, Quit } type; ScanJob* job; }; std::thread* m_thread = nullptr; State m_state = State::IDLE; Utils::AsyncQueue m_requestQueue; ScanJob* m_job = nullptr; bool m_finished = false; void run(); void doRedetect(); void doOpen(); void doSetOptions(); void doStart(); void doGetParameters(); void doRead(); void doCompletePage(); void doStop(); void setState(State state); void failScan(const Glib::ustring& errorString); const SANE_Option_Descriptor* getOptionByName(const std::map& options, SANE_Handle, const std::string& name, int& index); bool setDefaultOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index); void setBoolOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, bool value, bool* result); void setIntOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, int value, int* result); void setFixedOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, double value, double* result); bool setStringOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const std::string& value, std::string* result); bool setConstrainedStringOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const std::vector& values, std::string* result); void logOption(SANE_Int index, const SANE_Option_Descriptor* option); static Glib::ustring getFrameModeString(SANE_Frame frame); static Glib::ustring getErrorMessage(SANE_Status status, const Glib::ustring& defaultMessage); }; typedef ScannerSane ScannerImpl; #endif // SCANNER_SANE_HH gImageReader-3.4.0/gtk/src/scanner/ScannerTwain.cc000066400000000000000000000343151417507262200217560ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerTwain.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScannerTwain.hh" #include "../MainWindow.hh" #ifdef G_OS_WIN32 #include #endif #ifdef G_OS_WIN32 bool ScannerTwain::saveDIB(TW_MEMREF hImg, const std::string& filename) { PBITMAPINFOHEADER pDIB = reinterpret_cast(m_entryPoint.DSM_MemLock(hImg)); if(pDIB == nullptr) { return false; } DWORD paletteSize = 0; if(pDIB->biBitCount == 1) { paletteSize = 2; } else if(pDIB->biBitCount == 8) { paletteSize = 256; } else if(pDIB->biBitCount == 24) { paletteSize = 0; } else { // Unsupported m_entryPoint.DSM_MemUnlock(hImg); m_entryPoint.DSM_MemFree(hImg); return false; } // If the driver did not fill in the biSizeImage field, then compute it. // Each scan line of the image is aligned on a DWORD (32bit) boundary. if( pDIB->biSizeImage == 0 ) { pDIB->biSizeImage = ((((pDIB->biWidth * pDIB->biBitCount) + 31) & ~31) / 8) * pDIB->biHeight; // If a compression scheme is used the result may be larger: increase size. if (pDIB->biCompression != 0) { pDIB->biSizeImage = (pDIB->biSizeImage * 3) / 2; } } std::uint64_t imageSize = pDIB->biSizeImage + sizeof(RGBQUAD) * paletteSize + sizeof(BITMAPINFOHEADER); BITMAPFILEHEADER bmpFIH = {0}; bmpFIH.bfType = ( (WORD) ('M' << 8) | 'B'); bmpFIH.bfSize = imageSize + sizeof(BITMAPFILEHEADER); bmpFIH.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (sizeof(RGBQUAD) * paletteSize); unsigned char* bmpData = new unsigned char[sizeof(BITMAPFILEHEADER) + imageSize]; std::memcpy(bmpData, &bmpFIH, sizeof(BITMAPFILEHEADER)); std::memcpy(bmpData + sizeof(BITMAPFILEHEADER), pDIB, imageSize); bool success = false; Glib::RefPtr stream = Gio::MemoryInputStream::create(); stream->add_data(bmpData, sizeof(BITMAPFILEHEADER) + imageSize); Glib::RefPtr pixbuf(Gdk::Pixbuf::create_from_stream(stream)); if(pixbuf) { try { pixbuf->save(filename, "png"); success = true; } catch(...) { success = false; } } delete[] bmpData; m_entryPoint.DSM_MemUnlock(hImg); m_entryPoint.DSM_MemFree(hImg); return success; } #endif ScannerTwain* ScannerTwain::s_instance = nullptr; void ScannerTwain::init() { if(m_dsmLib != nullptr) { g_critical("Init already called!"); m_signal_initFailed.emit(); return; } #ifdef G_OS_WIN32 std::string twaindsm = Glib::build_filename(pkgDir, "bin", "twaindsm.dll"); #else std::string twaindsm = "libtwaindsm.so.2.2.0"; #endif // State 1 to 2 m_dsmLib = dlopen(twaindsm.c_str(), RTLD_LAZY); if(m_dsmLib == nullptr) { g_critical("LoadLibrary failed on %s", twaindsm.c_str()); m_signal_initFailed.emit(); close(); return; } m_dsmEntry = (DSMENTRYPROC)dlsym(m_dsmLib, "DSM_Entry"); if(m_dsmEntry == nullptr) { g_critical("GetProcAddress failed on %s::DSM_Entry", twaindsm.c_str()); m_signal_initFailed.emit(); close(); return; } m_appID.Id = 0; m_appID.Version.MajorNum = 1; m_appID.Version.MinorNum = 0; m_appID.Version.Language = TWLG_USA; m_appID.Version.Country = TWCY_USA; std::strncpy(m_appID.Version.Info, "TWAIN Interface", sizeof(m_appID.Version.Info)); std::strncpy(m_appID.ProductName, "TWAIN Interface", sizeof(m_appID.ProductName)); std::strncpy(m_appID.Manufacturer, "Sandro Mani", sizeof(m_appID.Manufacturer)); std::strncpy(m_appID.ProductFamily, "Sandro Mani", sizeof(m_appID.ProductFamily)); m_appID.SupportedGroups = DF_APP2 | DG_IMAGE | DG_CONTROL; m_appID.ProtocolMajor = TWON_PROTOCOLMAJOR; m_appID.ProtocolMinor = TWON_PROTOCOLMINOR; m_state = 2; // State 2 to 3 TW_MEMREF phwnd = nullptr; #ifdef G_OS_WIN32 // HWND hwnd = gdk_win32_window_get_impl_hwnd(MAIN->getWindow()->get_window()->gobj()); // phwnd = &hwnd; #endif if(call(nullptr, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, phwnd) != TWRC_SUCCESS) { m_signal_initFailed.emit(); close(); return; } if((m_appID.SupportedGroups & DF_DSM2) == 0) { g_critical("Twain 2.x interface is not supported"); m_signal_initFailed.emit(); close(); return; } // Get entry point of memory management functions m_entryPoint.Size = sizeof(TW_ENTRYPOINT); if(call(nullptr, DG_CONTROL, DAT_ENTRYPOINT, MSG_GET, &m_entryPoint) != TWRC_SUCCESS) { m_signal_initFailed.emit(); close(); return; } m_state = 3; s_instance = this; // Redetect on init redetect(); } void ScannerTwain::redetect() { TW_IDENTITY sourceID; std::vector sources; // Get the first source TW_UINT16 twRC = call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_GETFIRST, &sourceID); // Loop through all the sources while (twRC == TWRC_SUCCESS) { sources.push_back({sourceID.ProductName, sourceID.ProductName}); twRC = call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_GETNEXT, &sourceID); } m_signal_devicesDetected.emit(sources); } void ScannerTwain::scan(const Params& params) { if(params.device.empty()) { failScan(_("No scanner specified")); return; } /** Open device **/ m_signal_scanStateChanged.emit(State::OPEN); std::strncpy(m_srcID.ProductName, params.device.c_str(), sizeof(m_srcID.ProductName)); // State 3 to 4 if(call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, &m_srcID) != TWRC_SUCCESS) { failScan(_("Unable to connect to scanner")); return; } m_state = 4; // Register callback TW_CALLBACK cb = {}; cb.CallBackProc = reinterpret_cast(callback); if(TWRC_SUCCESS == call(&m_srcID, DG_CONTROL, DAT_CALLBACK, MSG_REGISTER_CALLBACK, &cb)) { m_useCallback = true; } else { m_useCallback = false; } /** Set options **/ m_signal_scanStateChanged.emit(State::SET_OPTIONS); #ifndef G_OS_WIN32 // Set the filename TW_SETUPFILEXFER xferFile = {}; std::strncpy(xferFile.FileName, params.filename.c_str(), sizeof(xferFile.FileName)); xferFile.Format = TWFF_PNG; xferFile.VRefNum = TWON_DONTCARE16; if(call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_SET, &xferFile) != TWRC_SUCCESS) { // Possibly unsupported file format. Get the default format, and try again with that one call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_GET, &xferFile); std::string defaultfile = xferFile.FileName; params.filename = params.filename.substr(0, params.filename.rfind('.')) + defaultfile.substr(defaultfile.rfind('.')); std::strncpy(xferFile.FileName, params.filename.c_str(), sizeof(xferFile.FileName)); if(call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_SET, &xferFile) != TWRC_SUCCESS) { // If we failed again, just return the default file... params.filename = defaultfile; } } #endif // Set capabilities setCapability(CAP_XFERCOUNT, CapOneVal(TWTY_INT16, 1)); setCapability(ICAP_XRESOLUTION, CapOneVal(TWTY_FIX32, floatToFix32(params.dpi))); setCapability(ICAP_YRESOLUTION, CapOneVal(TWTY_FIX32, floatToFix32(params.dpi))); setCapability(ICAP_SUPPORTEDSIZES, CapOneVal(TWTY_UINT16, TWSS_NONE)); // Maximum scan area setCapability(ICAP_BITDEPTH, CapOneVal(TWTY_UINT16, params.depth)); if(params.scan_mode != ScanMode::DEFAULT) { if(params.scan_mode == ScanMode::COLOR) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_RGB)); } else if(params.scan_mode == ScanMode::GRAY) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_GRAY)); } else if(params.scan_mode == ScanMode::LINEART) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_BW)); } } // TODO: ADF, duplex, paper size /** Start device **/ m_signal_scanStateChanged.emit(State::START); m_dsMsg = MSG_NULL; m_dsQuit = false; m_ui.ShowUI = true; m_ui.ModalUI = true; m_ui.hParent = nullptr;; #ifdef G_OS_WIN32 m_ui.hParent = gdk_win32_window_get_impl_hwnd(MAIN->getWindow()->get_window()->gobj()); #endif // State 4 to 5 if(call(&m_srcID, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &m_ui) != TWRC_SUCCESS) { failScan(_("Unable to start scan")); return; } m_state = 5; m_cancel = false; #ifdef G_OS_WIN32 MAIN->getWindow()->get_window()->add_filter(eventFilter, nullptr); while(m_dsMsg == 0 && !m_dsQuit && !m_cancel) { while(Gtk::Main::instance()->events_pending()) { Gtk::Main::instance()->iteration(); } } MAIN->getWindow()->get_window()->remove_filter(eventFilter, nullptr); #else std::unique_lock lock(m_mutex); while(m_dsMsg == MSG_NULL) { m_cond.wait(lock); } #endif if(m_cancel) { failScan(_("Scan canceled")); } if(m_dsMsg != MSG_XFERREADY) { failScan(_("Unable to start scan")); return; } /** Read **/ m_signal_scanStateChanged.emit(State::READ); m_state = 6; bool saveOk = true; #ifdef G_OS_WIN32 TW_MEMREF hImg = nullptr; TW_UINT16 twRC = call(&m_srcID, DG_IMAGE, DAT_IMAGENATIVEXFER, MSG_GET, (TW_MEMREF)&hImg); if(twRC == TWRC_XFERDONE) { saveOk = saveDIB(hImg, params.filename); } #else TW_UINT16 twRC = call(&m_srcID, DG_IMAGE, DAT_IMAGEFILEXFER, MSG_GET, nullptr); #endif TW_PENDINGXFERS twPendingXFers = {}; call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, &twPendingXFers); if(twPendingXFers.Count != 0) { // Discard any additional pending transfers std::memset(&twPendingXFers, 0, sizeof(twPendingXFers)); call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, &twPendingXFers); } if(twRC != TWRC_XFERDONE || !saveOk) { failScan(_("Error communicating with scanner")); return; } m_signal_pageAvailable.emit(params.filename); /** Stop device **/ doStop(); } void ScannerTwain::doStop() { if(m_state == 6) { TW_PENDINGXFERS twPendingXFers = {}; // State 7/6 to 5 call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, &twPendingXFers); m_state = 5; } if(m_state == 5) { // State 5 to 4 call(&m_srcID, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &m_ui); m_state = 4; } if(m_state == 4) { // State 4 to 3 call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, &m_srcID); m_srcID = {}; m_state = 3; } m_signal_scanStateChanged.emit(State::IDLE); } void ScannerTwain::failScan(const Glib::ustring& errorString) { doStop(); m_signal_scanFailed.emit(errorString); } void ScannerTwain::close() { doStop(); if(m_state == 3) { // State 3 to 2 call(nullptr, DG_CONTROL, DAT_PARENT, MSG_CLOSEDSM, nullptr); m_state = 2; } if(m_state == 2) { dlclose(m_dsmLib); m_dsmLib = nullptr; } m_state = 1; s_instance = nullptr; } #ifdef G_OS_WIN32 GdkFilterReturn ScannerTwain::eventFilter(GdkXEvent* xevent, GdkEvent* event, gpointer data) { LPMSG msg = static_cast(xevent); if(msg->message == WM_CLOSE) { s_instance->m_dsQuit = true; return GDK_FILTER_REMOVE; } TW_EVENT twEvent = {0}; twEvent.pEvent = (TW_MEMREF)msg; twEvent.TWMessage = MSG_NULL; TW_UINT16 twRC = s_instance->m_dsmEntry(&s_instance->m_appID, &s_instance->m_srcID, DG_CONTROL, DAT_EVENT, MSG_PROCESSEVENT, (TW_MEMREF)&twEvent); if(!s_instance->m_useCallback && twRC == TWRC_DSEVENT) { if(twEvent.TWMessage == MSG_XFERREADY || twEvent.TWMessage == MSG_CLOSEDSREQ || twEvent.TWMessage == MSG_CLOSEDSOK || twEvent.TWMessage == MSG_NULL) { s_instance->m_dsMsg = twEvent.TWMessage; } return GDK_FILTER_REMOVE; } return GDK_FILTER_CONTINUE; } #endif /*********************** ScannerTwain internal methods ***********************/ TW_UINT16 ScannerTwain::call(TW_IDENTITY* idDS, TW_UINT32 dataGroup, TW_UINT16 dataType, TW_UINT16 msg, TW_MEMREF data) { TW_UINT16 rc = m_dsmEntry(&m_appID, idDS, dataGroup, dataType, msg, data); if(rc == TWRC_FAILURE) { TW_STATUS status = {}; rc = m_dsmEntry(&m_appID, idDS, DG_CONTROL, DAT_STATUS, MSG_GET, &status); TW_UINT16 cc = rc == TWRC_SUCCESS ? status.ConditionCode : TWCC_BUMMER; g_critical("Call failed with code 0x%x: DataGroup: 0x%x, DataType = 0x%x, Msg = 0x%x", cc, dataGroup, dataType, msg); return TWRC_FAILURE; } return rc; } // TWTY_** size: INT8, INT16, INT32, UINT8, UINT16, UINT32, BOOL, FIX32, FRAME, STR32, STR64, STR128, STR255; static std::size_t TWTY_Size[] = { 1, 2, 4, 1, 2, 4, 2, 4, 16, 32, 64, 128, 255}; void ScannerTwain::setCapability(TW_UINT16 capCode, const CapOneVal& cap) { TW_CAPABILITY twCapability = {capCode, TWON_DONTCARE16, nullptr}; TW_UINT16 rc = call(&m_srcID, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCapability); // Unsupported capability if(rc != TWRC_SUCCESS) { return; } g_assert(twCapability.ConType == TWON_ONEVALUE); pTW_ONEVALUE val = static_cast(m_entryPoint.DSM_MemLock(twCapability.hContainer)); g_assert(val->ItemType == cap.type && val->ItemType <= TWTY_STR255); // This works because the DSM should return a TW_ONEVALUE container allocated sufficiently large to hold // the value of type ItemType. std::memcpy(&val->Item, &cap.data, TWTY_Size[cap.type]); m_entryPoint.DSM_MemUnlock(twCapability.hContainer); call(&m_srcID, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCapability); m_entryPoint.DSM_MemFree(twCapability.hContainer); } TW_UINT16 ScannerTwain::callback(TW_IDENTITY* origin, TW_IDENTITY* /*dest*/, TW_UINT32 /*DG*/, TW_UINT16 /*DAT*/, TW_UINT16 MSG, TW_MEMREF /*data*/) { if(origin == nullptr || origin->Id != s_instance->m_srcID.Id) { return TWRC_FAILURE; } if(MSG == MSG_XFERREADY || MSG == MSG_CLOSEDSREQ || MSG == MSG_CLOSEDSOK || MSG == MSG_NULL) { #ifndef G_OS_WIN32 m_mutex.lock(); #endif s_instance->m_dsMsg = MSG; #ifndef G_OS_WIN32 m_mutex.unlock(); s_instance->m_cond.notify_one(); #endif return TWRC_SUCCESS; } return TWRC_FAILURE; } inline TW_FIX32 ScannerTwain::floatToFix32(float float32) { TW_FIX32 fix32; TW_INT32 value = (TW_INT32)(float32 * 65536.0 + 0.5); fix32.Whole = (TW_INT16)((value >> 16) & 0xFFFFL); fix32.Frac = (TW_INT16)(value & 0xFFFFL); return fix32; } inline float ScannerTwain::fix32ToFloat(TW_FIX32 fix32) { return float(fix32.Whole) + float(fix32.Frac) / (1 << 16); } gImageReader-3.4.0/gtk/src/scanner/ScannerTwain.hh000066400000000000000000000057441417507262200217740ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerTwain.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_TWAIN_HH #define SCANNER_TWAIN_HH #include "../Scanner.hh" #include #include #include #include #ifdef G_OS_WIN32 #include #endif #include class ScannerTwain : public Scanner { public: void init() override; void redetect() override; void scan(const Params& params) override; void cancel() override { m_cancel = true; } void close() override; private: void* m_dsmLib = nullptr; DSMENTRYPROC m_dsmEntry = nullptr; TW_IDENTITY m_appID = {}; TW_ENTRYPOINT m_entryPoint = {}; TW_IDENTITY m_srcID = {}; TW_USERINTERFACE m_ui = {}; TW_UINT16 m_dsMsg = MSG_NULL; bool m_dsQuit = false; bool m_cancel = false; bool m_useCallback = false; int m_state = 0; static ScannerTwain* s_instance; #ifndef G_OS_WIN32 std::mutex m_mutex; std::condition_variable m_cond; #endif struct CapOneVal { CapOneVal() = default; CapOneVal(TW_UINT16 _type, std::int32_t _integer) : type(_type) { data.integer = _integer; } CapOneVal(TW_UINT16 _type, TW_FIX32 _fix32) : type(_type) { data.fix32 = _fix32; } CapOneVal(TW_UINT16 _type, TW_FIX32(&_frame)[4]) : type(_type) { std::memcpy(&data.frame[0], &_frame[0], sizeof(data.frame)); } CapOneVal(TW_UINT16 _type, const char* _string) : type(_type) { std::strncpy(&data.string[0], &_string[0], sizeof(data.string)); } TW_UINT16 type; union { std::uint32_t integer; TW_FIX32 fix32; TW_FIX32 frame[4]; char string[256]; } data; }; void doStop(); void failScan(const Glib::ustring& errorString); TW_UINT16 call(TW_IDENTITY* idDS, TW_UINT32 dataGroup, TW_UINT16 dataType, TW_UINT16 msg, TW_MEMREF data); void setCapability(TW_UINT16 capCode, const CapOneVal& cap); #ifdef G_OS_WIN32 bool saveDIB(TW_MEMREF hImg, const std::string& filename); static GdkFilterReturn eventFilter(GdkXEvent* xevent, GdkEvent* event, gpointer data); #endif static PASCAL TW_UINT16 callback(TW_IDENTITY* origin, TW_IDENTITY* dest, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF data); static inline float fix32ToFloat(TW_FIX32 fix32); static inline TW_FIX32 floatToFix32(float float32); }; typedef ScannerTwain ScannerImpl; #endif // SCANNER_TWAIN_HH gImageReader-3.4.0/mkdocs.yml000066400000000000000000000036731417507262200160540ustar00rootroot00000000000000site_name: gimagereader theme: name: material logo: img/gimagereader.png favicon: img/gimagereader.png repo_url: https://github.com/manisandro/gImageReader site_author: Miharix copyright: Copyright ©2009-2020 Sandro Mani #if servin on server change to true use_directory_urls: false plugins: - search - i18n: default_language: en languages: # en: English sl: SlovenÅ¡Äina he: עברית - redirects: redirect_maps: '7_Translate.md': 'https://hosted.weblate.org/projects/gimagereader/translations/' 'sl/7_Translate.md': 'https://hosted.weblate.org/projects/gimagereader/translations/' 'he/7_Translate.md': 'https://hosted.weblate.org/projects/gimagereader/translations/' '8_Issue_tracker.md': 'https://github.com/manisandro/gImageReader/issues' 'sl/8_Issue_tracker.md': 'https://github.com/manisandro/gImageReader/issues' 'he/8_Issue_tracker.md': 'https://github.com/manisandro/gImageReader/issues' 'News.md': 'https://github.com/manisandro/gImageReader/commits/master' 'sl/News.md': 'https://github.com/manisandro/gImageReader/commits/master' 'he/News.md': 'https://github.com/manisandro/gImageReader/commits/master' 'FAQ.md': 'https://github.com/manisandro/gImageReader/wiki/FAQ' 'sl/FAQ.md': 'https://github.com/manisandro/gImageReader/wiki/FAQ' 'he/FAQ.md': 'https://github.com/manisandro/gImageReader/wiki/FAQ' extra: social: - icon: fontawesome/brands/github link: https://github.com/manisandro/gImageReader alternate: # Switch to English - name: English link: 'en\index.html' #if serving on server change to "en\" lang: en # Switch to Slo - name: SlovenÅ¡Äina link: 'sl\index.html' #if serving on server change to "sl\" lang: sl # Switch to Hebrew - name: עברית link: 'he\index.html' #if serving on server change to "he\" lang: he gImageReader-3.4.0/packaging/000077500000000000000000000000001417507262200157645ustar00rootroot00000000000000gImageReader-3.4.0/packaging/debian/000077500000000000000000000000001417507262200172065ustar00rootroot00000000000000gImageReader-3.4.0/packaging/debian/changelog.in000066400000000000000000000002361417507262200214660ustar00rootroot00000000000000gimagereader (@PACKAGE_VERSION@-1) experimental; urgency=low * gImageReader @PACKAGE_VERSION@. -- Sandro Mani @PACKAGE_RFC_DATE@ gImageReader-3.4.0/packaging/debian/compat000066400000000000000000000000021417507262200204040ustar00rootroot000000000000009 gImageReader-3.4.0/packaging/debian/control000066400000000000000000000050031417507262200206070ustar00rootroot00000000000000Source: gimagereader Section: graphics Priority: optional Maintainer: Sandro Mani Build-Depends: debhelper (>= 9), cmake, intltool, libdjvulibre-dev, libgtkspellmm-3.0-dev, libgtkmm-3.0-dev, libgtksourceviewmm-3.0-dev, libcairomm-1.0-dev, libpoppler-glib-dev, libtesseract-dev, libsane-dev, qtbase5-dev, qttools5-dev, qttools5-dev-tools, libqtspell-qt5-dev, libpoppler-qt5-dev, libjson-glib-dev, libxml++2.6-dev, libpodofo-dev, libquazip5-dev, libquazip5-headers, libzip-dev, python3-gi, uuid-dev Standards-Version: 3.9.4 Homepage: https://github.com/manisandro/gImageReader Package: gimagereader-gtk Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, gimagereader-common (= ${binary:Version}) Replaces: gimagereader Conflicts: gimagereader Description: A graphical frontend to tesseract-ocr gImageReader is a simple front-end to tesseract. Features include: - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents This package contains the Gtk+ front-end. Package: gimagereader-qt Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, gimagereader-common (= ${binary:Version}) Suggests: qt5-image-formats-plugins Description: A graphical frontend to tesseract-ocr gImageReader is a simple front-end to tesseract. Features include: - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents This package contains the Qt front-end. Package: gimagereader-common Architecture: all Depends: ${misc:Depends} Conflicts: gimagereader (<< 2.94-1) Description: Common files for gimagereader This package contains common files for gimagereader. Package: gimagereader-dbg Architecture: any Section: debug Priority: extra Depends: ${misc:Depends} Description: Debugging symbols for gimagereader This package contains the debugging symbols for gimagereader. gImageReader-3.4.0/packaging/debian/copyright000066400000000000000000000037051417507262200211460ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: gimagereader Source: https://github.com/manisandro/gImageReader Files: * Copyright: 2009-2018 Sandro Mani License: GPL-3+ gImageReader is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . gImageReader is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . Files: debian/* Copyright: 2014-2018 Sandro Mani License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". # Please also look if there are files or directories which have a # different copyright/license attached and list them here. # Please avoid to pick license terms that are more restrictive than the # packaged work, as it may make Debian's contributions unacceptable upstream. gImageReader-3.4.0/packaging/debian/docs000066400000000000000000000000271417507262200200600ustar00rootroot00000000000000AUTHORS NEWS README.md gImageReader-3.4.0/packaging/debian/gimagereader-common.install000066400000000000000000000002161417507262200244770ustar00rootroot00000000000000usr/share/icons/hicolor/*/apps/gimagereader.png usr/share/locale/*/LC_MESSAGES/gimagereader.mo usr/share/doc/gimagereader-common/manual*.html gImageReader-3.4.0/packaging/debian/gimagereader-gtk.install000066400000000000000000000002661417507262200240010ustar00rootroot00000000000000usr/bin/gimagereader-gtk usr/share/appdata/gimagereader-gtk.appdata.xml usr/share/applications/gimagereader-gtk.desktop usr/share/glib-2.0/schemas/org.gnome.gimagereader.gschema.xml gImageReader-3.4.0/packaging/debian/gimagereader-qt.install000066400000000000000000000001701417507262200236320ustar00rootroot00000000000000usr/bin/gimagereader-qt5 usr/share/appdata/gimagereader-qt5.appdata.xml usr/share/applications/gimagereader-qt5.desktop gImageReader-3.4.0/packaging/debian/rules000077500000000000000000000013651417507262200202730ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed %: dh $@ override_dh_auto_configure: dh_auto_configure -Bbuild-gtk -- -DINTERFACE_TYPE=gtk -DENABLE_VERSIONCHECK=0 -DMANUAL_DIR="/usr/share/doc/gimagereader-common" dh_auto_configure -Bbuild-qt5 -- -DINTERFACE_TYPE=qt5 -DENABLE_VERSIONCHECK=0 -DMANUAL_DIR="/usr/share/doc/gimagereader-common" override_dh_auto_build: dh_auto_build -Dbuild-gtk dh_auto_build -Dbuild-qt5 override_dh_auto_install: dh_auto_install -Dbuild-gtk dh_auto_install -Dbuild-qt5 override_dh_install: dh_install --list-missing override_dh_strip: dh_strip --dbg-package=gimagereader-dbg .PHONY: override_dh_auto_configure override_dh_auto_build override_dh_install override_dh_install override_dh_strip gImageReader-3.4.0/packaging/debian/source/000077500000000000000000000000001417507262200205065ustar00rootroot00000000000000gImageReader-3.4.0/packaging/debian/source/format000066400000000000000000000000141417507262200217140ustar00rootroot000000000000003.0 (quilt) gImageReader-3.4.0/packaging/debian/watch000066400000000000000000000001741417507262200202410ustar00rootroot00000000000000version=3 http://ftp.gnome.org/pub/GNOME/sources/bijiben/([\d\.]+)/bijiben-(.*)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) gImageReader-3.4.0/packaging/gimagereader.spec.in000066400000000000000000000130651417507262200216660ustar00rootroot00000000000000Name: gimagereader Version: @PACKAGE_VERSION@ Release: 1%{?dist} Summary: A front-end to tesseract-ocr License: GPLv3+ URL: https://github.com/manisandro/gImageReader Source0: https://github.com/manisandro/gImageReader/releases/download/v%{version}/%{name}-%{version}.tar.xz BuildRequires: desktop-file-utils BuildRequires: djvulibre-devel BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: intltool BuildRequires: make BuildRequires: podofo-devel BuildRequires: sane-backends-devel BuildRequires: tesseract-devel BuildRequires: cairomm-devel BuildRequires: libappstream-glib BuildRequires: libjpeg-turbo-devel BuildRequires: libxml++30-devel BuildRequires: libuuid-devel BuildRequires: libzip-devel BuildRequires: gtkmm30-devel BuildRequires: gtksourceviewmm3-devel BuildRequires: gtkspellmm30-devel BuildRequires: json-glib-devel BuildRequires: poppler-glib-devel BuildRequires: python3-gobject BuildRequires: poppler-qt5-devel BuildRequires: qt5-qtbase-devel BuildRequires: qtspell-qt5-devel BuildRequires: quazip-qt5-devel Requires: hicolor-icon-theme Requires: gvfs %description gImageReader is a simple front-end to tesseract. Features include: - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents %package gtk Summary: A Gtk+ front-end to tesseract-ocr # For glib networking operations Requires: gvfs-client Requires: %{name}-common = %{version}-%{release} Obsoletes: %{name} < 2.94-1 %description gtk gImageReader is a simple front-end to tesseract. Features include: - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents This package contains the Gtk+ front-end. %package qt Summary: A Qt front-end to tesseract-ocr Requires: %{name}-common = %{version}-%{release} %description qt gImageReader is a simple front-end to tesseract. Features include: - Import PDF documents and images from disk, scanning devices, clipboard and screenshots - Process multiple images and documents in one go - Manual or automatic recognition area definition - Recognize to plain text or to hOCR documents - Recognized text displayed directly next to the image - Post-process the recognized text, including spellchecking - Generate PDF documents from hOCR documents This package contains the Qt front-end. %package common Summary: Common files for %{name} BuildArch: noarch %description common Common files for %{name}. %prep %autosetup -p1 %build mkdir build_gtk ( cd build_gtk %cmake -DINTERFACE_TYPE=gtk -DENABLE_VERSIONCHECK=0 -DMANUAL_DIR="%{_defaultdocdir}/%{name}-common" .. %make_build ) mkdir build_qt ( cd build_qt %cmake -DINTERFACE_TYPE=qt5 -DENABLE_VERSIONCHECK=0 -DMANUAL_DIR="%{_defaultdocdir}/%{name}-common" .. %make_build ) %install %make_install -C build_gtk %make_install -C build_qt %{_bindir}/desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}-gtk.desktop %{_bindir}/desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}-qt5.desktop %{_bindir}/appstream-util validate %{buildroot}%{_datadir}/appdata/%{name}-gtk.appdata.xml || : %{_bindir}/appstream-util validate %{buildroot}%{_datadir}/appdata/%{name}-qt5.appdata.xml || : %find_lang %{name} %post gtk /usr/bin/update-desktop-database &> /dev/null || : /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : %postun gtk /usr/bin/update-desktop-database &> /dev/null || : if [ $1 -eq 0 ] ; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi %posttrans gtk /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %post qt /usr/bin/update-desktop-database &> /dev/null || : /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : %postun qt /usr/bin/update-desktop-database &> /dev/null || : if [ $1 -eq 0 ] ; then /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi %posttrans qt /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %files common -f %{name}.lang %license COPYING %doc AUTHORS NEWS README.md %{_datadir}/icons/hicolor/48x48/apps/%{name}.png %{_datadir}/icons/hicolor/128x128/apps/%{name}.png %{_datadir}/icons/hicolor/256x256/apps/%{name}.png %doc %{_defaultdocdir}/%{name}-common/manual*.html %files gtk %{_bindir}/%{name}-gtk %{_datadir}/appdata/%{name}-gtk.appdata.xml %{_datadir}/applications/%{name}-gtk.desktop %{_datadir}/glib-2.0/schemas/org.gnome.%{name}.gschema.xml %files qt %{_bindir}/%{name}-qt5 %{_datadir}/appdata/%{name}-qt5.appdata.xml %{_datadir}/applications/%{name}-qt5.desktop %changelog * @PACKAGE_DATE@ Sandro Mani - @PACKAGE_VERSION@-1 - gImageReader @PACKAGE_VERSION@. gImageReader-3.4.0/packaging/win32/000077500000000000000000000000001417507262200167265ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/Dockerfile000066400000000000000000000032731417507262200207250ustar00rootroot00000000000000FROM fedora:rawhide MAINTAINER Sandro Mani RUN dnf -y update; dnf clean all RUN \ echo all > /etc/rpm/macros.image-language-conf && \ dnf install -y \ cmake \ poppler-data \ make \ iso-codes \ findutils \ gettext \ intltool \ hunspell-en \ tesseract \ mingw32-nsis \ zip \ python3-gobject \ \ mingw32-gdb \ mingw32-gcc-c++ \ mingw32-dlfcn \ mingw32-djvulibre \ mingw32-libgomp \ mingw32-libjpeg-turbo \ mingw32-podofo \ mingw32-poppler-qt5 \ mingw32-qt5-qtbase \ mingw32-qt5-qtimageformats \ mingw32-qt5-qttools \ mingw32-qt5-qttranslations \ mingw32-qtspell-qt5 \ mingw32-tesseract \ mingw32-twaindsm \ mingw32-quazip-qt5 \ \ mingw32-libzip \ mingw32-gtk3 gtk3 gtk3-devel \ mingw32-glib2-static glib2 glib2-devel \ mingw32-gtkmm30 \ mingw32-gtkspell3 \ mingw32-gtkspellmm30 \ mingw32-gtksourceviewmm3 \ mingw32-cairomm \ mingw32-poppler \ mingw32-poppler-glib \ mingw32-json-glib \ mingw32-libxml++ \ \ mingw64-gdb \ mingw64-gcc-c++ \ mingw64-dlfcn \ mingw64-djvulibre \ mingw64-libgomp \ mingw64-libjpeg-turbo \ mingw64-podofo \ mingw64-poppler-qt5 \ mingw64-qt5-qtbase \ mingw64-qt5-qtimageformats \ mingw64-qt5-qttools \ mingw64-qt5-qttranslations \ mingw64-qtspell-qt5 \ mingw64-tesseract \ mingw64-twaindsm \ mingw64-quazip-qt5 \ \ mingw64-libzip \ mingw64-gtk3 gtk3 gtk3-devel \ mingw64-glib2-static glib2 glib2-devel \ mingw64-gtkmm30 \ mingw64-gtkspell3 \ mingw64-gtkspellmm30 \ mingw64-gtksourceviewmm3 \ mingw64-cairomm \ mingw64-poppler \ mingw64-poppler-glib \ mingw64-json-glib \ mingw64-libxml++ WORKDIR /workspace VOLUME ["/workspace"]gImageReader-3.4.0/packaging/win32/copyicons.sh000077500000000000000000000023551417507262200213000ustar00rootroot00000000000000#!/bin/sh cd "$(dirname "$(readlink -f "$0")")" if [ $# -lt 1 ]; then echo "Usage: $0 sourcethemedir" exit 1 fi topdir="$PWD" srcthemedir="$1" icons="\ $(grep -o "property name=\"icon_name\">[^<]*<" ../../gtk/data/*.ui | awk -F'[<>]' '{print $2}') $(grep -o "from_icon_name\s*(\s*\"[^\*]*\"" ../../gtk/src/{*.cc,*.hh} | awk -F'"' '{print $2}') $(grep -o "from_icon_name\s*(\s*\"[^\*]*\"" ../../gtk/src/hocr/{*.cc,*.hh} | awk -F'"' '{print $2}') $(grep -o "ÿçùlÿÿÿ ÿÿÿçÁ8ÿÿÿmÿÿÿ½ÿÿÿÿÿìììÿTNBÿ-#f/$ +µ²«Ýèçæþþþþÿÿÿÿÿÿÿþÿÿÿâÿÿÿ»ÿÿÿÿÿÿnÿÿÿmÿÿÿmÿÿÿmÿ³éiÿ ÿ¬nÿÿÿmÿÿÿmÿÿÿmÿçùlÿÿ2 ÿ÷ê^ÿW¾bÿÿ¬0 ÿÿÿmÿÿÿ½ÿÿÿÿÿìììÿTNBÿ-#e."YÿÿÿÿÿÿùÿÿÿÈÿÿÿžÿÿÿvÿêùlÿ©OÿŒ‰;ÿæÊLÿÿÿmÿÿÿmÿÿÿmÿ=Cÿÿûö\ÿÿÿmÿÿÿmÿÿÿmÿçùlÿÿBÿÿÿmÿ}àgÿÿ¶> ÿÿÿmÿÿÿ½ÿÿÿÿÿìëëÿTNBÿ-#e."Yÿÿÿÿÿÿàÿÿÿmÿÿÿmÿ‚¬\ÿÿ?=ÿÿ ÿðÛ?ÿÿÿmÿÿÿmÿ ÿ8ÿÿÿmÿÿÿmÿÿÿmÿÿÿmÿçùlÿÿBÿÿÿmÿ3‚SÿÿêË5ÿÿÿmÿÿÿ½ÿÿÿÿÿëëëÿTNBÿ-#e-"ZÿÿÿÿÿÿàÿÿÿmÿŽÔeÿÿЕ ÿÿÿmÿ6ŽYÿÿÃ^ÿÿÿmÿòümÿÿ ÿÿÿlÿÿÿmÿÿÿmÿÏœVÿçùlÿÿÿ&8ÿ-ÿÍ£6ÿÿÿmÿÿÿmÿÿÿ½ÿÿÿÿÿëëëÿTNBÿ0&e-"Zÿÿÿÿÿÿàÿÿÿmÿ*;ÿ ÿýûeÿÿÿmÿnÜfÿÿ¶: ÿÿÿmÿÿÿmÿÿÿ»—'ÿÒÝ`ÿPw@ÿ¡* ÿçùlÿ2"ÿo)ÿË»IÿÿýjÿÿÿmÿÿÿoÿÿÿÿÿÿÚÿÿÿÿÿëëêÿUOCÿ3)d-"Zÿÿÿÿÿÿàÿýÿmÿÿ;ÿÿÿmÿÿÿmÿiÛfÿÿÊrÿÿÿmÿÿÿmÿ€µaÿ ÿÿ!ÿŠq'ÿúò]ÿÿÿmÿÿÿmÿÿÿmÿÿÿsÿÿÿ”ÿÿÿ¿ÿÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿëêêÿWQEÿ8+d-"[ÿÿÿÿÿÿàÿðümÿÿ( ÿÿÿmÿÿÿmÿ8’[ÿÿóã@ÿÿÿmÿÿÿmÿÿÿmÿòúlÿæã`ÿÿþkÿÿÿmÿÿÿmÿÿÿ€ÿÿÿ§ÿÿÿÓÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿZSHÿ;0d-"[ÿÿÿÿÿÿàÿÿÿmÿ ÿÿäÄ;ÿºØeÿ ÿ©hÿÿÿmÿÿÿmÿÿÿmÿÿÿmÿÿÿmÿÿÿoÿÿÿÿÿÿ»ÿÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ[UJÿ@6!d/$\ÿÿÿÿÿÿàÿÿÿmÿcœ\ÿÿÿ$ÿ¬‰-ÿÿÿlÿÿÿmÿÿÿmÿÿÿzÿÿÿ¢ÿÿÿÎÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêéÿ^XMÿC;'c/$\ÿÿÿÿÿÿàÿÿÿmÿÿÿmÿÜèiÿÝÕZÿÿþjÿÿÿnÿÿÿŠÿÿÿ±ÿÿÿÝÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêéÿa[PÿH>,c/$]ÿÿÿÿÿÿàÿÿÿmÿÿÿmÿÿÿwÿÿÿžÿÿÿÅÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿåååÿÀÀÀÿœœœÿ’’’ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿÚÚÚÿ¶¶¶ÿ”””ÿâââÿÿÿÿÿÿÿÿÿêééÿc]SÿMC1c/$]ÿÿÿÿÿÿêÿÿÿ·ÿÿÿâÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÞÞÞÿºººÿ“““ÿ•••ÿºººÿÞÞÞÿýýýÿÿÿÿÿÿÿÿÿõõõÿÖÖÖÿ±±±ÿŽŽŽÿ¡¡¡ÿÆÆÆÿçççÿÿÿÿÿÿÿÿÿÿÿÿÿêééÿf`UÿRH6c/$]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿÒÒÒÿ®®®ÿÿ¡¡¡ÿÆÆÆÿìììÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿÆÆÆÿ¡¡¡ÿÿ®®®ÿÒÒÒÿ÷÷÷ÿÿÿÿÿÿÿÿÿûûûÿþþþÿÿÿÿÿÿÿÿÿééèÿicYÿVNN[ÿ=N\ÿNamÿzŽ™ÿŒŽ‰ÿÍ»ªÿÿÿÿÿõõôÿæåãÿÓÒÏÿ±¯ªÿ}ypÿ~vda-" aÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿùúûÿÁÏØÿ…¢µÿzœ³ÿp¢ÿFctÿZyŠÿ`~ÿVv†ÿRrƒÿGcsÿ@Ueÿ>R`ÿWn|ÿ‰¥´ÿ¸ÝìÿÁëûÿÒÎÁÿ⸕ÿèÇ«ÿúúùÿììêÿËÉÆÿ “ÿƒtÿ{pÿzlI-" aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÅÏÿ]}ÿA]lÿFg{ÿFfwÿLk}ÿf‰™ÿHdvÿLk}ÿKfvÿq¡ÿj‰šÿ޳Âÿ¨ËØÿ¿ãñÿÉÝàÿؽ£ÿä¶‹ÿèÅŸÿѱÿ¼¹±ÿ—‘†ÿ„qÿ~xjÿ„ÿ‚}lÕ€€€/" bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨²´ÿIixÿPr…ÿCbrÿ@]lÿTwŽÿn›³ÿ´ÌÿÀÕÿ®Ôãÿ°»ÿ¬¨£ÿ¿ÊÉÿ̵ÿÝÀ¡ÿïÌ¢ÿк—ÿ¯œÿ•‡pÿ€jÿ“Ž‚ÿ£ž”ÿº·°ÿËÊÇÿ‡ƒtÿ†ƒrJ/" bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬²³ÿNpƒÿ~•Ÿÿ‚›ªÿ­¯¨ÿ§·¸ÿ±­¤ÿ£ÃÌÿ•ÏéÿªÃÉÿȧŠÿÌ }ÿÖ¡{ÿòÓ¨ÿèÅ¡ÿÔ§ˆÿ“jÿ­¢‘ÿޱÿÜÖÐÿ÷÷öÿýýýÿîîîÿ£¡›ÿ‰ƒs§0&dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÍÁÿ±µ­ÿ˜Íâÿ©ž•ÿš–•ÿˆ—¥ÿ–› ÿȪ’ÿÏž{ÿͦ…ÿÑ«Šÿ×¼ÿؽŸÿέÿÊ¡ÿÀ‹fÿ¢‘~ÿòðîÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿÍÍÌÿ‡ƒtòŽŽ{0&dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÒÁÿÄÉÅÿÀÒÖÿÀ‰eÿÅŸ€ÿÙϼÿÜÑ»ÿàгÿçàÅÿÞβÿÖ¼œÿ×¶’ÿÁ˜vÿÒ£zÿìÀÿÚ¬€ÿ«–|ÿïîìÿÿÿÿÿÿÿÿÿüüüÿæææÿ’Ž…ÿމ{h0&eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä̼ÿÕ¹šÿàÒ¶ÿæÞÂÿèáÆÿåÛ¿ÿØÄ¥ÿ×»šÿЭŒÿÍ­ÿÙÆªÿäÚÀÿìÙ¶ÿëÂ’ÿ¡lOÿªrQÿ–yeÿëéçÿÿÿÿÿþþþÿóóóÿ¸¸´ÿŠ|¿ÿÿÿ0&eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàͽÿçÞÃÿÙÆªÿÑ­‰ÿÓ¨~ÿÑ¡wÿت~ÿíÃÿòÈ•ÿòÈ•ÿèÀ’ÿÍ«ˆÿÇ›vÿ¾hÿ–`Fÿ‘ZBÿ’o[ÿæåãÿÿÿÿÿúúúÿÙÙÙÿމ~ù˜’€*2(eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ׿²ÿÄ”nÿÉ™qÿ¬zZÿ«iÿÀ£‰ÿÌ©ˆÿÔ¡uÿÜ¥rÿÑœpÿÁiÿªuVÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ¬…eÿãáßÿýýýÿëëëÿ –ÿ•{2(fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×µÿÈ­”ÿ¸Œkÿ’[CÿŸnUÿ«~eÿ渆ÿè­uÿµ|Wÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ’iTÿàÞÜÿöööÿÂÁ¿ÿ•‘ƒÒ™™™2(fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÀ¯ÿØ«~ÿÔ¨ÿÓ¤zÿÊ­ÿÝȪÿÞÊ«ÿÇ–mÿ‘[Bÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿŸzhÿßÞÜÿàààÿ˜’‡ù˜ˆ/4*gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ»«ÿÇŽaÿ¶~Xÿ›dHÿ‘ZBÿ‘ZBÿ‘ZBÿ‘[Bÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ“]Eÿª€nÿƬ ÿÖÍÈÿÇÅ¿ÿÙØ×ÿ§¤›ÿœ–‰w;/hÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ¾´ÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿšhRÿ¹–‡ÿÚÈÀÿùõôÿùùøÿêêèÿÙØÕÿ¶³¯ÿ¼º¶ÿž˜Š²ÿÿÿ=3 iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ¾´ÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ‘ZBÿ£uaÿħšÿåØÓÿþþþÿÿÿÿÿÿÿÿÿüüüÿððïÿàßÝÿ¿¼ºÿ£¢žÿž™ŒÔ¥¥–B5"iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ¾´ÿ‘ZBÿ•`Iÿ²‹zÿÓ½³ÿóîëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùøøÿØ×Õÿ±°®ÿ•“Œô‘Ž„³—‹Vª•• F:&jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìãÞÿåØÓÿþýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿðððÿÓÒÑÿ¬«§ÿ‹‡€æ‹ˆ|–’€D™™™MA.jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøø÷ÿáááÿ¿½¼ÿ’ˆú‡vLjri‰‰vRH5jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿïïîÿÕÕÔÿ¦¤Ÿÿƒ€vë|vgœ|teD€€€SL9kÿÿÿÿöööÿãããÿÀ¿¾ÿЇ€úytgËmfWpoo^SJ87‡xàvpeÜe]L‰e\K:UUUÿÿÿÿñÿÿÿÿÿÿÿÿÿøÿÿÿÿÀÿÿÿüÿÿÿàÿÿÿÿÿðÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€?ÿÿ€?ÿÿ€ÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€?ÿÿÿ€ÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿgImageReader-3.4.0/packaging/win32/gtk_skel/000077500000000000000000000000001417507262200205315ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/etc/000077500000000000000000000000001417507262200213045ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/etc/gtk-3.0/000077500000000000000000000000001417507262200223675ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/etc/gtk-3.0/gtk.immodules000066400000000000000000000032721417507262200251000ustar00rootroot00000000000000# GTK+ Input Method Modules file # Automatically generated file, do not edit # Created by Z:\usr\i686-pc-mingw32\sys-root\mingw\bin\gtk-query-immodules-3.0.exe from gtk+-3.0.9 # # ModulesPath = Z:\usr\i686-pc-mingw32\sys-root\mingw\lib\gtk-3.0\3.0.0\i686-pc-mingw32\immodules;Z:\usr\i686-pc-mingw32\sys-root\mingw\lib\gtk-3.0\3.0.0\immodules;Z:\usr\i686-pc-mingw32\sys-root\mingw\lib\gtk-3.0\i686-pc-mingw32\immodules;Z:\usr\i686-pc-mingw32\sys-root\mingw\lib\gtk-3.0\immodules # "../lib/gtk-3.0/3.0.0/immodules/im-ipa.dll" "ipa" "IPA" "gtk30" "../share/locale" "" "../lib/gtk-3.0/3.0.0/immodules/im-multipress.dll" "multipress" "Multipress" "gtk30" "" "" "../lib/gtk-3.0/3.0.0/immodules/im-cyrillic-translit.dll" "cyrillic_translit" "Cyrillic (Transliterated)" "gtk30" "../share/locale" "" "../lib/gtk-3.0/3.0.0/immodules/im-ime.dll" "ime" "Windows IME" "gtk+" "" "ja:ko:zh" "../lib/gtk-3.0/3.0.0/immodules/im-viqr.dll" "viqr" "Vietnamese (VIQR)" "gtk30" "../share/locale" "vi" "../lib/gtk-3.0/3.0.0/immodules/im-thai.dll" "thai" "Thai-Lao" "gtk30" "../share/locale" "lo:th" "../lib/gtk-3.0/3.0.0/immodules/im-inuktitut.dll" "inuktitut" "Inuktitut (Transliterated)" "gtk30" "../share/locale" "iu" "../lib/gtk-3.0/3.0.0/immodules/im-ti-et.dll" "ti_et" "Tigrigna-Ethiopian (EZ+)" "gtk30" "../share/locale" "ti" "../lib/gtk-3.0/3.0.0/immodules/im-ti-er.dll" "ti_er" "Tigrigna-Eritrean (EZ+)" "gtk30" "../share/locale" "ti" "../lib/gtk-3.0/3.0.0/immodules/im-cedilla.dll" "cedilla" "Cedilla" "gtk30" "../share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa" "../lib/gtk-3.0/3.0.0/immodules/im-am-et.dll" "am_et" "Amharic (EZ+)" "gtk30" "../share/locale" "am" gImageReader-3.4.0/packaging/win32/gtk_skel/etc/gtk-3.0/im-multipress.conf000066400000000000000000000015721417507262200260550ustar00rootroot00000000000000# Example configuration file for the GTK+ Multipress Input Method # Authored by Openismus GmbH, 2009. # # This file follows the GKeyFile format. On the left of the equal sign goes # the key that you press repeatedly to iterate through the text items listed # on the right-hand side. The list items are separated by semicolons ";" and # consist of one or more characters each. The backslash "\" is used to escape # characters; for instance "\;" for a literal semicolon. # # The example configuration below imitates the behavior of a standard mobile # phone by a major manufacturer, with German language setting. [keys] KP_1 = .;,;?;!;';";1;-;(;);@;/;:;_ KP_2 = a;b;c;2;ä;à;á;ã;â;Ã¥;æ;ç KP_3 = d;e;f;3;è;é;ë;ê;ð KP_4 = g;h;i;4;ì;í;î;ï KP_5 = j;k;l;5;£ KP_6 = m;n;o;6;ö;ò;ó;ô;õ;ø;ñ KP_7 = p;q;r;s;7;ß;$ KP_8 = t;u;v;8;ü;ù;ú;û KP_9 = w;x;y;z;9;ý;þ KP_0 = \s;0 gImageReader-3.4.0/packaging/win32/gtk_skel/etc/gtk-3.0/settings.ini000066400000000000000000000001021417507262200247210ustar00rootroot00000000000000[Settings] gtk-toolbar-style = icons gtk-icon-theme-name = hicolorgImageReader-3.4.0/packaging/win32/gtk_skel/etc/pango/000077500000000000000000000000001417507262200224105ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/etc/pango/pango.modules000066400000000000000000000023601417507262200251070ustar00rootroot00000000000000# Pango Modules file # Automatically generated file, do not edit # # ModulesPath = Z:\usr\i686-w64-mingw32\sys-root\mingw\lib\pango\1.8.0\modules # ".\\pango-indic-lang.dll" devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:* ".\\pango-indic-lang.dll" bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:* ".\\pango-indic-lang.dll" guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:* ".\\pango-indic-lang.dll" gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:* ".\\pango-indic-lang.dll" oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:* ".\\pango-indic-lang.dll" tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:* ".\\pango-indic-lang.dll" teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:* ".\\pango-indic-lang.dll" kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:* ".\\pango-indic-lang.dll" mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:* ".\\pango-indic-lang.dll" sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:* ".\\pango-arabic-lang.dll" ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:* ".\\pango-basic-fc.dll" BasicScriptEngineFc PangoEngineShape PangoRenderFc common: gImageReader-3.4.0/packaging/win32/gtk_skel/share/000077500000000000000000000000001417507262200216335ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/000077500000000000000000000000001417507262200227465ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/000077500000000000000000000000001417507262200244055ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/000077500000000000000000000000001417507262200251725ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions/000077500000000000000000000000001417507262200266325ustar00rootroot00000000000000action-unavailable-symbolic.symbolic.png000066400000000000000000000004651417507262200364630ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆìIDAT8µ’K‚P EÏ\øÁWƒ„hˆ›q¤èŠt®+@˜wŸ©àà­ðÀ±I¸mïmû °>°À]|,ç[ñ¸Y…_€ ®8•Ä-à ¸ÀZb©¤_PŽEd¦:ùg¥”ã/$‰/4xГ¢:’‘Äö¼ ØV#;C•Ûüª òù› «"éòÞÃ˺…vmãøòéÄPÀ5e+’ìä{®“i)ä fÛMÌ1ùJùŒ-"/’¼›'À¤ªXb–tüP„9œRÛ?Û1<^Ì¡@eeIEND®B`‚document-new-symbolic.symbolic.png000066400000000000000000000002701417507262200353240ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆoIDAT8c` "8ÊÀÀð>ÍÀÀ †Ï|šaø:ƒ$!°Q†K„ ÁgÔù—Þ!Ù˜!8Õc†:&"4àÀB†FJ\€NtózìÀøŒ»9@p¥ljàbÈ.8BŽ ªÆ*ñ´ã˜IEND®B`‚document-open-symbolic.symbolic.png000066400000000000000000000003021417507262200354700ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆyIDAT8Å“A € EŸÑÕê..:f‹îu…VÙFAt´É‚>|uæ¡„\3à€ú3IÃÁ'0i¥ý ²$Cw€±Ò2Á$ÍñÚ`ºJ“J¯P~³J½{¤ÿ3ø°ûº%È`ôEíIÞ€¡ýî^uÉ?&¼Á¢BIEND®B`‚document-print-preview-symbolic.symbolic.png000066400000000000000000000004221417507262200373450ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆÉIDAT8­Ó1NQÐ3И@gGŒv” [ÐÒMXг CbcÅp #+Ñ–ÐŒÂ7q2΀0Þäÿ¾÷ï»÷%Ÿ†H*¸Ý)oZMüRßÖO9)?yŽå®CÒxXcŒ.n0GVnÊsUáïØâ˜”ûÓQ\Ô0jS´1ÂWXÖYÎá"&· õ7<æ—C;há2&Þ×Á ¢Ô¢a†ûYá#øÕßà—@†'ôÂö‹¨½9†ç¹=WúHö¾Y8Š#zÈ«IEND®B`‚document-save-as-symbolic.symbolic.png000066400000000000000000000003501417507262200360710ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆŸIDAT8’A 1KÙ7Hðì3Ö/íkÄßxr/^Ö‹ ¿‰—$öÆI- “îf&>Ì@tž+Ñj6(Úí&“A꼂s‹¼sk…Ü ½z® —$|ʹ^<¡2kHèøV쀇˜_ÀÞc<Ș9DÍ·¤ir¦Îý”4…M%ðþƒâëýÄ“ÔggðêÕGé«»ïQ$ÀCíûŸ7 ?6€‹ÇéIEND®B`‚document-save-symbolic.symbolic.png000066400000000000000000000003201417507262200354650ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ‡IDAT8c` 1øÅ8¥6 Nþ300œg``@“€Šá 8Uxˆ0ö9b c``¸‚¤†o000Hc6CˆÖ¬‚äL˜!ÈšOBÕà{òðÈçAÕÀ#š¢BY¾t0‰=HƒQBÝIÜMÓ)HÐõ‘œ&}ˆ3Á|IEND®B`‚edit-clear-symbolic.symbolic.png000066400000000000000000000003541417507262200347330ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ£IDAT8ÍÒ½ A àÃB@[QÅŸÖÊóµÒÞJÁV¬mVX–cïDff3ÙðÑÃÏš|`SE>4 ¿ó“»Ø@~göå+\qÃ:àËX 7ö4&˜…z˜N[Ø ƒÈfÇS¤[L¢…vÔw’>ëÿ‰eÀŒ0õ,µ)0Ç,¾Løò›Ø©=¤XdÛ€\yÊ¿"WyGJ_Õ@IEND®B`‚edit-copy-symbolic.symbolic.png000066400000000000000000000002331417507262200346130ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆRIDAT8c`hÀˆÄþCÍ?f\0a1ˆ$ÀDX `Á!Ž×ߨ ÀL  Y0xÂà¦7ˆ2|à½@®Äþ ®#ÓRìŽv m•´¼IEND®B`‚edit-delete-symbolic.symbolic.png000066400000000000000000000004361417507262200351100ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆÕIDAT8µ’ÍÁP…?ÂNcoeÑDH=€…¥zž€z>Õ‡°²Už I-:7C‹ˆ“œäöΜ3?·ðxÀH€T˜‘Äj±n@QÁ+Ö‰ó±cþÊÄ{SÙ2ºM1X™ùÀ¸HÛ3¹sèKÝAb* å~Œå웜Xd&x*Þ&'Õ#f'- £¾ÛBÍÞ¸OTÛ¾œ“³Ó‘ "&'a ª:®µG¹í¯ŸQ#äóinÅÚľˆ­\)vèÊÅž…±ÌüÔöϸKÒo~M ¨IEND®B`‚edit-find-replace-symbolic.symbolic.png000066400000000000000000000004561417507262200362010ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆåIDAT8­Ï1K‚aà'p‡†‚hi¶ÅZƒ&—~@?¥QƒÑh°©½–@¢¡IÁ¶¢)'º¾Èç§|xàÞsï9÷hàSÌ0ÁuðËèâÑÆæ9ï;æ)ŽðÇ4ñNQEýà'¨Äå1Τ+bgâeìà-t’TãtiäIŽAÚ9­ÕI‡¿AVˈEœ9ŽËˆ¡Ã{ÿ3\m"†:¾bé.L6g8Ç'.Wˆ[à È¤Vpù1þ£u&«bïâ%øw®3È뼇·˜¿¥(Â>†x*k°}üý“VjÆzDIEND®B`‚edit-paste-symbolic.symbolic.png000066400000000000000000000003371417507262200347620ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ–IDAT8å“Á ƒ0 †¿ ú>´Ûe øŒ^ÆNºÙÒÚbª±Ôó~%韟¤IAÇ8ao 9àÐxß)Ö†ÓƒL¾6\–8`‘uN…-ÄXV ‡DદƒœÂUr¸ü¹À¿D;lǨM¡üd"•"˜Ýù-ξÁþXÖVJ0Ë à | “¿À=:?o@ù]‰Ð2IEND®B`‚edit-redo-symbolic.symbolic.png000066400000000000000000000002751417507262200346000ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆtIDAT8å‘1@@E_¥ÒJˆóhpqD«£áºm¬Â$D–•éÄO¦šÿ_ægà7rÀäZ@'È4€Þ@*ÀVÌw3é5\BA@/ˈ41Äž …ϦÖs“ ßX+GO•JöŸ[-àƒÚx\0Hê/IEND®B`‚edit-undo-symbolic.symbolic.png000066400000000000000000000003211417507262200346040ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆˆIDAT8ÝÑ; ÂP…á¯J'Xøq?º"ÉEEAÅÂUØ¥Š…SHÈÃÜJ<0Õ™ÿÜ™¹ü¥f8¡L'¸|ì q øŽyx/–-Uà€u×èßTmÈ·h8cTñ3lÂß7­²À#š¶5þ ¼gS,½XýÆ y×mú¼Á*% À.þa½9/ÝÆ¢‚ÔIEND®B`‚error-correct-symbolic.symbolic.png000066400000000000000000000004501417507262200355070ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆßIDAT8­Ð1JCA…áOD;Š;p 6–vâÜ€Š˜@hkaaáÜAj‰•Úha«¸† φ™ðxàùÿ¹w.ZÄ>Ðdõ‰>æÍÐeÌëKµ€8y»âŸŒåRÃ44,¼Ãl“qºÉ|ó> ÚÃ*²0)üõ1xƒð¾ÎB®0zxNà¬'p“„¬à(…£Öð„Wl`XتÁná>¿ê…Éý |< ŽªÁ'màƒ |Ú†›|Ö†· u7ôŽ[ìwù¹þVWè_ô ùü]ŸCÌøMIEND®B`‚focus-windows-symbolic.symbolic.png000066400000000000000000000003061417507262200355260ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ}IDAT8µ’A€ GPÿÿý‘? ¢ÑhŠ!nÒK[v·-ð3`‹DP%[`Q*Sj1‡`åpzOŲ:žnn=–ðÎyÏÙZŸS¯P'Šçò’FZÔ -q¦¡Î+K˳ÏG dÁiJÅÿ ;·8¾7LãIEND®B`‚go-down-symbolic.symbolic.png000066400000000000000000000002461417507262200342740ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ]IDAT8í± €0 o ¬°ÿFI‘&ÌÝ$± WYú÷ûeøy•h€õ˜PœQÍ l@VCö@K^ÅYÈòò¬jéæè?n“åË^È£eC¸Qû£\/ï  kIEND®B`‚go-up-symbolic.symbolic.png000066400000000000000000000002451417507262200337500ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ\IDAT8íA ! çŠþÿGzð¢oq/=ieOË¥mÒ>(¼B Ѐ|+žÂ#“TÖ¥Þ¾£/7 =7‰%öf¦ÉØDÕ¯ Ë`Ýk“.»?Þ¼ é&&IEND®B`‚insert-text-symbolic.symbolic.png000066400000000000000000000003311417507262200352030ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆIDAT8Í’Á ƒ0 EŸŠÔÀ¤Kt«H•` nÜÛ 2Hi×H8€B"’páIÿûçÛ2l±} \=INzÏ Æc•¤—bæâÔ@+¿„âïÒE“~Rp/Á=V)qC<98‚“±Ôà" ¼r г,mš˜n¤ù÷2ó>”H±®ºì¡IEND®B`‚list-add-symbolic.symbolic.png000066400000000000000000000001611417507262200344170ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ(IDAT8c`öà?ãL”Ú0ð0¢ññú›>Š]@Œ„Xò¦ ËSáwIEND®B`‚list-remove-symbolic.symbolic.png000066400000000000000000000001451417507262200351660ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆIDAT8c`Ã0¢ñÿ“ª‰znCC_¾?‚WIEND®B`‚object-rotate-left-symbolic.symbolic.png000066400000000000000000000003001417507262200364030ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆwIDAT8ÝA € E-:B ]©îÓ lÔUZÙ"%)Çv=d˜÷ý¯é€ØWú„¤ ˜ÜâÔºâ'¾v‘ ŠªUé © Ì€3q³¬6Æ-®\_ðw“ ‘†Èƒw£–@Þ€6WŽCŠd ¨ý‰ºÞ*i’C öIEND®B`‚object-rotate-right-symbolic.symbolic.png000066400000000000000000000003101417507262200365670ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆIDAT8Ý‘A@0'~P‚y‘/r䀟pªƒ6]%Qåd’M“mw²»…ß¡½X¨c2‚%’hŒ X‰–X¸1N$o¬w;·9er—Ýø æa¡ç-0sþÎÙÜ‘‹N40eh±%coyЧÅÅq™ß±u¿*QñÄêIEND®B`‚object-select-symbolic.symbolic.png000066400000000000000000000002471417507262200354460ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ^IDAT8c`¤9† Jäj¾ËÀÀðŸá!>C ]ì>Tó(] Š-È6 ÛLÐöh¶Øk3º þcÁxm&dÑš±B²fP`€„‰9š‡Òõ%Ý(ýTœIEND®B`‚pan-down-symbolic.symbolic.png000066400000000000000000000002221417507262200344370ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆIIDAT8c`F4¾ ‘úÞã’Èg``øÇÀÀðþÇÀÀNÈt\†¥—!$iF7¯f<Ld``à€²g’jû( çtDžÙeIEND®B`‚pan-end-symbolic.symbolic.png000066400000000000000000000002211417507262200342350ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆHIDAT8ÝÒ1 €0À£°Ïìèèë[Dp04{Ž á·YÐf€Šmˆ‘+!wà)ɼ· :ÖˆÊ'—9Ž—?–Xù†§?‡IEND®B`‚pan-start-symbolic.symbolic.png000066400000000000000000000002321417507262200346260ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆQIDAT8c`1 “Ÿ\Í ÿ(ÑL–ÈšI6]3N˜pÀHŠm¸@Ã?B. Ų @6«,D0Jÿ'׃ùœíQyIEND®B`‚pan-up-symbolic.symbolic.png000066400000000000000000000001641417507262200341210ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆ+IDAT8c`4åPLh```øÅ ”h&Ùlš‰6Ÿf²½3 h lÛ+ðà(IEND®B`‚tab-new-symbolic.symbolic.png000066400000000000000000000002701417507262200342540ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆoIDAT8µA€ WôÀƒô¡òMô —=TÒÆâ&=´,Û)0I@p¨J]ôFp>ö•d@æð0Ðîôf9,.†€—?CŸ jПôŒH~#Ü^Ù¯ìËt‚MyW¸ äŸä&p«kË)k…w[IEND®B`‚view-refresh-symbolic.symbolic.png000066400000000000000000000004231417507262200353250ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆÊIDAT8ÍÒÝJBQà¯0ó*PQ¦Gñ)„RMŒÐ@ЄÞÁ ‰¢.µ#ûœn]0 {~kö ç† 1Æ'6xŠØUÔŒð“jncÉ”½ ùçA¯‘Xâ·h ƒuäžó|C5¡®Ž÷Eì™;‰æý̧–ÁG ‚¼?¥ðßΈؗáá‹ð²V¨%ò5Låì®1‹‚5º¸ ë:®qZ¤¢åx y‡Ôúo”2ú˜`kwÊCôBåâ¢öG ÖkO¯IEND®B`‚window-close-symbolic.symbolic.png000066400000000000000000000003031417507262200353260ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆzIDAT8í‘; €0 @^A…âýïàànQ”â)—º E1ðA!Íç•øy"Pª\´Rûd’ÆQ$à%,‚ X”dxj‹ •D`š§ÆìEp»ºrL8`æþsP±³údÀ)‰·¢HôkŽ{? ’5%Zy|NÚIEND®B`‚window-maximize-symbolic.symbolic.png000066400000000000000000000002251417507262200360470ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆLIDAT8c`ò€‹=ÿðÀÌÀÀð‡KYð(üO#!þA]ƒÏ@Âþ%Þ\aÀÄ€ÃÏTw¶¨Á]H€(— !9SïIEND®B`‚window-minimize-symbolic.symbolic.png000066400000000000000000000001501417507262200360420ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆIDAT8c`£`0F,bÿèaBæ°iè(À}ªˆñ7‘IEND®B`‚window-restore-symbolic.symbolic.png000066400000000000000000000002141417507262200357050ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆCIDAT8c`Œ8Ä™pˆÿ#Æf†?ÄZˆË&øÅ8>þAåñZBÈ Ãñ:Ÿ*.À¸Ä ºh$mHŒIQIEND®B`‚zoom-fit-best-symbolic.symbolic.png000066400000000000000000000002571417507262200354230ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆfIDAT8Í’K €0 D_ÄûD{ÆÆBµÓ.¦!™¤øðäÚ®"k êcáÀ¢‚>ë\f‰ | oX&)ª}å†~ &°N¤Xíg'u™ê/t‘¨p`OøKR±“?¦IEND®B`‚zoom-in-symbolic.symbolic.png000066400000000000000000000002521417507262200343070ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆaIDAT8Í’A €0 §âÿ¢}£ñ Ñ&Í¡àBtv …?¥2y½Ô àrs6¢qC)ÉRh•ÒìAó×üzæ2m6/7ð&ÃXƒÊ?xv- 3à,”-Î ¡Ñ»žÿ"IEND®B`‚zoom-original-symbolic.symbolic.png000066400000000000000000000002531417507262200355060ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆbIDAT8Í’K€ Ãý¢ÜÅY7búY| B¦ ð§4@‚kï—Š\ÃÞŠÛ¤q¡S&9Ÿ"ÓÊ2ðì\ƒPK ”õ€êœ»sЙðÖj@#àH<öqnf„ç9ä)IEND®B`‚zoom-out-symbolic.symbolic.png000066400000000000000000000002421417507262200345070ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/actions‰PNG  IHDRóÿasBIT|dˆYIDAT8Í’Q !§¥û¤:cîW!-…±=ð#±QÂM*€#µOAêð^I€gˆsâ@£ìh'ù™Ÿ5M`6ô5Às½V 6ˆÙÑì°^ÔÄ·ôÖIEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/apps/000077500000000000000000000000001417507262200261355ustar00rootroot00000000000000help-contents-symbolic.symbolic.png000066400000000000000000000004541417507262200350110ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/apps‰PNG  IHDRóÿasBIT|dˆãIDAT8•Ò=/DAÆñq%”:…ÚKè$4:߉D-[«Eö–d7*„+A±ç&s_vö:ÉSÌ3ÏùŸ™É0« ¼à7£gœ›SÓ͵*\öê@®®r!¸N ëÌl„ú O9À1ðzÄin`jÆK¬†ÊðNÚù¥Ä¨×÷(°MÈ7ŽZù±ˆ¦5¼á ôŠõØ+Ò¬hV úÂVLùŒìO¨SéŒÌ~]…q¨ ï®'ß1öc⛡2¼½!ØÅ-ÞC7ØÎäÿÄN~9Œikc‘Òp†É?“èñÜá}µ›Q ·IEND®B`‚text-editor-symbolic.symbolic.png000066400000000000000000000003441417507262200344740ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/apps‰PNG  IHDRóÿasBIT|dˆ›IDAT8•’A! EŸfÀñIP”üwŒÐÄ2c£ À8KÀ(‚˜¯µw>µ÷Z wAœs­O–§å@sËàHqrh¦b p³Ä3€&ÀLÜ=6h¶‡ng€öÏÝ]m‘J¿‹£÷¢Òg‡ÒNÍ&‹6Se`û5…IEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/categories/000077500000000000000000000000001417507262200273175ustar00rootroot00000000000000applications-system-symbolic.symbolic.png000066400000000000000000000004371417507262200374210ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/categories‰PNG  IHDRóÿasBIT|dˆÖIDAT8µÒ1JQ‡ñ_ÔV°^Òx±°³Obá\kkO È!L„46š ¼€ ’¬…Ãw‰+äƒif¾yü÷X3wui8Æ}ôðšè%7‰³`ké€ ìcŒ'ì$‹=ìÆi¥‡)ª–˜ÆùÅ)¸ŽøŽs‰2¹*Î = ®0¯M*†”µú<=?8Ä,BÑp@‘Ú,.V\Hþ²Â…†6Sìã ÷8À>ðŒmœá2þ¯×xÀãò”?ã7'_0¬5“«â´Òù+¯b”éëã•JÐ7 »kIEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/devices/000077500000000000000000000000001417507262200266145ustar00rootroot00000000000000camera-photo-symbolic.symbolic.png000066400000000000000000000003421417507262200352600ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/devices‰PNG  IHDRóÿasBIT|dˆ™IDAT8Í‘1ƒP C_ÙAj¹¨ ¢.âÌŸÞƒ¸ÃOA— KYœ|Ç·³bVS£7x Ö€ÿš/‚BGÖnz TuÀì̹ ¸9Û¯êí ôâîÀ X€VÜpD ·W•(ø ѯeª¸V.Ј{‰0³Ì¢& |2l™+m¶3ÑiîÕ3ºÇñô?[þÑuIEND®B`‚scanner-symbolic.symbolic.png000066400000000000000000000004061417507262200343330ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/devices‰PNG  IHDRóÿasBIT|dˆ½IDAT8•бmAÐÇK®Âe87™$w@'nèÃ]ÐF"9¸Ä|ÐÝÂúöFúZivfvþrÁœ gP£a¾N‹zŠc$¾b‰oÿã ‹ð« ¿âüˆF9Ô¡ézÀëõ×áéáy úCmÕ!gؼþƒ÷G©» áZ0I.®ÜgƼJt÷øCƒöq6%ÕJW¸ér ~3üSJä^ šdJÖ¸¡–ô0I‰±wíÎÛAK¿ºžS1IEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/mimetypes/000077500000000000000000000000001417507262200272065ustar00rootroot00000000000000x-office-document-symbolic.symbolic.png000066400000000000000000000003501417507262200366060ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/mimetypes‰PNG  IHDRóÿasBIT|dˆŸIDAT8ÅÒ½ Â0†á'$5;°°#°° ¢?MN – ‰“N¶î¾{ýÙ2?Œ3^…¼cý PŽ|b30Ô„Œ${TØã†moR,qÅ —)N£1ás°ëz ê±€ˆE·Öh{¶?tUˆZS8à‘è²ÂZþ‘ZÌÓâÿ¤'”>RQW²::f½ýiÂÜ16o€@KT"QÌaIEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/places/000077500000000000000000000000001417507262200264415ustar00rootroot00000000000000user-trash-symbolic.symbolic.png000066400000000000000000000002441417507262200346240ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/places‰PNG  IHDRóÿasBIT|dˆ[IDAT8c`@ ÏþãÁ¯ ê°‚WPEøÀ†§0#’ Y€‰\4°@"I->/üÇA£ŠÃ`Ôü0â iç‚×P_NDNlÏÐ #&+cdi§+z%,ÃnIEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status/000077500000000000000000000000001417507262200265155ustar00rootroot00000000000000dialog-error-symbolic.symbolic.png000066400000000000000000000003611417507262200351710ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status‰PNG  IHDRóÿasBIT|dˆ¨IDAT8µ’Kƒ0 DŸØÃªp°*=F¹C[nD¯åÜO×´ d¡| #”Äš±@À xkÖÀCǼ¸ðqp”OÁFr+± ÉÍ ·µó¯ÿð|ÊeLkw¾óKiyw„£ËƒIEND®B`‚dialog-warning-symbolic.symbolic.png000066400000000000000000000004361417507262200355100ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status‰PNG  IHDRóÿasBIT|dˆÕIDAT8•Ò?JA†ñŸ A±³°°/%Á2¥èì<Ø„´ö¶6Þ€H‘ÔiÒ¤-'EvaÙqw_ø`þ|Ï3Ã0¤s‚¼¢÷O_2ïY=·…¯ pÀN›Â]ÌJ‚€·¦‚ÛtƒQ6þÃyÜò ȓϧu‚ûҵ˂€ë|€uÁ»1ÁDõáb‚€»2|ŒïHã—‘õö‹‚—HS]=æð~M$ö>qÔÁ“í牥ƒÄÞ¨¾|›šwqˆ~vZ›|aÜ’©fªTgÿxÎ_IIEND®B`‚folder-open-symbolic.symbolic.png000066400000000000000000000002611417507262200350140ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status‰PNG  IHDRóÿasBIT|dˆhIDAT8c` 8ÊÀÀð >ÍÀÀ FŒØ4ÃðuIJ À…Ã43BÈŒ Ldj†Š ``@øË†ÍÈa@Vx | žCÙä$¨' nP©Éùƒ+ùn‡s¦2¦ªh-IEND®B`‚gImageReader-3.4.0/packaging/win32/gtk_skel/share/icons/hicolor/16x16/status/image-missing.png000066400000000000000000000011001417507262200317440ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<½IDAT8¥“Ïj“AÅwfÒ@Ò„J>!OP×yA}„B"nD,„B_C¢Hö¢PºÜ(EDƒ ›E»È^óç›ûå›ë"K HÌb†{ï¹ç0GÌŒÛ |ÿùõÔÌîßThf¤”°d$K¤”À8á[ÿÌRJö¿(ËÒ>~:µ "¼ÿðŽã+‹•­-=|LT%”e Àd2a8nlrÎá¼Ã‰v» €F%hT¢FTõ_ƒBÀû€8‡ˆ –æÆ«F²Ic¤(ŠcÁ9Á¯6*•Êb€âr€*³r6/vï>øÅç1Ÿ“,½šKÐ+ )•xïAY°åù”¨Êt:!¥D–Ý¥Z­.zÖ /dev/null mingw$bits-cmake -DINTERFACE_TYPE=$iface ../../ mingw$bits-make -j4 DESTDIR="${installroot}_" install VERBOSE=1 mv ${installroot}_$MINGWROOT $installroot rm -rf ${installroot}_ cp $win32dir/gimagereader-icon.rc $builddir cp $win32dir/gimagereader.ico $builddir cp $win32dir/installer.nsi $builddir # Collect dependencies function isnativedll { # If the import library exists but not the dynamic library, the dll ist most likely a native one local lower=${1,,} [ ! -e $MINGWROOT/bin/$1 ] && [ -f $MINGWROOT/lib/lib${lower/%.*/.a} ] && return 0; return 1; } function linkDep { # Link the specified binary dependency and it's dependencies local destdir="$installroot/${2:-$(dirname $1)}" local name="$(basename $1)" test -e "$destdir/$name" && return 0 echo "Linking $1..." [ ! -e "$MINGWROOT/$1" ] && (echo "Error: missing $MINGWROOT/$1"; return 1) mkdir -p "$destdir" || return 1 ln -sf "$MINGWROOT/$1" "$destdir/$name" || return 1 autoLinkDeps $destdir/$name || return 1 if [ $withdebug ]; then [ -e "/usr/lib/debug${MINGWROOT}/$1.debug" ] && lnk "/usr/lib/debug${MINGWROOT}/$1.debug" "$destdir/$name.debug" || : [ -e "$MINGWROOT/$1.debug" ] && lnk "$MINGWROOT/$1.debug" "$destdir/$name.debug" || : fi return 0 } function autoLinkDeps { # Collects and links the dependencies of the specified binary for dep in $(mingw-objdump -p "$1" | grep "DLL Name" | awk '{print $3}'); do if ! isnativedll "$dep"; then linkDep bin/$dep || return 1 fi done return 0 } autoLinkDeps $installroot/bin/gimagereader-$iface.exe linkDep bin/gdb.exe linkDep bin/twaindsm.dll if [ -e "$installroot/bin/libenchant-2.dll" ]; then linkDep lib/enchant-2/enchant_hunspell.dll else linkDep lib/enchant/libenchant_myspell.dll fi cp -R $win32dir/skel/* $installroot if [ "$iface" == "gtk" ]; then linkDep bin/gspawn-win$bits-helper-console.exe linkDep bin/gspawn-win$bits-helper.exe for loader in $(ls -1 $MINGWROOT/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-*.dll); do linkDep $(echo $loader | sed "s|^$MINGWROOT/||") done # Install locale files ( cd $MINGWROOT for file in $(find share/locale -type f -name "gtk*.mo" -or -name "glib*.mo" -or -name "gdk*.mo" -or -name "atk*.mo"); do install -Dpm 0644 $file $installroot/$file done ) # Copy skeleton cp -R $win32dir/gtk_skel/* $installroot # Install and compile schemas install -Dpm 0644 /usr/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml $installroot/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml glib-compile-schemas $installroot/share/glib-2.0/schemas elif [ "$iface" == "qt4" ]; then linkDep $(ls $MINGWROOT/bin/libssl-*.dll | sed "s|^$MINGWROOT/||") linkDep $(ls $MINGWROOT/bin/libcrypto-*.dll | sed "s|^$MINGWROOT/||") linkDep lib/qt4/plugins/imageformats/qgif4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qico4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qmng4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qtga4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qsvg4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qtiff4.dll bin/imageformats linkDep lib/qt4/plugins/imageformats/qjpeg4.dll bin/imageformats # Install locale files mkdir -p $installroot/share/qt4/translations/ cp -a $MINGWROOT/share/qt4/translations/{qt_*.qm,QtSpell_*.qm} $installroot/share/qt4/translations elif [ "$iface" == "qt5" ]; then linkDep $(ls $MINGWROOT/bin/libssl-*.dll | sed "s|^$MINGWROOT/||") linkDep $(ls $MINGWROOT/bin/libcrypto-*.dll | sed "s|^$MINGWROOT/||") linkDep lib/qt5/plugins/imageformats/qgif.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qicns.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qico.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qjp2.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qjpeg.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qtga.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qtiff.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qwbmp.dll bin/imageformats linkDep lib/qt5/plugins/imageformats/qwebp.dll bin/imageformats linkDep lib/qt5/plugins/platforms/qwindows.dll bin/platforms linkDep lib/qt5/plugins/styles/qwindowsvistastyle.dll bin/styles # Install locale files mkdir -p $installroot/share/qt5/translations/ cp -a $MINGWROOT/share/qt5/translations/{qt_*.qm,qtbase_*.qm,QtSpell_*.qm} $installroot/share/qt5/translations rm -f $installroot/share/qt5/translations/qt_help_*.qm fi # Add english language data, poppler-data and spelling dictionaries install -Dpm 0644 /usr/share/tesseract/tessdata/eng.traineddata $installroot/share/tessdata/eng.traineddata install -Dpm 0644 /usr/share/myspell/en_US.dic $installroot/share/myspell/en_US.dic install -Dpm 0644 /usr/share/myspell/en_US.aff $installroot/share/myspell/en_US.aff cp -r "/usr/share/poppler/" "$installroot/share/" # Copy isocodes install -Dpm 0644 /usr/share/xml/iso-codes/iso_639.xml $installroot/share/xml/iso-codes/iso_639.xml install -Dpm 0644 /usr/share/xml/iso-codes/iso_3166.xml $installroot/share/xml/iso-codes/iso_3166.xml ( cd /usr/ for file in $(find share/locale -type f -name "iso_*.mo"); do install -Dpm 0644 $file $installroot/$file done ) # Remove unused files rm -rf $installroot/share/applications rm -rf $installroot/share/appdata # List installed files ( cd $installroot find -type f -or -type l | sed 's|/|\\|g' | sed -E 's|^\.(.*)$|Delete "\$INSTDIR\1"|g' > $builddir/unfiles.nsi # Ensure custom tessdata and spelling files are deleted echo 'Delete "$INSTDIR\share\myspell\*"' >> $builddir/unfiles.nsi echo 'Delete "$INSTDIR\share\tessdata\*"' >> $builddir/unfiles.nsi # Ensure legacy spelling dictionaries location is cleaned up echo 'Delete "$INSTDIR\share\myspell\dicts\*"' >> $builddir/unfiles.nsi echo 'RMDir "$INSTDIR\share\myspell\dicts"' >> $builddir/unfiles.nsi # Ensure potential log files are deleted echo 'Delete "$INSTDIR\gimagereader.log"' >> $builddir/unfiles.nsi echo 'Delete "$INSTDIR\twain.log"' >> $builddir/unfiles.nsi find -type d -depth | sed 's|/|\\|g' | sed -E 's|^\.(.*)$|RMDir "\$INSTDIR\1"|g' >> $builddir/unfiles.nsi ) progName=$(grep -oP 'SET\(PACKAGE_NAME \K(\w+)(?=\))' $srcdir/CMakeLists.txt) progVersion=$(grep -oP 'SET\(PACKAGE_VERSION \K([\d\.]+)(?=\))' $srcdir/CMakeLists.txt) if [ $withdebug ]; then variant="_debug" fi if [ ! -z $4 ]; then progVersion="$4" fi # Build portable zip pushd $builddir ln -s root ${progName}_${progVersion}_${iface} zip -r "${progName}_${progVersion}_${iface}_${arch}.zip" ${progName}_${progVersion}_${iface} rm ${progName}_${progVersion}_${iface} popd # Build the installer makensis -DNAME=$progName -DARCH=$arch -DVARIANT="$variant" -DPROGVERSION="$progVersion" -DIFACE="$iface" installer.nsi; # Cleanup rm -rf $installroot echo "Installer written to $PWD/${progName}_${progVersion}_${iface}_${arch}.exe"gImageReader-3.4.0/packaging/win32/mingwdeps.sh000077500000000000000000000030631417507262200212640ustar00rootroot00000000000000#!/bin/sh echo all > /etc/rpm/macros.image-language-conf dnf install -y \ cmake \ poppler-data \ make \ iso-codes \ findutils \ gettext \ git \ intltool \ hunspell-en \ tesseract \ mingw32-nsis \ zip \ python3-gobject \ \ mingw32-gdb \ mingw32-gcc-c++ \ mingw32-dlfcn \ mingw32-djvulibre \ mingw32-libgomp \ mingw32-libjpeg-turbo \ mingw32-podofo \ mingw32-poppler-qt5 \ mingw32-qt5-qtbase \ mingw32-qt5-qtimageformats \ mingw32-qt5-qttools \ mingw32-qt5-qttranslations \ mingw32-qtspell-qt5 \ mingw32-tesseract \ mingw32-twaindsm \ mingw32-quazip-qt5 \ \ mingw32-libzip \ mingw32-gtk3 gtk3 gtk3-devel \ mingw32-glib2-static glib2 glib2-devel \ mingw32-gtkmm30 \ mingw32-gtkspell3 \ mingw32-gtkspellmm30 \ mingw32-gtksourceviewmm3 \ mingw32-cairomm \ mingw32-poppler \ mingw32-poppler-glib \ mingw32-json-glib \ mingw32-libxml++ \ \ mingw64-gdb \ mingw64-gcc-c++ \ mingw64-dlfcn \ mingw64-djvulibre \ mingw64-libgomp \ mingw64-libjpeg-turbo \ mingw64-podofo \ mingw64-poppler-qt5 \ mingw64-qt5-qtbase \ mingw64-qt5-qtimageformats \ mingw64-qt5-qttools \ mingw64-qt5-qttranslations \ mingw64-qtspell-qt5 \ mingw64-tesseract \ mingw64-twaindsm \ mingw64-quazip-qt5 \ \ mingw64-libzip \ mingw64-gtk3 gtk3 gtk3-devel \ mingw64-glib2-static glib2 glib2-devel \ mingw64-gtkmm30 \ mingw64-gtkspell3 \ mingw64-gtkspellmm30 \ mingw64-gtksourceviewmm3 \ mingw64-cairomm \ mingw64-poppler \ mingw64-poppler-glib \ mingw64-json-glib \ mingw64-libxml++ gImageReader-3.4.0/packaging/win32/skel/000077500000000000000000000000001417507262200176645ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/000077500000000000000000000000001417507262200207665ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/enchant/000077500000000000000000000000001417507262200224065ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/enchant/enchant.ordering000066400000000000000000000002471417507262200255640ustar00rootroot00000000000000*:myspell,aspell,ispell fi:voikko,ispell,myspell,aspell fi_FI:voikko,ispell,myspell,aspell he:hspell,myspell he_IL:hspell,myspell yi:uspell tr:zemberek tr_TR:zemberek gImageReader-3.4.0/packaging/win32/skel/share/icons/000077500000000000000000000000001417507262200221015ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/000077500000000000000000000000001417507262200235405ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/000077500000000000000000000000001417507262200243255ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/000077500000000000000000000000001417507262200257655ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/dialog-cancel.png000066400000000000000000000014731417507262200311620ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<¸IDATxÚ|’°+…Ï:«ØImÛÕ¶ív\ÛƒºÏ¶mÛ~ïÚáë·Ék|c|g~¶m ‰N, ~lûøãs[–/Ÿ˜Z³¦,zê”,ÅcÇöÈçŸOGn¼ñá‹¿þzzÑg‚eO<ñkËœ9/®¹šów>¤HA@ikCû¦MèØ¼YÝqÇŸ7óvŸ€.¹iÞœ7O{æ‚[² …†ð<÷é§ÁsÖ9(ås¨;ÎNÞ{ßïÕ®€ ÎØ»ûmË)÷ÜÉAÓ°k欧ßI 3Žc˜˜Ä2 qåe.’€šK£aÑRõ¼·ÞºôJg5ÎÎr2ÌQ³ç¤ ‚:÷e]ÿ™&I]…q®›®ó0¼ŒlStM‡”Œp§ûÊJSS”øQ·}3¨²öý›ŠÒ2V’²ǽ6tÛ-§Òù2´ö&ì^ºÍû÷‚ôz«NW©47K:C¡ÔÑžeGVd·(¬‹\}É)Øs¶’ÂÎ ›­¸ª¿†t MuÇPq*nu@íÖ­°A„Dž['ðö)æÊÐcÍÖ–¿¤>ÃÓx˄鄽ŠbÑÑ¨ÂØH˜ð‰ü*ÅSøšv œÆª–”åqäl{´)Šó” &Pq*nu&kfhy &S”¹ö27ƒEªe šõÌ+Žü¿$EÂ^þs3Siw:]àÌ›nz¸ÍäUÞÏÂh(‚ q˜§Y ¼—kåH·ûÝDP8ÀæsøX4Z¼Zqúi„S¤šIãß<;ÄÁ”ˆò$ ‘fà§,©"= 6µköI=úû3½‹ÔÅ?NÈÁÙ³_>“S¹8K ,A  N3±»Ì©gÜyçŸ/ Vå.f8­ÜfÕª²$Ëç“”3I6»ëÄë®sŸ:ÐÙ~h™‰âì .ÕF«»ðIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/dialog-close.png000066400000000000000000000014251417507262200310370ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME× Ý¢IDATxÚeÏlWÐóÞ¬9ŒmÛ¶mÛ¶m—âcÛ¶mcmŽ™¤ðyîí.¶ss-lYÏrueºJ¼y6Ýæ0[ƒ‹iíà’æ0Ͳãy|ìDÝæ¼¹H,¶ñª'¯®­I$ ¨T¨V(W*üþðÃ~ýé§áIV¿˜ÞÖçð/ºîêraÚ|fZZqê7¥ÉßþiÞolôßYR‘Hª‰ë„ˆ´p|,ªæ•1Í ,léã.0X)èù˧œ¥}©¥4­¼‚Éžnñöv-ìs>‰Èa¤–à¦TS-hOÉ}©k`Òâï`žµ·]m‰¥Wðó+Ïøù²£t ö)MÉ×Dª|.À‚uÿ§  Ù2®òéµ^ºå2M1©¥Wôý[¯úòº½-žÖЙV×J#X(,Pn@P¡Z¦\a¢·ò6»X|µµ4-±²Z' "ÍÔ£žRøÝ!™BŽÜÆ­{ÉkZi ]?éËÎÓ‹Ûþ–× u®¡ÔD©D€,?…=dó¼Y,3Òü[cÞå×ÐÿÑ“ÚOãÏ×ûí±³4wÆ­tÄ5FGÉNQ¥ï6> ºƒKq`1/ÿá¥LŸžG.ÒRW©’ûó#éî?tÝôgyaŽ®¼w@Ó]\¶8çN†Ôb4ÏOSœú6‚€Ü0éhÉPäµÃØs‚éÀLwsÁ2œ1E}&¤Úˆ°DS‘(¦xærŽû’AÔ"f*<LJõ|°í±šT[YKK‰¶ŠL•¿â’£¸¶Ÿ1Ô 0·-ˆ¯@²ºÏª2Ž4*Ìô/€ ÿ˜³àIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/dialog-ok.png000066400000000000000000000011301417507262200303340ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<PLTEÿÿÿ;7 5 9 #5>777 <;:: : 9 ; : ?"B!C"? = ; : 7 %K7Y'M1U2M5V5Z5\3Z0W4V9_5S1F0@1>4?/Mv*DS,Hi-F]3LW5LZ6R^;ToD_yD`ƒMjzOj‰Pm‰Qk‡Ro–Tp“Uq‡Vp”Zv—[v›[w”]z–_|¨`}šb}˜b~šb€¬bƒ¥c{“d€œe›fŸgƒŸg„hˆ¦i…ži‡¨o‹¨pŒ¨t‘©t”½}šµ~›²›²”²È«ÊÞÊïm†-tRNS !.38G2òsïCÛ2] ¥šIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-edit.png000066400000000000000000000013011417507262200312270ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsììu85tIMEØ 6à¼}AIDATxÚ‘”äL+™ýlgÛ¶mÛ¶mÛ¶mÛ¶±¶ÇÈL_^Þe­ [õû¿n 4¾òª‘?ŸÿwõUJhÌ{¾þº½.¨&„8M:¸]6L÷qp79.¸±††^óâ#ª€ðˆdYÖI’ÕGýÑþÁƒóEoNœyÎÄ32ÿ P ›Ä2 0 èƒþ5´—÷lîݹÎÔ­ŸR࿺öBO–{y–¨¥Ë²ö¯íÛ |sŠQ«?å÷o˜ÕûKƯv,Ús^ ‘I@¢t=9ê FŸô›gçÉÄ¢þ¬¿G]lüu’ž˜@â6¿D ÙÁðe&bfæõ4¢üÖ³œ °%«@—¸íÁxB62já{ž¾Š`zç¾ù·aî²üÿÿÿ9ÉhPŒuñìµÏ¸x;˜Q­bÈ”³4ïìuù믿øçŸÐH*ÐŽK¸p®býîì:îKϺ&JË̃è–üøãOäÎA<^I±þç9üK·úÓ¨¬æÕ¿cï³ú?á›oàþýû|ñÍwJгEÂâùŸŠß3¤…ÌQï¶¼zÄ”)SÔ ~Äl63xȳÀõd‚Ȱ@¢‚o’ù—`r4*ŠÏ§µ)V¦(ßüôR[l±X5zÔ“µkÖtì$ šPY¾t‘7´µ|{M¸\NáñxÔ¯K\¾|YFѧoŸÇ@6t’ |½ß‰¤8·¸ýð‰èÖ½ÛiàO’ ÆO@áí¤(À5ÀA>™Ã ôœJfžIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-export.png000066400000000000000000000011561417507262200316330ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ·‡H¬îIDATxÚ„’ŒaÅßàlÆ,ÃݰvX…µ×1{£Ý89ƨÃÚ1϶µ½~ÿéœõKÆóðA«©©)šœœÜ €ØœÅ!Û¶¿B¡4mJ“DÀ)nCSS…X,FA40ÕáA12: Ó4¡ë:tMƒ&Wu$ ˆÆ²mÜ{ðÑh‹A_ÑqÕ‘+Gn.jkk±sçNüøþŽeááÇ(//?¿Î@Ò uH²055…_?âÇ@$Agg'Ré4ûûûŸ(óPhê8AòÓÜÜ Óôë¤oJù‰ÕûT2)(,,d:•ÒB¡ÐUšaüo ~$‰l6‹l&Ïóüƒ¨®zðŸÎÌÌÌëX¬/?8¶í§Iu©ÝÞÞŽ'c!G~~>•PÛµk×íL&óÁ˜L&™Vã³,‹¶mÓqªd _¿~埿Ç9;;K/×M¢T—1¯eaaÓÓÓ‡Ã^¿~ Å,²Ø ɬJw]—ÂÈÈÏœ9C5'¼zõ G§üÇ×dVˆx±þâîknn¦péÒÅŸÖHÂbúJƒúúz.rëöÍ>ÅX‰- ‰ââb·nßèk¨oÚ 5œä´öóÊ¥‹?“×¢©}]¦6Å¿™@2&€ŠÄåJDC›z’:ÁIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-open-recent.png000066400000000000000000000012451417507262200325300ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<"IDATxÚt’S´K†ÿê¹7¶mÛ¶mÛÉsl>ŶmÛ¶m'=¶Ñ³Suܽæük•«¾ÚbDÆXF%š2æM‹ºãú‚¥) Å÷ Ï·†S~ÇßzÿC¼JðÅ+ÄÐÙƒ+n¢CýR¨“xdÎ=j8éÕ•£Ãì„°€«2qé 2šÌd±ZÉf·“l²R–Þéôk3ù‚!Z½f Ù.Z´ïIW{Ðj}: )¤Óéx“ 1ÆÛª“Ï¥Di4+™‘p³²á/z6(„üåÊg„Î9M$)¾q€¼únDëÊù(p{¼Xµjzv톖͚ðý¼€ªþŸÖñ³€0rgÂé2–t. Ÿ×‹-Û·!GŽœ(Yª,j-{ü¯üm‡Ø„•àرîê7()RióÅ·F˜ÜÖ0^Z¢² Ñ÷DP‰b…1¹âc,xð«.xЦL\þòÎÌi{Û¶@~ÿMe5mÖÈž8Õ:=ªæ²á©üõ¥8Ó! ðúÒâJ,$‘ÆW~¿?Ñ1ªZÂ=p%žWá{¯U.hi›¢(¼Eá…£Þ … ë þKó?6nÝ~À{Þ ªÄ@ @¡PˆÂá0E"â?R4Ûûôéƒ4sþügâ\çM H|¬¸Ünúòí+MŸ7OõX HUF«C™:gîIícÑØ¿“¡vdºWÏhjîyL‡IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-open.png000066400000000000000000000012671417507262200312560ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÛ% ¨×7IDATxÚuŽ,W@Ï}ý†±m»Ûv A1V)v™1Ë)Ƕm[ÿ¯=ö4ov»g½{ç p`XN=—Ë}×étº¬Ä÷¼ñÍžgܬ«11>®{ï½×ã«ÔbÛÍúA{í¾ÓŒ1íéóšµkõ?þ¸úˆó®»zóýÎÂIYˆ›ÎüùômGícµn·Lj Æ`‡5kÖÏl0òa%ŸDÂŽ;.¾ñÔŽ¡Óû#¢n(“” ¤FúLè†çâã!É2dRtP•Éltx‚ªY¡5ªaÔ«àÓjáç€!< _¾~C­ZµòK—Màv¹|6sôF l‘µ¸ ŠY‡ˆ=ÍÌòª Ä.J"ý‹û÷¦nU 8´2-ˆ¢Í¤A%A%3Ë.´hÑ"/PXéè‘#:4Và‹K†ÓH 0R°B?Ö&ÆÁ ‡˜[W˜DE*Ý»uÆ“ÇOàzéÄßjaH” #îÔ8èõzddf";;5jÔ(߉Р<‘õaJù… ÜT´oVþ¾aHMIÁþ}û £Dß¿/쀣ísívN'Ž»Ýnîñx¸×ëå>Ÿûý~®( ?{ö,Ÿ6mÿÏŸ={®ˆäœC(n¶2íÚµCdd$Ö­]ƒ};wîÜÂÑ£GË…'ª=U %,›€ºÀÓ§Oƒ…‹—ÄÙ¬!í۷רÕê§Nê+åÍC?¬  Z«Öoø¸kÇö>|þãÇG|||‡É“'_ãp:ú¡˜½Ôü‚ÌÌ,eùªÕââè çž8qbÇ­[·¾›1cF-QZK¶.qAX™«ë#_S ðCÅüMœ`IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-properties.png000066400000000000000000000012051417507262200325010ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<IDATxÚ…S¸ä@…O'ãÕãÚ¶m>¯mÛ¶mÛ¶m¿¬mÛÞM2S›Ê×=×wj¾3ÍúÏI "—"=€´p ‘‹_¹ +]ºtYïÝ¿ôßßB" çÇ;ÎAÅ>¸uâ¡m“Ì8ŽÞ3ßañÐL¸ó6-ÚöY£\Ã#!`ÿ¦ HnGÏi/±`PZÜ~mGï½^¯7@UP$ó‡ÖÞßGÐyâ#,™·^§C«^«àñx êéÓ§0 Á`¡!†¥sƒôÓ·¬›ó/oî,tbyIš;®.ýüù“LÓ$˲Èn P(D7oÞtÆ?þÐàÁWÐÜ­pܨQ½’uýòiš;¾}ûöl§.ps¿}7qzõ©„¯ dó<›?¹EgåκsçŽÑ­{·%ÜÜÌüWºté´wïÞüõë×­,B rTⳋDd@Öû\ø½!mIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-save-as.png000066400000000000000000000014731417507262200316530ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<¸IDATxÚŒ‘,EOclÕßocmÛ.ÄvRŽmÛ¶mÛ¶m{ì™îéÌö*NnÕ-¾{žMÓø?ºuÏ… 6¼_þ„’LjX¸p·ò[oý@LNL„3™¬{½öã÷D<¥Î×÷ºqÞõï¥RÜÜÚ¹û¾û<2@*™r—,,¡«§í÷€) é·¶á—ŸDv¸ÿcvu‹~M †#nP(0›Ì˜×<ú6¿—ë§3¨ñÄ–‡¦” #û¹íÉR"ŸÉÌÔ"@QD¶é¯@4ࣗ/b…ó]ÆöÎüõgn8ÊJÔØÇ³Ÿ~_̨ˆ³¨ªJ<#SHýÅû÷²Át[•ãó¯Cœ¿¯¬xù»Ì ºæVPU}‚DpÓƒ/`ÊÁ®í³Û o}倭ìN7'Þ½’ñ!7n—‹x,ö× b‰4]U~vírÞßðüQ¶HÒ[oã–7)_¿†úæ.½~Ê¿;¢Šª(½ÏNœ¾ßR®{è.ºîêW|ËÖý2;ž$I>ÁêÕ«ùìטÍÌQ-Õn¯òÔ£·sòµVø~â¸Ý$v9ÅÊAU+K%I_u6Ãïo°óÀ—„ rìõn8c\¼œv×*»ŸÚ˜®®.6Ûx}ÕÕ«V陹tÔ¯Àf“Øû'‹Ây{Ä9áÚO¼¦²lÙ2.\È'Ÿ|ÂÂE‹eI{^Qæý½m,¬9—ÓÌ)»þÌ=Ï \už@ @GGÑhT·6u<µ€ßï'ŸÏ£ŽÞ{syñâ©ÐËì¹…›?ôsömV¼nccc$‰9@2™ÔƒéTJ?:€l0Û>ôø‹nt*7Üÿ“Ü;²;î, …ø½¾ûþ{@ãõ7Þ@”ÄÈo ¥xD¥†˜)ƒr%9ý–pŸæGC@IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/document-save.png000066400000000000000000000010541417507262200312450ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<©IDATxÚ¤’%ÀU1ÅÏ•O^Â5>"šp—„kA* wI8T,ã–pÍ$´áîz]·±ÿžíâð«“óÛ™B´E6½&Ošô%Ž“ö‹—®„.ä· Ó4`€¼Õ³kçv´¶¶|=sölƒ°}÷Ý1rôèy”ŒòEy«ï©ÇðèÑ£öõœs´¶´¢µÙÂÁ«w‹)Ô‹îJŠú1¦<¬4…÷ jQ\«Q gƒ"bâh €Ýš¡!^3fEÜ÷X½"‘åµ 7<˜yûQ#ï 4ˆÓÔ:]œ–õœ‘ ‡Ã è{¦É‚ÑRGxd…“çðT”²Œw,Í:N¯ÍéW©+h¦S ¯9YVx=.økYð íñ«Áq̼—£(]Ž €hÒibÿµ»¶¼ fõ©P#ÐO;Ñáh‘…äõ@¯W?$åŸ+ˆì£§4—žú¸üÆl1FàsRRbèþ þ¡Õ]®ß5±Q¡EÃ2pzÜ Ð ð9b £·úé/ÿSìçž"šl‰Ž4»ü`zðà<›–™xÈÏÑa -ˆ"#ÓÈ€¸Nä/f¥#‘¹âf¨ý´×‹ÖÎc½9~õ fó]²³—RËGÔSYÎE)¨ÌƒŠc*’çèâñjA·‡afÉ25Ø+Qæå'­ÒòåËñ> 6Œ®Ç(„dBéŠDze’j·ÙãC Zçu“s_ÈŸÔ¡jÕ–ãsž‰O e’’: IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-copy.png000066400000000000000000000007411417507262200303720ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsììu85tIMEØ#;ºbg¡aIDATxÚ•AJÃ@†ÿILKÝW=†¸ñjÖ¸q]7vU Á»tí…àÚXiS) –&MæùÞq ¢?|<¼÷MÞ(=æ„Qø=Ä<1ŸðrA €!¼Ø›—iŠ (ÅUIêÆn· Ûë LÂ04‚l³A’$0qív[Ê“;+=3g½^Ó&Ëh6›Ñ?Vø`n•¤«BY©F1îJqK ¬À4I-0Ãümª–ÚôÓh¿]‰}T4 ¼&+ =±T_à¸_Ü,ð•7\–%Ò4E«¡Ó‰¡¡@)͇E‘²7›êÝ*Ãý~’íö ÷Óé#€„Á!sÅ\×<g·ÛQQ$òªªhþ1'­5eYF£›Ñ €c4d@œ<Ïi¿ß .– 3<ß¾¸d4äŒ59)ÊŠÞKšÜMä—Ï<>ã§Çœ:M6TïüÆhÔùh èˆ úVIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-delete.png000066400000000000000000000012001417507262200306510ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<PLTEÿÿÿ€¨­‡Š‘˜œª€¨¯œ‡Žnmj¢–++‚$ÒxuÃJIÉ`]¿4*ÅG?¤¤¤!¤#¥¦«$¯'³1&³+¾J?ÃJ@ÈLCÊVL€#!#!¡>4²C:j#j# {<2Y![!½¾¿93Á Â33ÂMHÃ::Å92Æ Ç É>>ËD?ËNJÌFFÐÐ ÓVVÓWTÓe`Ôb^Ö`]×caÛÛßßßhaãå/*å0,å2-å2.åsqæmmævué‰ïïðŠõcŽA!4tRNS222HHHHHHIIIJKOPQRÐ×ÝÞäæêòôõúúúúúúúúúûûûûûüüüüýýýþþÕnÞb›IDATÁE‚À(Ø"vwwbbwçýÏ¡ðtÏ ¡Ü|œd¤÷™ÑúôËGBbÝ^®)£¹p¾Ü¬hq‘/ÏÄyRô‡­Ñ4Îà‡ŽvšíF„ÆŸ:Ì×ê|X•,t{Â8 ‚L\ï–ÕÊj· ™ ±ïß÷"Ë•ïƒ Âs̲—;yȇ_œ‹€C³k÷´fdIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-find-replace.png000066400000000000000000000013201417507262200317430ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<PPLTEÿÿÿÉÉÎÉÉÎè¶!777²²´'''444ÃÃÈ999  !!!$$$'''(((***777999:::::;;;;<:0=;3==>AAAGGCJE2JJJMH7MMMWUM[[[\\\aadbY=dY7tc-xvp||||}ƒ€r„„„………††††‰ŒŒŒ}B•–‹–ƒI˜-¢  ¤££§¦¦ª©©¬¬¬¯¯¯²²²´¶§w¶¶»·°™¹ª}ºÇÖ»¥Z½½ÂÃÃÈÍÚçÍÜïÎÝðѵZÑßñØË¤ØÎ¬ÛÛÛܼOßÙÃãÝÇåååëÆPîÎiîîïïÊSïïïðìßðððòòòõõõöÛ…øøøúå¢ûûûýýýþþýÿÿÿµ±†tRNS$9q~ÊçðòòóúÀ¾£ÖIDATxÚ<ŒCcÇPÄç¡¶mÛ¾öR}âžz®mÛý+Φ›¿ÇÝÔAF¹‚x7‹´ží ³—@ágII•UQÂÌB!·˜îÎâe±£v!TìD¢Ké@˜‘8N—ášÛÒH õÓÑåÊëqOe×}Þ!e¦û{­k]©Y ¾oc«µ4ù ª°„o]P©´±;S[€þXì¹´! Üð‘YúLp’ÆP¬à¸KOµ¨ ]‰ß†¬ÄÞS)¿¿ ªªBQcEàŸïdÅBÆö¤°IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-paste.png000066400000000000000000000011531417507262200305320ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÛ EJ4ëIDATxÚu’§"QÇÿÓ½ÍÔSôEIhA ¯À³ö¡Â °€oû!êk, €µöí…¥•Z¨µ¨PK­jîžsÍ}šYýøkœÎùŸsfŽ?Åbñu¿ßƒ‰ÅbH§Ó>ã…Bá¾V«(YÇcÕív]åÑét\Ž9Ž£êõúŸR©ôAòùü²ÙlºÉdR1»ÝN­V+–~f²Ù¬j4.5û‹(!z½h|X–… ™L­V ‘H³ÙÌ— ©N§*• ŠÅ"B¡6Ùl6F`8g½^ãææÄ;R”ÄySy>ŸaÛ6~æd6 h·Û0íEú6ø '¸hñ,f6ÿ…pXBVÈ2Æãq0<.M|¿¶cÇ©XhScàxSKÞß`ºš).–Rjqaà{‰,Cp)„–ðôŸØÀ_ŠRjÉk„~ûLÐȬ%HËå£#ý´V.—Ó©’ÎÇãñåö ‰DÂèÎÜä6u‹jµª¸ðéýÓo}=A*•B¹\ÖŸ† 96ŸÏ1™Lò¦q]ErÉèd=¶Û?Ÿ¿<¿ð]Þ?<¾õû.¢ÛÇv»}¹D&‚q¢ýÿÝ]m:ù¦z\çé5IÁÏ'ÒÿAcË÷)©°IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-redo.png000066400000000000000000000014341417507262200303510ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<™IDATxÚ„“CœôHÆŸ·ªÒ˜ÖçµmÛ¶m_××åmuÿ-.kÛ¶í±í¨ÓéTêý2öÌ?ƃ ˆ™1z„v"¢+RJEû ’Â’âO/ >ŠyŠïàŽÉû¶`¦ ’"Þ)¥¸gï­w®ÙyÃ6Ø{“ÁjZQÛÛ„?Úk+0¸%2q¯â9zÆ ±•ˆ¿ÜPZµÿGœ•.d²XŒ~ÛÆË?½¯G}×\zÈé©ç¾×W˜àîµ¹Òþç~JÚx~#‘‹® BHl_³-R"œø) F`ª¹JÒ$n?p÷}ÒÝþÀÿn~ÐsÆÊ vuAYس¸ *?.”,' \»I~]vTx@´(7ºÆó‚„÷mTrÔ‹#7Y_Ê~«{çwƒ%-¤X‚Ç€ŽL,íjÅ„^Õ)Û®lÂÄ;'o¼;ix¶ :ÒYd£‘©f¢ƒw‹¦~T;C¾ö‡Å`¼ˆ¿âÛÇÅ»xâà}·M…̬Œ4qlª`m4˜µB‚Ùu…ƒ†]c¬fH–ïo±ƒâdÑEŒ'€¿Å0{ñ&q7¿Iª¹\ÝJ÷Óz¾›ÿ° '¾¼£ê^åPGºåÔÆ$ £xš íŒMРìfB‹|ñÁž:÷º‰þ†Æ¯'œ¹c 9Ê€"Y(tãéÈÕg¯Ý!ßçg+^N¦*Öî¢í˜ƒwè/{ÕPFˆQ¾<¢9ÚýóMb ÙLü‰öËo¹Sûúá8G©jQ¥«y™v²ÂÒ–æÃÃê –`z,I‹½÷ؼ ó1ú¤ÒabbÞ8äßñV2‡¾ lm%ìj€}VmÎ/î÷ç²âƒ@ €G§uTrIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/edit-undo.png000066400000000000000000000015141417507262200303640ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ÉIDATxÚ¥CÀ=GÄ«wVyæß¶ÍKlÛÎ5¶í\âcóÛÖgÛþ—3™}±õ[ïÔtw=vfйZ´CòøÕ´€©ÊIáxl§øÔÅk55®Ž÷ÕVOŒ ¼'¸xXêjñ èÙ[#-‘Trúhw÷ÉŠªLµdÁmKW¬3Ípz,HàæËprhªú¤ÔÑÚq âFYÈ«xáŽh~—½ÔT¿ãL›>Ÿ¦Í˜«):þî*n¬s>ûìƒÏó·Ë"Ž ‰"5«wÕÁ¸Ç¥PÀË9°‡Wôä hÉTå==¹>w°´ªµõ‹ë\ ×rAŠHJìò­_ œEÞÑ…ïh0­/(;c>"Ë6KÃüEKôÚºÖ3d^Ï©Àwl@•Ý…ƒÉ¾w1˜wEU‹°bÚØë>§bïˆvH¦µMÙ˱(²x+S ”Db¾Y.¨XÝpí8Y0¦LCf6hJ’8Sø']ï;š5'2œ¡ž–r_kŸ—ϲa†²ÅvRì¢å¶wÖÙmõóîæ>>è.âbÉòÉ»O޹B†5̘û¤k¨w¼ÿs¯0Y•ñΉ–¨¾ãÐÓ=t1€½AV †àãG˜ç‹1¿8ÔlÙ“““y?¯˜ABüÈ'ת¤0R?˜Lñsoôü/§˜ièjÍÂÔ+B®Ž|ÒÅÖùQ>_Å/HGÂÐh>¸rçU3y–ún"¢Ã"!õaÓ`­‚´09n¸Z7ÄG¿š éžqÓÀ²ÓÆÅ×Í¡¡¼`v9Ÿž‰±9rœYŽ92éE›&܇L“ïý«õO¥å' V~Ö¼´„bäûºìš ÛÖ©äø_uŽ$æ–e¸÷V üUï®%r=tV-Oä†,jj-§Ã!ùÛ o®%>ÎJG³Z,Ók}&áÖÊžmË‘ÞjRnÅVg6–ž'@Ù>›Æ5˹3=N I k—ÌÏÌØ²”j}s0fOv¢e•²)úÈ»z•È—ámf α"ïê„ëšUO‘UY‚e1&ƒ®[ÈŸ/·oÝm.{K슼÷þ¿Š·›áŽû^l*•ijš*#®sqzâ6Eµ£vv‘ÞzW©–¶ÿzàÕõ•.”?º ˜ŒÂâ &Á4ñô…ŸüšÃ]™3sâ_)äo4¬›|7& ²KDE$â1&¢±`1 _Þ?¯+¹ ³ÏË`ÅCÅèÜ<»W£ŸÁõŽÜMUAh" û7̓f™àÌ"¼+€£ß’暬¸ó-¥ŠƒJÎ ~yñ½Ëé€Ãa¥ÑhF<&`Їqp øxsv|ÆÃ‘¯*D%áv9¡(²€„ ¬zt(˜§I”Ýù¾H¢ßÓ ¥Œ,µY.:3 E@)E@ # 'òÎ;€ªÎà†µËÜÌŒƒ1XFÌ2‚yq7u• CÓŒ 8Ó³Ò~7îÀQÁ \IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/help-about.png000066400000000000000000000014101417507262200305270ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<…IDATxÚ}ÓcÀãHÀñÿLfê³mÛ¶ï¾mÛ¶mÛú~¶m¬íí¾é¦J›L3›´¯õ‹1a­eèdùô÷)ËK)ÄÞ[®YB "úÀ¹à±¶›<¿þÀÒK.¾éj+.¾X>£E±ä×Ýr}üÚËç.¾ùø]¾Ìpä§=u­“]ìúÓÞ&½öŠKÖÉåÀDÌ÷ê|ôÛ4ãz¥‡>¸í°k3 À²‡Ü~Ù2+®rÿÕÇîŽ[ ñj!¹´C¢Þl±XV³òÒiÞøf<“&O¿iÜ‹gÜØv±ÝE¨¥WøýÊãÌùmg-d7µ‰ÛÞù‡ªo–Èiîz÷k_5Ýmªïß8F’PúöÝ·Ú(Wô‚8s@¹Po)’%ÙÏu®Í쪳ë¦kgk nk%!ØV8iÆg{Tü&ç?õI…nÜN­Aªm”ØüÜ¥(äVRăz|póþô8ð–O–Þ7˜Ö°«‹ÍÏ[JÑÊlD¹¢´¡ÍI±óõŸðýíû‘¨¶QÔ«4ñÊeæ—|h… ©ìºbÇK‹?¶‚Ð)t¦€ÊçQJS*•H|7Ý'ŽaA&Ü,Ú1w)‘ˆi¬`ãÁLÅ÷¤ÁHz©4ÙYl ÂÆ$€Î]R\Au¾A8›u÷ÁíéáÞ·¤síó Àn€+|Hbû‹Ÿ!»Ä™¬º%–é RñÖ4:={ó`òà{ÏÚŸ:k`€Û]ü"Ž:¹¥d½% \§“55Æ.@šß¢È„¯ñËÃ§ØØp?bÛKöNgÕ3(gõ iRÐùT¨,³?8Ý|wÿg£ýÈÍÏYÝö罹3‚E—,^tëÚüIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/help-contents.png000066400000000000000000000016171417507262200312630ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜß"$IDATxÚ]’x$I€ÿjŒ;YÛ¶œmóó™kÛ¶mÛ¶mÛƒLw×Z)>[x½>)¥IåÏZIW¡Z @Ròb ˆùÔ<]@ƒ HMI¦x£Š"©hQ,)„‚€ÇW ¸zåóW >|ˆóçÏÉ_“ž"P¯º›â—7U©ŠË±f"Ç 4âNÐ y €x¼ à `)x÷Îã£h{±ÚÜ+\K×ñ¯E¹K[Y¹û²u<¢åU•5Þ\ø+ÕªÕÁn¥q¥]g6®ZÉú­[9ýÇß(Ç4zûkyí›êç*+rQ€”€”Ü<˜*ŸÇÝ»Ù=´+sôûnÀМÒo‘9²=uoß±_wM=rúy"ój¶ÆÓ¶$ÇÛ¸‚}Ø@ú­@°é?Äø£¸Qå-&˜Gòú‘¯Q“´2™Y+¾ªØñy UJ ¹âë¤_ºÌJó6wš6Çæô ç>¾–Еx“ñQi°}3ÎRu ÏU_ð¸Ý­þø»9)YÙì’Ó#XÑù‰¦iaYóá•ÝÄ5¬DbvWKz4EQ¹xá†Y UUA³  %òáUˆ‡¿‚%t”§óe¦ïy g·ÌãzrTEðÕõÕÜIB¹áˆù0ã!áNÈ";¸L§“Ü=8µjÚ ÊÕÊŸ¿œ\G%{"uª>®=Õói`˜†ï;wñA²Ü¼x“u½›3yÏæ¿M׈òy˜ëNbÆÀpüí›á/s±Ó¸x/²Š÷Ò$˜nηhÎǽýóβH)\Dú£|­û.åŒ"jí >®Ÿ‰÷£Ø]¼(!$¥NáîÒ¥lœ9C ÕÍâ‰QÄɸƒðž0US( Æã›ÄÃssx=ã3†ï)Êp©n q[·x‡×Â1ºÑÔc “tƒÙš¬TÛGc*…ïpüˆC$F5ÛLgd*3¢½yÆë­Ä9àúǃ*= —m¯HÉA¤µl6fø½Y¹®J0J6N!Y.g`FW 0§wEꈄp:t=/a˜Œ‘ !½½è&3³®jÝï%%S=AJÞês+j®à䉬Ýòk«’'µ(Q6ý€=R5ðui™ÃÞ¼©¦!ìVÕ44…„¡ƒ^¿l¢Zß4”`(U{]%Ó¸A0+”•u&„.P,¼A'i”à¨@æ¾UÊÐNn˜—¬¤>–5›³a*¡T•À¤µ½žšÒ4jhfw:q>îC[ûWF¡CEE‘߆£ðÔý†ã; F‘ËåtüìŸ×£[9?‰Fß±c§SÕô$ç<‹J„÷žmÞ»Õ×6/Y²¤ÕÔÔ” —:²C!™ÏIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/insert-image.png000066400000000000000000000012431417507262200310570ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î< IDATxÚ•’¬K@Ï`÷Úx¶ß‹žj[QÝÆ7Fƒº1ªØªÛà"¬­ ¶m·¿ÝéüÉÖ>É{>4õ€àÓ0@TÿF"‘ žçI BD)‡ç9¥¶’¼ÀÖýÊÊÊ1“:9é­{¾Á6) )¤ñM‹‚‚*!™„¢ÿb² Ôpû¡‡@èà8¨LQðןPéÀuö_y1Ù* *Åsž/»#9Ÿpp³I~ü§¢æ®€Hd!«”2ð…Áíax"ß2µçW”iAÑ»®VSîh yGiEºh0¾Á‘%!›/°í\ ¥Ôp `܈úÔÖVðË·’¾T\º“ãîIу‚] àù $ŽV¶._½‚”’¨hÄ’ï~ÊÓÜb¸—P<¹¡HæÊPZóë￲fÍì®tuu±nݺ+Àe܃êêjÊ+}òÆ%Ï’,`¯yOSaû:::踵¥mmÓøüóϧc®KÀ¸®‹½'ÚZ£ÂsÉSÉ€ÁƒÙ»w¯½^-'çô£S8ŽC(Úü'€a¹\n«çû() ¢ñgížÁµÐ%šëQJOÄø«åæu_ÓÀž={޳Ǽ…¬¸ºQ{éÁ5î¥]{-C±èQåVHìÄÙݱšo´šÞK5QkO͇94‘Ïëœ-B ¨x±Ó‡ý/Ø5níiÅÊS^% ÒWnIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/insert-text.png000066400000000000000000000010541417507262200307610ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<©IDATxÚ“3¸A†¿elÛ¶ÕÄNª ú8éc÷·oO—.¶Ý\ëØöîdþ½{Ì÷yÞ-†?f±üÂGÆA5›™èc±X˜ ¨%Q>¶oß>cB¦O6›Å£'Ð,ož?Qr]¤ë:F •0løp <^¯#GB6“A2™D(®!·>‡˜€é6nÚ ·/‚ön+ ‡;O †U«×ÐCMÓJ# Š@U¼zû„$‰fî0xÿér”D°ââ'f¤”(‰æU¤õ´Ï8àïÃÍB.…be3‚òq’ÖÓ¾’P¨9©xÆB*•ÂÄñ£‰„A)ò€cÆŒ©Þ…'N€/B1PË¿‡d'wœ«<àÉ£UѬY³°{÷n ç­ýåú •‡pzñppº¹Çz’¹|Ê BÑœõòˋӻ|m?v4$I@8² Kp}Ó>¹Öfœkïòõ ÍÙ{\Å`…ñˆ5 S‡5¤£‘›¸½\6ãæD¶­e!3éãn‘јÏÜY”ó\eòl%et Ÿ;?¥Y×›‘ôÓ͹ñÿTÇ-ݬŸVIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/list-add.png000066400000000000000000000010421417507262200301710ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ŸIDATxÚbüÿÿ?%€ —Dí©Â%Ž›4¿»lÕx»èÖÄ©¸ÔátAÄNÏžŠnJÉaÑ Œã¿áµï]fo³{“Ü äMZM®whUËlÛ¶}ì3Èv³œ™ïûSÔB… ÉÓ~ãÄÍæ¿œyqJDS¡®As-sYó›óÛùj !%µøÛ(À~ð!’«•œ¿š À› fm›•¸—»7ïȳCÚ*Õ £$%WA A58Ænéó¦Á¬aDÏ8ß»µÏª9—-þ`¢I˜×³GNëBÞ¨ˆâ゘û° ]·#¥¦Žf’Å,¹R ×t7¹iÊÙn à½çnòÚjL½¢µ®#ÅP@I0o ¥Z‰É;dËe:l ݶö‘¥;oï]‹Æ Áh‰Uб}†Ñd-Gž¤Þhê´¦¥YclÎy¯—þ±õë̛ɆÑÑXÏÑ{7x4++þ«!F\pH.Fþ·¼,dy#">ü÷‚²wsû›Çé´H;Ϳ‰™©þŸ¹0ï" ㇗ܾ|Mx3%_"¯¬ù͈dIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/list-remove.png000066400000000000000000000005041417507262200307400ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ÁIDATxÚcüÿÿ?%€ …7j#³ÒUÈà@Á‰ÔÔæwï–}Ü¿Ÿ•Èa6 Fgó::þáRTìåœ;·¤‹XYŸh''K3þÌÀä³B13Ô‚\\ ïrßÞ½cPÞ¿ÿ­èïß"(.øõçÃ×ׯØÿf`faa`Ìô÷/PüPþã¹s ï¾|:…á7P .˜ÎȘ´y*;H Ç¿ê dÿÿŸ3` £qÔ¯E7í_((IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/object-order-front.png000066400000000000000000000007651417507262200322100ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÃPLTEÿÿÿvvxÅÅËuuy‚‚„‹‹––›¢¢§®®³ºº¿ÆÆËwwyÆÆËåååôôôÿÿÿvvy}}€³ÿ„ƒµÿ…¶ÿ‡·ÿˆ·ÿ‰¸ÿйÿ‹‹‹¹þŒºþ¼ÿ“¾þ”¾þ––›œÄýžÅý¢¢§£Èý¤Éý¥Éý§Êü«Ìü¬Íü¬Îü­Íû­Îü®®³ºº¿ÆÆËÈÈÍåååæææçççèèèéééêêêëëëìììíííðððñññòòòôôôøøøúúúÿÿÿÜÑtRNSµµ¿¿¿¿¿¿¿¿ññþþþ·[„ˆIDATxÚbÀ&§ a0€f7+·8/»ÿ¥öïós­Ûi·š*'zÃÓùúTê‚øÜ.Ï÷W"Šß!K×˱ÙgD‘'I­&š vþܳ F¨EnXŽçúÜ"³¹af›Pã[бØ¡Æ·òé6 ÃX{Þ)1 ³úã(¿ø¿$BEŒZÃô"öòë!‹ðÐIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/object-rotate-left.png000066400000000000000000000013211417507262200321620ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<MPLTEÿÿÿÿÿÿ€€€€€€€ÿUUªqUÆU@ªP0Ÿ€`¯f=¸hB½U<¢U9•rJÉE"…nFÆrFÊ-ftHËt\§|·;!|2t8{"€J/„iAÀW;˜Y@”˜„»N1lDÄX5§"We?·ƒn³™‡¿^:±c=¸Z8ŸC+y!WN1ŒlDÄ3sB%ˆH-R2žg?¼_<­[8¤>'p?(xlJºnMºsNÁ$^T2¢V@ŠW;—XBˆZ@”[B—`;³bG nXuZ°u]§u^©x[¹|e«‚m°„m´‰p¿y½|¸‘|½“‚µ•„º–…½—„¼™†À™Š¸šˆ¿ŸÂ¡ÆªšÉª›Í­Ê® Í·ªÑ¹¬Ñ»¯Ó¼¯×¼±Ô¿±Ö¿´ÖÅ»ÚÆ¼ÚÈ¿ÜÉÀÜÏÇàÐÄâÐÈáÒÊâÜÖèg­=tRNS $&2::;@@@HMMMhhyƒ§­·¹»ÀÀÃÃÄÏÐÒÓÔÕÕ×ÙéëñýýýýñyD1­IDATxÚcÀ T¹lòÖI.H|AS¿Ü<;U)f(_Ø&&++'=Î]‹"Àg•ž‘™™‘î¯Íá2ñLL³NMö’†jb’µ ·5 ‰S‡ pð 驉;Gú˜Aøœ¢ b Þæ`>»ˆ’†‘¤¤‘o¨‡X€GQ3:ÐÕ50:ÂI,À¨ì›’릵–ר1(!!ÈјævV9] ]9V¬þ[÷PÎÒ3áIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/object-rotate-right.png000066400000000000000000000013211417507262200323450ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<MPLTEÿÿÿÿÿÿ€€€€€€€ÿUUªqUÆU@ªP0Ÿ€`¯f=¸hB½U<¢U9•rJÉE"…nFÆrFÊ-ft\§|·rGÌ;!|2t8{"€J/„iAÀW;˜Y@”˜„»N1"WlDÅX5§e?·ƒn³™‡¿^:±c=¸Z8ŸlDÄC+yN1Œ3sB%ˆH-!WR2žg?¼_<­[8¤>'p?(xlJºnMºsNÁ$^T2¢V@ŠW;—XBˆZ@”[B—`;³bG nXuZ°u]§u^©x[¹|e«‚m°„m´‰p¿y½|¸‘|½“‚µ•„º–…½—„¼™†À™Š¸šˆ¿ŸÂ¡ÆªšÉª›Í­Ê® Í·ªÑ¹¬Ñ»¯Ó¼¯×¼±Ô¿±Ö¿´ÖÅ»ÚÆ¼ÚÈ¿ÜÉÀÜÏÇàÐÄâÐÈáÒÊâÜÖè1D3Ý=tRNS $&2::;@@AHMMMhhyƒ§³³·»ÀÀÃÃÄËÏÒÔÕÕ××Ùéëñýýýýãw+U­IDATxÚcÀTuP\’¬åÙàѾöÎk°Dqæüé³W,™¾L•©]]]üzàWÄ“ÆLÂkôdî”ùzî¤ù䯠ììÓÚ†7ž?eüLÝÕÛE–f¼÷þ{|ýýW8™Æ+x¼òæK4ja颥4Õ7ËX(QØ"=ªa´SË ÊÇŸ|LÇáý¦ÆÕq%Nž‰ò$ó•ÞÖvžúá)Y;s-®q‘X°D°_o0ÒÝÛM_Ðǯ¿üŒïëj_5š78ñ `±ÅÌ6®¢]¤ZªôHޱµ£æ‡YBî<Œ•)ÊqòôëªõÜV]¯<Ý䑊ø1øŽâ¡"¦œ“†Ùâ©ã¼lilHœqœ=•ÝŸoûÛm¸@ƒÆÄdù€dÆ$æASTq”½E%%Ô!YK†™Žk­.1R‰Ü.s¥5›ŸÛzŒ•ÔÕ;!€ÆùcnA¯¤9Z!¯Ëi©×Ž|¦ÞUûäQDÄ)Ø;Ƹo¦£óõQ"?„ é~ësuPŽ—ýÂfx®~ ¸ñð_¨q ´Ø>IWf,o¸V$ý)LÒ+qüyR̬~™ùA ëój˜œë÷èĵ÷nÐØ¾P3µ Ö\%q[®kü¤Z§0³¡àO>ÊÎ ¦ãþ¸Ù+»VžküΕ‡«5R#ôµ‡ôŒ¬Ò;"¤ØQo;“ªŸÄë+½ñgÀ‹&N®kv/ö&ÚÞ¨éõ*œšRn‰±~Qt¾Y6Ù[y¥RJ.®¨<ø¿w¬²”,2Éùxèß  ÆÇÈêQrkh°ãŽIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/window-close.png000066400000000000000000000014251417507262200311070ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIME× Ý¢IDATxÚeÏlWÐóÞ¬9ŒmÛ¶mÛ¶m—âcÛ¶mcmŽ™¤ðyîí.¶ss-lYÏrueºJ¼y6Ýæ0[ƒ‹iíà’æ0Ͳãy|ìDÝæ¼¹H,¶ñª'¯®­I$ ¨T¨V(W*üþðÃ~ýé§áIV¿˜ÞÖçð/ºîêraÚ|fZZqê7¥ÉßþiÞolôßYR‘Hª‰ë„ˆ´p|,ªæ•1Í ,léã.0X)èù˧œ¥}©¥4­¼‚Éžnñöv-ìs>‰Èa¤–à¦TS-hOÉ}©k`Òâï`žµ·]m‰¥Wðó+Ïøù²£t ö)MÉ×Dª|.À‚uÿ§  Ù2®òéµ^ºå2M1©¥Wôý[¯úòº½-žÖЙV×J#X(,Pn@P¡Z¦\a¢·ò6»X|µµ4-±²Z' "ÍÔ£žRøÝ!™BŽÜÆ­{ÉkZi ]?éËÎÓ‹Ûþ–× u®¡ÔD©D€,?…=dó¼Y,3Òü[cÞå×ÐÿÑ“ÚOãÏ×ûí±³4wÆ­tÄ5FGÉNQ¥ï6> ºƒKq`1/ÿá¥LŸžG.ÒRW©’ûó#éî?tÝôgyaŽ®¼w@Ó]\¶8çN†Ôb4ÏOSœú6‚€Ü0éhÉPäµÃØs‚éÀLwsÁ2œ1E}&¤Úˆ°DS‘(¦xærŽû’AÔ"f*<LJõ|°í±šT[YKK‰¶ŠL•¿â’£¸¶Ÿ1Ô 0·-ˆ¯@²ºÏª2Ž4*Ìô/€ ÿ˜³àIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/zoom-fit-best.png000066400000000000000000000010331417507262200311670ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsììu85tIMEØ */´®›IDATxÚ•‘=KÃP†ß›¢Ô*\tÑÅÍÉÝY:UqTê¤?E€8):Ä© PAÅP;hM5IµI“{<¹æ¢^²øÀÃM.¼''ç|3ÆÎá<²oHY¦’dÀ %¹«V«xi·!L XZ\„€HMl.—Ó°ð‹6‡K¥ÖÖ×ñòü ˲`Û6l>Y~·±[‘èÍ 8¤ôB 7OƒxïMG¢Ùag·ŸñGv·]©Tà³S,LË´}‹µIp'ÀáÆ0Nv ùâ»ë’ïûtzP¯×£ ( Ce¿ß×ê!®¨Ìöët¥úß=ÀlÌB(2ÃÆ©1¶ ÜAÇOŸ õº%›ÙH;xíÊ?¡V«…F£|>¯eHèté÷ ‹E$ð±·¿àÊÜ‚šúαGùr‡6|ŠcÉÆT«ÕHJIžçQy·|`³€ã…´zàÑ«%!µ¶z½N®ëêð 4FLÂ(¦ë»ÚÚÞ:Ïú²ÞÉ8;¯Þ³‰ØK6€Á‡&&iç5qIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/zoom-in.png000066400000000000000000000015111417507262200300610ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÛ«•ÇnÉIDATxÚlÒC [Mà3“ä¾ðgmÛ¶mÛn7µÛMmwUÛ¶íg3¶“ë8)Ÿ¾õÌ1‚Bìv{³`пñkBj§Ëó÷_ ™¹Z岯8–_ß¹KW3”ýþl³lñ.qMH@8;¶k-¨Táï@Z¶1˜” 2– eÿ›„ãý›±¬|=±DA…ý´ÂGš¾)UÊy{v¸B’‘}Ò_»~MÔŒi³–cM‘á‘ÁpvPH7Œ]U]Å©réò¥ÿ«V¯üm‚p  ¨¨È5=#}×áÃÖ®['!++ó’TÐÒÒ’wçîÿýûÞ2 æÌ™Ówæì™ÖæœATài¯ÚÏIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/zoom-original.png000066400000000000000000000015031417507262200312600ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÛ BñŸÃIDATxÚlÒcY€áóbÛÙÛ¶mÛ¶mÛ¶mÛ¶m{âgÞI¡Ýéò+ ’ ˆ"?þÎý'åBá¨ÙdÔÿÊàw^dhvlÙråA:%™yìÌQ<¦U,[Rnµ˜¤wŸ~ò·î<–óÇãwÚ6lÐtGº@ ðkÐSw§W­VW+,`À!‚„0‰ö7L(oœ?”)«ß\½Q£¦—0 Kî?z¤üõ'B[}y¾8ìFÒfÓD(Jàã+ÕZ¥ðç7íxøü‹Þ«øî«Y½ª’%“!¡Ó§€ð[¥Ó‡Ìv͇šz—óXÏ=fÅ£Œfå½û4Ìö¿6š-k†Ðg?¥qãG–LP$^òù7ôd?6í8®.Y¶¥xRµé Î×ìÆ —*ù °åSTxð W| …)Çe1#> ßÞ±.ƒ“$û àÌ•ý‹¶OîÑÒÎ0¬(¼UòozƒNÀ£Qy ‹=±«»N-Ó$`™B.Så ŠÖîÙð~*¥Rm`œF…Fˆ}ó4{/ðéó÷õÙ¬D~§Ë bÀÎq¼‚@÷O®>ñøøÞ `àh…ŸúýÌvpÿÑ«ºÛ7¯Î:péÅÇ™gÃãB»Ž’|ŽC,2Á¬SX|¿áFŽŸ·îsƒµšAªä³fÏ€V­Ú+[$sÙ7ϟ׹Í~!£K¯Éa÷ˆrÙ Ýù (÷¯^ÔOÉ|WÛžÃ×®^{•f† sç̇î=:Õ£(fªLïÉ¡Ö Ä“Fÿq÷íÛ·=–/[³;û·ú+׬ˆš1uÖrl <2Î 憱«ª«ÂÃÃUnܼñíºÕÿcã¢MÈÅÅÅ®÷Üÿ?oþœÿ^îâi)¤ÒÖÖ–÷èñ£ÿ'OxË@.˜3gNß™³g>ZX›skPwɽISIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/actions/zoom-out.png000066400000000000000000000015341417507262200302670ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÛt‹™ÑÜIDATxÚd‘°äZ†û$'c>Û¶mÛ\Û¶ k£°¶mÛº¶jǶ'Nöš_õ_jw#hÄåvÁÃ= ÑHè‡T&;<· ô­L†VÝ}—Ñqφ£Y–Ÿòñ‡±!h †Z,–[õÉáPàè¾ãW¾2™ïLòùפ+ØÒ*‹ùzqE7%ćú}ž ZÑ\Îçsmß~8çËÎÿý& ¼À^’A% PÕ‹m¥GRæ!–åü#‡j(—— F£á¥ÜRGáëï|ì"I9…)œÁ$Ð@ Ne‘f%Ìr¢ñÜ¥ݧÏSÁ·ÞzïËæÞzëm(/ÍfµÖ#D|PÔª ªH`Zi ðŠõ™—â'.íú0(@®ù‘xò½J¿Êö˃:õçŸþòÎÏ¿jákáx–$Îo-yôðåsùGvg½ûõy{ù²5W› ¤“iäM*£…ÖLææÍCV@еj…䆸ʯ¥0!&“I¢Í:YfRÌE¶lm$óM&ÊODYk¥–îLǤ?D:x_4–hþ±uÛˆÅÓË_¼3ñúãFêI‚— j°ºƒ$Ä;1bõ¥ÐƒLŠy„‹Z+=IwxcNÎõsÕñ;!åÝ;^zSŸ£Æ( D(t/‰²JÞvá‡mK¦ ²”ß|K¥V×ìÞ¹ê ¡–ù æÁ?ÿ·ñÃWTSãyŽÆ/Òw›0uÝ#¼QTùöÀÊ™ýºKSJbœ¿~íF[‡ ÆOsgσ¾}» ʲÒ(¬½ï^J¥¦e6©aÞÓ[·îîQYY/)-†Û[¿a®³³×•Ôä$¼ $, ™_QQá÷øñãÿ3gÍøãàh+”šžÌ@2èêêª|öìÉÿ¾þž— 0“jÀîÝ»¨ªª©ûùû[ˆˆÙ1Ìœ5$bccÁôæÍ›wîÛ¿çKÚS‘ôõ‚ÉIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/apps/000077500000000000000000000000001417507262200252705ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/apps/accessories-text-editor.png000066400000000000000000000016621417507262200325540ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î</IDATxÚ]“KOg†ß¹šñ5Ô0€]04v ©bd¥Å]!Xu‰ºé¶«JI·,ù õ°¨*µÝw*AC…l«DV,ZÚ’ÄãÀñ•ñe>ÏLÏXEy¥33‹sÞïœç|Ã9Žƒ÷Åqœ`Œb&‰Ü_^^~4???«ëº¹±±ñåááa{ssst{{[ãðÿ'Ï­¬¬99VE¸16 ƒÍÍÍ}¡ªêw#š¦½<|JZ\\¼+˲Às;€(ŠÏ£ÑqðöÚBbüixx8±¾¾~“òù¼âèÓÓÓ*³áX»ÆÇõ6P1ú2rȘ‚Ï+ƒºº¿¶¶öruuuvkkKã\d2™ã‹¦…ç 'WIøô£ Ò÷Bˆ©^t-'—}4©“T*õ‰Û¡Çãàâ ¢I…©°ŒX؃ O•ᙉ?)2KÍð`ÊžFZZZš¥b§Ñ\ ž;;;™v_D³Kíú=øìn±DI@¹ÆpøúÅ«%ÛˆÇã£ÑhÔƒu¡Ùlþ;$X¶Gùü›.ÆZ> ûó¢fX¸¨wÑ0Ltº&~¿H†jµš=èõÕ¥ÞHF½°lŽè‹Ð›&J•¼²ƒ‡3>¤b Fƒ"Zm¿ß?T.—­w .÷÷÷CD;D‹Iǃx0€('zÙ“&òÅkôXœÍ@ܤJ¥bÝ2pADªÐÞö{Õ‚VéB Jpá ”EkÆyµ½ÞC©TªÕ*^¸½Ê¡PèkíÍùÖ//˜Qà ŒmŒøŒ‡$tÍ>J²Õé€>sTo‘ûù§ïÿ@¼Ùí´íè°‡© ±ppZi£\g8«º,xDîˆP?îY§’‘Ͷ¾¹5pAž–šLšºóûqéDÉ)Z%ض W­V‹ýqt¤g²Ï‹Ïö~KTëÆþ»»»»GŸ|û¹åðPdÞ!P¬P(èXËf³Ó}ÉÑÈ/Al)ÎÒ­}³………l£Ñ°r¹Ü?{{{ÏMÓt“‹gåÜüî_HÐû‡ÿß4~©òZÓ›IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/categories/000077500000000000000000000000001417507262200264525ustar00rootroot00000000000000applications-education-language.png000066400000000000000000000014331417507262200353220ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/categories‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<˜IDATxÚ¥“57ÀÉfõ|¾wVmÛöØv=v9(ÆFGu;ªmÛø¬³gîy³Ù¤¯c–qþ¦pÎñ†äqñ½ŸŒܵë Æ{ý ú1ˆÂýq•Ê¥|)úU%½©jµ§T.æªv§¯TÈ-¼ôÖW¿î:°ñ‹ó «Z£SmìÔFM¶9ŠŒ.“A? 8å¤ITª)äÓÂ¥•P’97;Ø_™Ýupã°Ï«¤Õ ÊUÒÆÎiŽ-â,Ä¢8×eÒŒ/ š·|»ÜFI Î *kÚ“ž'qRáŒåÂcŠl·À*A»ÙB+ë 5åÈ“`ŒA qigL9“L7k-”RLõ(„ôYo¥T‹†³Ž)3729:Ä¿×ñƒ€¼ßaye!d­I%±ã.­“+Vé-ð_&’Ž} [D~ýŽzªèË;ŒÑ¬¬íà„Ç´ôp£J tm“ ."¬fªÏ§Ö›Ÿ6Å9Ç2˜sx]êùMM;5ØTbB†Q®â‡RXæ—ÖÑíO¿ó ŸìÚḙ~ŽŸæÁ'¾¦‘@à+¶Ú‚@t]èn9¤‚\±Ü;“&mŒuxažÉ±2M‘狟—¸ôî Vǹq2`Õy÷³ß*&ˆb:ÚæU!V6k~L¤ïýžpÍé.>ºÌÖdÈ`%f»«µá÷óØ“ï „Oæ|Œ‹qÒ–T’ÚœBã2í<ŒIyå£ßù~W‘Ñ Å WÉ‹/¿ßÚÿëw ~_è¢þˆ /Tƒ±^Îä{ÚF™Pª+[K kµÆòw«ÙêÁÝ>}Û/úÖþИÅ,ËèîcÌŸ[‹sÎ9gDkÝÛýT¬µ•4Mu—`!I’Å………:3þw;ÿ@$6¦Áz®|IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/categories/preferences-system.png000066400000000000000000000015331417507262200330050ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ØIDATxÚ„Rp\[>‹Ø¶mÛvϯ¶mŽbÛ*c;7[­wk7¶mßÞÍL¬ïøü€aøúù 3νVff柕••ÅTÕeå@3<< —”¤ì&Qø«îüýû÷¥ŠŠòÑk×®‰-+¸}û¶#T‹[ Ñé‹iéVÛ _¾|™ ‚júá‚‚‚÷¶б™™™iËÈÈ—ù ô÷÷[¼ëpáÂ…ÿþûo’ªš*hhh½€d¥$¥œ ÉäÏ(Jqhdœ”@BÞ®ˆÒ—+ ÄÄÅÎ6µ4ƒŸuõÀÄÈ€_VZnphhEÀ$Ñ+Lˆ'³Puµñ•+W©BÂÂÕD"Ñ›ñ+hbl¬A"‘ÀÄØã˜7x|Í·oßz—CXÄôÑcÇË®^½êÔÒÜtcffƯ±©‘ma~aqdddjrj²¯®®.³ª}#À‚M@þ–%òr²eîá¥%%€••u¡¨¨è_:^„Ð×ó£Á6ð÷÷×WPwIMINÎ.ÀUpð–ùÃá]ÛIHJÐRÓR0ÜÜFIqÙª[F‘Œ¸ä¥N‚_ºb̶âRTÝ7/Ny¬Ô/߃KÞELà¶uQ`5tö×Ïàl=³—\‰Ê‹ 0ⲯ~_RO¾aÔ†ÎhÓ삳nš·±÷vb‚ËQðÒb<ÑjHÉ}5Ks¹%êâÉÀØfÀ²«žz'«‘öVÿæ7žd}Kyl#S„yÚIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/devices/scanner.png000066400000000000000000000010731417507262200301070ustar00rootroot00000000000000‰PNG  IHDRóÿaIDATxÚÄ“5´Ô@†ÿ™L²’_@GF =Ëæ,[¶ì”Y&“ü5`v5#“²@:D$‰"òÉŒ†å¹àamÂPÐÒGü¶(»㨉½ IEz{‰E6Õ~Žz3ü¥ ž™~/š ¸ ©*RÁ•¨mAJ" 0h‹…B^ dR 0kÖ,¾fÓ¶Áña U‡ úä- Ž/jº§‘Íf‡,XÀÅÐÐsæäÑÆýû÷ëe¦Óéä¡n% ¨ß¨V«_< ƒlk"à¼U-?N±Ý»w£­­mí½{÷f¼{÷®3ŸÏ7V*•,µË$1OÚJà˜À!A« yzÿÍÀÀÀj÷†Ÿ~¦\.Ç._¾l¼zõJ$Ñ·wvvFÓ¦M“ŸW]]ýh\ýÀçFF›wë÷9IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/emblems/000077500000000000000000000000001417507262200257515ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/emblems/emblem-important.png000066400000000000000000000013361417507262200317360ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<[IDATxÚe“5G…¿º—™ÄÌRdf ͉!1S,å%ÌM¡™¢sž™95‹áwvo‡Ú½P‡¯êk~ïc «õƒVEà¸ÀÃ@YºŒ}b¹/Y¥åkÔ§’;wœØñ‹Ùô±£è\ãøu—¥Œ}ñ¥ñ††ÎÞí‡g7ü¬Õ'Û^xá•ÊãBZ£ ‚¹í%cæç™êûêS0oÞîGð«V§·>óÌ+•‡ l4º4›^x‰â+¯4\;wñdžI<@õ©'_QÂ)ý{LíLïÚyºpÏ=øõÆrÕ…¹9òaÀÜØ()­¡·ß¼™ä®]'þŒ;okžËÝr³„nÝnúCæÝ†í‚nÀÄñTjåV,™#G³³ǵÂ<—(Wn·BvêS„½+˜Ÿœ¢”Ëv÷Û„*ŸC k%l‹fg0­%ìe–êõ•×% ºÛK; TÄÁ”µnëüùm*™@´Æ± B¸°¸,̃1ñZDžÇÂwߢ„²VàúçÿŤ|Ãò3àê|¤»‰¬0¢•ð=˜–ͽ¾|³c ÇPëÌtû>¹§(ÐoɈX€†ÍW?°‹ª¬3 Øín™¦#¼gAµ +EQ‡loϱHàìÎE3Øù”¯'E |`yE yt¹Š“ÏA2…(‰Bhµ03Ó×®|jͯh€½K&^LI?³³§)EïÛI&‰FGñÏÿGë¿g€÷€së¦eÙÀs=¶nïwmå&«ô?†•;%ì”IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/mimetypes/000077500000000000000000000000001417507262200263415ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/mimetypes/application-pdf.png000066400000000000000000000012251417507262200321210ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs¯¯^‘tIMEÛÈ$"ÚIDATxÚ’l]aÇÿµmÛn4Ç‹fÄsìd¶­mœÙfØÆó åEúX<¿³S½wëþ’ÏßñÀ$%%E›L¦2‡7,,ì§Ëå²a‚¥dÀ¡(äèî¦ù°‹óÀÔ7o½v-Þ½C¬(B  ¯ !11 #b~‹¦‘´jß¿‡ IX‘È«0ºò0"ÀÈr·oÇÏ-[ {½<£À˜ ‚i°¸Ý¨¹{ÃÁùàdY†26$Þ‹<æTp•­´µ!<.æêjxY™9æ9Œ K<Øí±‡¨†¤üøWg'”Š ¿zh(& ™L óðkB22Æ*qáâ8¡Vð+?6oF „c¶Æ™,—ûÛ7ˆee°ŽŒ óömØîÜÇdBÊ_T$tß¹Ó+ˆq:ÄÝEn¦óçÉòù3ÝÌË#~‹ÙL ûªªªÄY=À'Îñô)"öìÁ(fÔEؼuëq»Ý~±««Ë?#Äç(Pkk!/]ŠTîÊè±'îRaÓ–-ç4U=ÅÂ>03Bp¸Ý¤lÚD¦öv²wu‘®ëÔÑÑá·ÙlT^Qq%111Œø1fÆŒØ#Gàå>RR0JBB‚ÐÚÚzMU”ý†{¶¤#>>>ÆjµÖ)œÉ ¿ãwfá?~wý?ÇéäIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/mimetypes/text-plain.png000066400000000000000000000012041417507262200311310ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs¯¯^‘tIMEÛ 2à÷IDATxÚ”’%¼{…O8¹Ìî½23¹’½Œ^Ç«º23ùx[ÿ«+ƒ*3·a^ÞéÙ)sûv–Ï7óôöö¶ …,£ø;ÜD"qÛ²¬ >²IþCøêÇ!N#—Í¢V¯Ãó<ˆï#°,D#tvu¡¿¿ÿó=TP¶ò¡ç-Ó„Ñl" C!=…P8 Ïu‹Çáóa­mmÁù1–ç¾q>{æ Æ&&P¯Õ`Û6R©L>4ÂAšÎŽT«UÌ[°Ê÷ ø&½QÝxÑ$üSUggšŸ&8ÃÃÃè7úÆx,† ´Ï:ÐêîîF¥RÁ¼yóðš@aq]Wk: ¤ÇÇÃ0¤Ùl~šÂ(¾Ÿû©S§033ƒ|>¯q[[[u¾ˆkcóªL0gîÜŸ÷иÚy¢Þ…b/^ÔÚã/™Lʆ B\ûF äÕË—òìéSyôè‘ܸqCöîÝ+_ásB²zåÊmË–- ÿ´L Þs½^—L&£Ç‹Å¢ïÎYºtéŽÿÿÿ?òCNŸ>ééid³YõgñæÍµ)‹¡‰©©ù\nO.Ÿ÷~?…gã„þ~“õ‚… qŒqü‚ÍBo¢cä ”R©$>”ùóçïèèHà'¨BWW×M®¬Í,Ãø‘Ï¿ße`þÍûR”`ôfhýIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/mimetypes/x-office-document.png000066400000000000000000000011271417507262200323640ustar00rootroot00000000000000‰PNG  IHDR(-SsRGB®Îé pHYs¯¯^‘tIMEÛ#.B¿ ·öPLTE+++211---,,,())'''´´´ÆÆÆíííÿÿÿŽŽ‘“’’•••–––ŸŸŸ¥¥¥¨¨¨®®®¯¯¯²²²ÖÔÔ×××ÚÚÚÛÙÙãââæææèççêêêëëëìììíëëíììîëëîììîííîîîïííïîîðîîðïïðððñððñññòððòññóóóôóóôôôõôôõõõööö÷õõ÷öö÷÷÷øøøùøøùùùúùùúúúüûûýýýþþþÿÿÿhz}ëtRNS 249=>?@JMx€‡Žþþþþ…dƒbKGDQ”i|*²IDATxÚMÊ–Ñ^+³vÖFœ±mõý3V=ÿW{#¢kt:+àäår¹^‘ …çØK’aXŽçù5–çEQTäB^Q5Ã4M½§À´Ü"Ël-× <×T¥ž“ ð•žOãæð¢À™|}~ÜþUð’žú†8f/6š#p…W¼ÿ¾Ü„ö°ïã¿«-¨!õ|cv']ï@Õ1þF®:û¹Ù…º}â¤ìpªrËÙ)IŒñ‚WIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/places/000077500000000000000000000000001417507262200255745ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/16x16/places/user-trash.png000066400000000000000000000013561417507262200304040ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsnºnºÖÞ±tIMEÛ "·wŒ<nIDATxÚbd€‚e«×spq±Çp°²Ø褦4Íb(XɽmÛ¶¹‚ÁóXÛ,b´‰Á úqlÛvëöo]&““¶êûâ¤NÕÉ©(/ïPçy^¡ëºÈÍÉMeegÍJàËì¼u?‘Ì\`Ü!µ|øb«æÿÊž2‰¹sæ0gÚžÒiS6j¼kÐéZ—‡‡³ pO6¬óÛ­€« øÀ³†#:Ç»)þ¾L›4‰©&0ÅדûeetG¼a 8P]Ÿ•;gsfÍäÑFuþ ´Æœéßßx¢q½ÊO7Þôóã5__^ñöæ//žéÜîßx)èr¶O÷g_?׿Eéø¾x_JP)/<ðV¶Ó]]ysÔ(^1”GÚ6æÙ¡CyÉÛ[e) /%©¤˜+>®¼êëÃm5´Æ*¼#cõjSÅÚ¸Û^®Ì<˜òÆÜYÝùgk”ŠcGÍ]x¼îo^ÿq¿—ã[g´»qA¬ú¹£’’ñŽ‹sçšÊ’£o•ºc‘‹ óÌffèÃíµt?_4‹zìjZ—GEñ¾öÍÿ¿0 =€µµµ·OŠ‹G]:q90oØ5h)=xæ­ŠÁ}XÞ¹3K;uba?3·ÖÑÿ|!ÐÂÀyCu'FÙÚ2ÖNÅe@´¥·¼“¨ÓqkÅóðB`Ú֬έò^y»MÞnÙ’eZsS]ÃÏC J_˜.Šìe®-öó¶€°L«N]­TpíÓ‹²´Â\Që ßʰV±`•H¹¥’ÉŽò/f-ðñ‘®â:£F:ÊÿŸ˜!@–ãÅu’‚+ušÇ“šŽò­TÛç¥÷ b¥d¢“úS Jß&KÑ[Äûq p…Nýã–€ôòlŽ2h¸à&£†Kœäß]³ÊxKä¾µ’qÎê_Žý@éÀcÔüa›(]ë¤f€FÚˆ—ÄÓR V]´Eüªý*Ï8ȼ °P¤ÒFÅH½æ—Þ@K¼Ã°u¯Ïoa²øßËÙ¿ä ¸DÔ²üï~xxVœ+F±Ì ù娔zuƒ´ê´ãz Üj´àKåúšx‡“ˆ»ZZº¾®O‹òëÏŠã£EÕÂn]6L™Ò{gpp·ÍÓ§ûGöëºw]]›Üs½ð NÃéNêü^€5>¤ ÐH õ¬ÿÕRÉ,€¥b_ØÐ‰9]1×Ü‚mk²\gÁ|€7¢´–'jÕ9½>¥ºˆ 0jF Ë'ûêX1_̯ìÅ"Þ©)ÖH¼XË’ËêXýc¨ZŠnXàK5,{ãÜuš ‹[è~½­kýÿîÓâk»ÖûËÌ&Úü>JÅòÎ@-|# j(Iö­eÙ© qÆçýôÕ4:E÷6IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/dialog-close.png000066400000000000000000000022771417507262200310370ustar00rootroot00000000000000‰PNG  IHDRÄ´l; pHYs × ×B(›xtIME× 6Ô iªbKGDÿÿÿ ½§“LIDATxÚ…Õ”ëÚà/IÛ™Žu}mÛ¶mÛ6žmÛ¶m[Ç6ÚQ™4yG ×Ûüþ½¸¯’ž¡m€]#¦#—±1áPò éåààõìq_žs ä£H¸¹ÆÍ¦&͘ß&¼o_}3É«ÂÒ1‘׸c ¯/7çŒ3L:ê(]Ó§†šÃÃ6üå/–~ë[Ö,X Æo\ÿó_~ÞI|­‹ãç|°]o¼Q[OÏ‹¢gHÓÔÊþÐ?ûYå$ÙØàìÇùý‹àÓÈŸÀ—{9gÎ~ûÙéª+„Q ²²í]–Mÿü§úÓ6eÙú ‡?ÍbˆÁuÜÒÍS{{͹ðq<¢}§Œ¯œ/ˆÇiV¤µqÉø˜ÊÆMò3f]ºT{G‡|½®ºvmgÌ^>³‚,‚Ké™Å‡èž~ྒÞL÷1'šyÑ5ÂA«~óm…°b³ª¼i½Â~Ûù¦[µÍ˜aÑ7¾¡»»[}Ñ"µ4=ƒ?þ”!‚=8»È”® PÜ!gttŽ9»÷9Äô«îµlÍR«Ö.ì}€ÝoºC†:¦MUÍZârIOON‚6nB!:ƒúØ·7GçаξԿ~²ù%; gò ÝSf w˜©Üäð{ž„‘ÚȰoßz™®Åÿ­Z+^¿I‚“k¼#@áüvˆ'v1¸…¡@«;ïï»ùÜ×Ì9äP)ûÒMg›²úOú*‰xCª±‘á&ëÉV°{ˆ¨@QŽ ²¹f:ŠMûÍ.ùüÝg[=.€,M½ÿº V~cêä¦B*ßOÔA„ZËyÿ4\'97a#5)9!As$=T)@`+Gl+Ht(Iv%FwAt^yœ 6I<\ˆ$J€8=?]‚(L{2Qz5Ry6Pl%>I6Pa%=D'@B.GJ7Tk8T_9Vt:T`;Vf@]gC]qHf†IhsJfƒOk•Pl~RmSr•Tq‹Ur›UtWs‰Ws™Xt‘Yw Zv“^z“^z™^{^{ž_w_y _z˜`|™a{¢a«d|›d€žd€ e e€šeƒf‚œf„°f„±f…¢hƒhƒ¢l† l‡¢m‡¦n‡žoˆ p“¶q‘¾s­t§t¨u©v©v’®w“«y•¯y™Ç¶€œ¶‚¤È…¢¹†£º‰¦¾‹§À•³Éž¸Ì¥ÄÙ¬®e7tRNS $'9@ELV^gpx}œž ¡¬´¾¿ÆÆÍÎÞáââäçéîîñôöùúûûüýþþ*:$/µIDATxÚc #àPÖæÂe׬©ÓãDeÓ(¯¯¯Ö‚òÄD!4«zQmmm™.„§+¢YÔÒ«*+K ¹Á¢rîÅyÎ ̪…ùF<Å qq)âL*Þi qYƼP“%m<üÃãmu\S£Ã2MøàöK[ùÆ${åfD…˜ñ#¹KÆÎÍ'4ÂÓÅÑT޲Ö~‘I‰Aæ‚hþ·Ï)ͶÂðµ’S…¥0f`0*ê‹Ð)6r½#?¥.íIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-edit.png000066400000000000000000000020131417507262200312220ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEØ &Qã‹IDATxÚbd ¸à蜠$IU;³˜ùÿ¬¾µmÛ¶mÛ¶mÛ¶mÛöî°ÝÓÓ»~[kÇ{éÌH{,®m2ð$LØ1ï’%ašø ßA§òÚ&\µ$ѱ7£¥ŠòÂàrå"y„;ùF¼Ž—*rõN4ýè¤×ó‹Ï—ÄáóõÕÄ’½Á€$IȲHß ¯òª/ÿízDFé=?”K,‡r;”êNIzq½Ì[¼-•ß ’,ÚyT¼÷»à´½ óŒø˜¬>2$Ô+ý[ÊÂY.hÕTU=®­Xï­6 B+C uÞB°ï熦÷ð{ˆžÉ‘GÆ9Ùp¸wô©ÕJŸ8dz…Ä÷^ ÿ’ ®?tO21£«‚Õü¨æ@Ï6àðüý£Ð¤ôýàÕï#Ĺ—E»°ÿŒ I±3¹ƒÐuÔà½ìñò¸ ˆ·ÅïHµhÁg»Fu#;Ï…0wý „êeX )’üÄÚK%±Ø…8øÞ¿/ÕŽ@q>'ŽaW3fÁCTE¡kU²ÆgþѼø¥_N€ÅoIµTõšQ#æñ0LÐ}Ü \.7 ‹›¨YLfæžtDÙ~ aÆhÒO‹µ ËÅ6£MÐuô%bìJg·Ñ¡º—9»ÿæêãPêׯO¦L™xM,> ϳé8Ý‚COm'G*'ƒŲòàl?Ê•+S¾|yíÓðU+v=™„Plt~GÏm¤ÐyßÊÊKÁLÙ “?~Z·n €ªª¼OÐ;âWrw¬ »5’‘3ŽqùŽßô3¥™»Ï%:Nr‘&m Ú´iƒÕjEûX_µbgŒgp‚C’O H‘â1h…Žzõ³zõjräÈN§#44„“'OXý'WÌ«³²FßÄnºNõ¢‚ 9=£G²¬È*“>]z„ÄÄØØ±s§uè¡í€KŸ=Šè¨®\>IŸÈqBH•«'Júòüú;voØ;Òõ6XGŽÙ6<<|# øÅ¿¸Ýn±lÉ"‘3{qrï<á´›„¢(BUUá÷ûEXXX l±˜Å¼ysÍýõW-@âShbÇ#Ü'ŒFý¢@xO._¾Ìœ0aÂ/H5ñç L%Ö¯_oNž¿:[£ô”}Ô_^ž/¡€èͦ™ÿ;ÿ Móél¤°3ª"ê`Z­avs ˆõ_€ÿr‘`IsðNŸIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open-recent.png000066400000000000000000000020101417507262200325110ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ$Èýƒ•IDATxÚŒÓC˜ähÇñoPh[cÛöemû¼—µÍÛØ:­í±m£mŒšÅîr*[I+“ýž'N>ï?/º#wÙ.2ç“X㡪AœUùœ^ç"]ð»ï¾ûÂÓO?ýªÚySŒÇ®l;UÂmu½fO5 !Ü($göât¥#ä¹ZU0V®X¶ý¯oê¬RÏ!CÒ4[UUDQDÐ@ãì8SËúÓ!–¼ó$÷ŒÉÆ.*¨ˆÔ{ÃÖ•ÛJ&ý¼9ácf½·ƒ£‹›D QCo¸9<>Þøî/?6…g¦ö"/I¢±® Ÿã’á݇3eʨQ$ä,Äë`Aºª ›üº¿ KjÏÆP»¤âóù9uê$ååx½òž™5))õyÆ>ß[Æ 5w…G…ãåÍ í׋ìD  €ÓåäÂ… TVU’1ŸÏÇ€™Ÿ’l÷¦ôÞwBFPèh  Ñ»M5J0Äív³ÿÀü~ì¾Pì×GÌ@гƒ,¤+Ö1ºP±£I’è•aãŒÃG³7H‚ è¶lå ÒRÓÈÍÉ%)9™óøSqW_5ö±Ž˜QíÜb±p÷j\müyúJé•Û‹¬Ì,ââãinSøáX¡»† ÿ”ÈfØØ-}-Åàyc0«à +_A yxLIVD‹•’z?K÷Ts¤Þ¡xÛz¢Jà acÿvn½zõâóÙ—ùôð5\”ùõb#’,£¥­ mV‘ä¿·8Žýö;àï ϰiÝ1mê–ÚóÙp"ŸƒN µY„©ñ!ék#¿9îø¸ ¨7¬ØïÙív&OžÌàÁƒy±¾—Ë…,Ëdee‘››ËmîV@¸Fƒ ðÔ ÌÌL222P}vt¿/*€6£7Ä‹D"ú|z’lÁéö„nÓÑÇÆ˜ÒPm1x<q:z]khØ»lÉâÿèˆØ£bSu抵ê¼^/••U€ÊÀAñùZO}ýåç/µ477™asnˆkÕ†Ãa-Ž­©®*\¼tÉ“çί§37„oЯfØãñ’ž–ÎÙ³gήY·æÁ-›¶\ƹ‡ËcÄEš[š._¶ìù}ûö_Ã#\^^ÞRTTtÄ\©ñ:C}þ5µÿ¯¾ª¼ìÑÃG¯p9€¬Êš þàSゼI‰×IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-open.png000066400000000000000000000020741417507262200312450ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ 5W’ä¼IDATxÚ•“Ð’»ï¾[Ò$‘î¿¿úwxÙ“ðP5ë#{­´Â 0œiŠHžD§÷¼÷h4ˆ4wØ~ûþû|äãëžüqhÉÕ6$ P©äxìÒ]6ÏÁÑ!0£ R¤ÚÊEÈîuvuÑö[o÷=ñõ<¬´–Öª¯¿üt³ãoù¬ÏAU@+ŽÛñ/PXÇ´T.£¬ÎTnkCWw7¶ßj ì± ãí×_B½ÕTÖê•*ç×çÂ…øˆˆäI·1ä°…^ª|öövôöõãè#CWϳ¸ûÍ÷0:8~õCN“8n"—ȯ3þí|µãî®.¬¨gñÒ‹/bphq#¤iÞÈ2Ë.‹³÷îÃ×|ŒUöZ;ÉÁ‰¾×€¨(àDÔ¬†#”JeôÏ¿Ú;»$18 Ì OPo¶°Õzkcö)—cÕeÀþiwþNg¢ÑjÀdŒÔ[øäë1˜:}6˜Y-Ñòkµ& 8`ü¬šÚäAD€ £…7ž˜VæUqÃe§â ,ù*æj;ùýú“”;M¦Mš4™.¼û)¬·ê’:+A±mû(Š<ªÕªƒ±ÍÜ€–¬v¿¹€ü,¾ýàøÆÍXª¿oQ¤!…)9Í’)9²Ÿ4g5²´Ú`N&;l!°Ú‹(„)†ßþGP8…ØuJ@ ”Ý·&bu›;V–d`±n@à ¬3Aѱ¦Õîm‡¬.…â;¯¶Ž­S.j±{T¨xžð¯ ¤¢iMPvÈ9} ùËd`u`p€ J0fYÍQÖœÝS–×ô³Fñö—cÀ,€­ZÒlivhƓŵ÷4í™ÀyÌ™2 ~ù%æÇª«­ŒˆD`§mi`Û&¼XÉž{²ç-C3ò©ð#µX†‡jÄ"€Ú‘ËÁ±ØV hj¶gÚP׌¡²Eb*v7/½e‡êàH %¶8lÃfKŽ(¥…ÀM½çÒ ˆHZ #“€H´iì(KÒdHˆïø hl1~çãä(IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-preview.png000066400000000000000000000020761417507262200317670ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<»IDATxÚ´”¬%I†¿j÷ó{÷ŽmÛv´Œ³Þ6\[ñ‹½á2ÎÚÆØ¶í¹¶»¦ºÇöß,}u:BJɃz½¹7Ræ2>øè±ã‹4M „ƹ¯P_ €Z­†iš!.~/WkKË,à°ð!—ƒ7oÚìwb§NGèØ1 ž‡ã8 6®… €«Á̇Çb1¶nÝFºàñݧã Û¤V=H×P3Oo$2yÒDêê빙΃µÀýåË–q<éðéOû6| O¾8“Š×ëVïããŸvñø”rÙÿyì±G«‘òæàŸú™Š´t?sžÁ¤™ƒéÕ£…Óž —)q•ÅÃG÷á—¯—Ыs= -bÞܹüzÒ€ÀÚx<Æï«ò 1ˆaúa59œ©AUY»« 8¡nmÌxx2Kv9zôh`zn ®”Ë€àЉ4ãçŒÄjvp,šëLK£Ù5iUáa*u.¿DðÜ8g",Û£„Ûhãº>PÇÅ£ÙЃ8V<Ðlb½EC[ †™¼½!¸[·n”Š%zviF×5ÛÀQß:C`Ÿ eMà!•=Ã.…Ó…›‚5 8RJ¦îB©T @†.p¸ÿõ7¨žçѧټy(.OÞСCèJ‘Þ¶L¦HÕM ÃÇ@U Ìx+{Œ)S&s3sçÎ%OðøÄzZ¢NÇ Ä+™¤+’h±‚« ½«QúõïO*•¢R©Ü4y]zþ…çùö›oimKѳdsj㦅«y4•óDdÑ…ضÅ˯¾ÆŠ+3f €¼^u›•Ëå MC;_|öïßÏêÕkÈå AìAÒÒÜÌ$u”Óé4_~ù%…B·ß}ãÇŽÖÞzóÍ«W¯^ÈUòÁRM”¥RI–Ëe©\”Õj5xTu“*aÁ³aÃÿÌmoo—O?ý´\§ú:”ýè£ÆùF\x´‹•ê:±º<~ ¨’šÀ²,fÍšYQýóÅgŸ±cç®ú×ßxcõÙ-sC<Æn8Ü` À®9uêäïÊÊ*ÿõë×»øðaæ¹³g6lØÀœ™™¹½³³3Æß¾};Í÷ƒ çÿøñƒá°ôãà`ÿ‘ŸŸã~îÜ¥C0Ëccc;mllJjÃÃÃÿÏ›7/ 3„Ø¥/_¾|c 1/^\~üøñ11±¿&LxŒƒ¤Öy€ÜÇ%” ÷ó;wî< d1¨ð~Ô€4IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/document-properties.png000066400000000000000000000016301417507262200324750ustar00rootroot00000000000000‰PNG  IHDRójœ sBITÛáOà pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<¤PLTEÿÿÿ81$$$"""883772888DDDTF2&k2ye'ÀÀÀÅÅÅÎÎÍÏÏÎÐÐÏÐÐÏ!WN3aM fQgP mWoYqZr[s`#yug}oA~xh€o8‡u9Œ†}E•“‘—†Q——•šŠXžŽ] ’b¨’K±°«²±¬³ˆ´Š´Š´ ´´´•1µ‹ µŒ µµŽµ¶ ¶Ž¶µ°¹¸³º¹´¾½¸¿§XÇÇÇȰbÈÇÂÈÈÈÊÊÊÌÌÌͤ ÍÍÍÎÎÎÐÐÐÑÑÑÒÑÌÒÒÒÔÓÏÕÕÕÙÙÙÚÚÚÛÛÛÞÞÞãããåæçæ»/ççççèèçèéèº$éêêêêêêëëëÁ9ëìììííííííîîîÃ5îïïîïðïïïïððððððñññ¿ñ¿ñññññòñòòòÀòòòòóóóóóóôôôôôôõõõõõõööööööö÷ö÷÷÷÷÷÷øøøøøøùùùùùúúúûûûüüüýýýþþþãÚ¶tRNS"#1489:;;<IDATxÚbaÀ ]Î5^.1ð™IVž»»¿æ Vâ^c7áÔXÇ5pwwhqwwX%Ùý}šTóÌ´(»±%«Åç å —\IÆýcƈˆ¼ÌÉÀ9qL|òÿ…f`Âd=€˜#FnYaþì¨^•o¾ùæËúr °Krå8p oÞ¾¥h©²¤M‘Œ8¬À .€zCŒ‘N‰7ÏŸâõz9yêd.ÃXUUæÍŸÇßÿ€¬(º Éð8 *Kø ‚;8„œ#G’º`!dEåõë׬ªØWgEQ|/P›ÍÌÉÛoHM#D´<’_{Ïáòå)·ÿÖBÅ}ÏŠ¦i* ŒüáGñ“Y[LÔ)ñ]b&Ï/ á› ~4:#SÂ%SF–¹Ôµ+åo=¶zuŽo샋zyõ ’Gáì½÷ÄëýVš|ŠÖ“î> ÃS@‡×KƒùݯÈ^U@…µÎŠo,.°ªƒÝ ¥Ém@ý_×ë¿¡ËàúC™Ó8™ÝÜ)+T¼#Þx`MýÆŠW#Ö#sïu¾ÈO©‘a6Kö˹¢¹ƒY6ÂJ´)?ž”¥~übÁ|`ÁÑâƒu¨ª_ ãŸòd"6ú y­k¹p+œåû5"ÃY?ÊAšôØû¢Å þN–¹E)Ô8p|cQPÊ^|S¯'м®¼~ó†‘+-DF3£‡™ü¹ì¬ºV™lù²óÝψõÐEˆ V|cQ |™4¤&TÆwMÆ×èËt™‘Šð]j„Sö7;=æ§& ò*ßàæù“$Œ`Å76J!Ò«¡“|ß–¦q÷ÄH•  GC;ý§â­Ÿ™¿Ï… ŒgâÅLb\Q‡”¯Ô–æÝWñÑOæ»ÌŸ™ÖÝʸõɸöš›ÍfÜŸ(I6ˆØyy2øÓ¯g3z _˳÷2™S²lˆ™-çÓqë]&FŽêDõêÕ ³îݺ…x6Wn|ñÆÛ ⯒>YKÆdØÄM\¼§‘ÚÅÊ!Nß¶²`Ô¬Y”¢E‹f|ræÈAP•ˆðpdYŽ+‹IcLgs–áð• ¤°+,ìÁç`}æJ”(Y˜¶mÛúM‡ŠæõÁ4 ßOÑç‹EHàJ¥ÁñM_ŽÝŠÕÁø6þ¤Há Î0'É’§¢_¿~H’*š[–/š¬(äÈ™“O_>`ªV,Ž,}aú°²\8½ƒ²…ÓÓxt ýÆì8±#£¢D-4)VÂíŽõÍ…q´~a .©(½=i´wvÜ€†óáÃäóùâ÷¯”ÉÔE 0 hÝó<0—uMeŸF«Ê¤»P—EgæßIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-clear.png000066400000000000000000000023511417507262200304770ustar00rootroot00000000000000‰PNG  IHDRÄ´l; pHYsììu85tIMEØ5 ÿbKGDÿÿÿ ½§“vIDATxÚ­“¼ëÈÅÏL2QSߺ}ïòϵmÛ¶mÛ¶mÛ¶móÚªÛ$3³YÛûýhøó!ø ÜqÉa3鄸\nµ-žÀ/@ñ'¹ïú3gU¤³`2™d†S‡Ï?bØÔéfTr]vÝz;YûG _uþq–Û¨ldÛveªT½>ÛðgŸ¤§áÍšÕ錦[}ði/~…ÛÕ.¯rOŠqäæ{œð~¿ÃÛ®¢¤[‚óXáÔÙ˜©Nà“§|þr)ÜneÖžñŸ®Ö§[SÆ<#ã( C†ÞèiÜüȸ¿×ïšk®UnŒß4¼ë&Ë’\<°S¾=ˆ1•9œ fé HÆ`§q….sÍ7Æot%:²s±ùÏUâ‘Sü½ö«5^s‰ÿÿ/Ù¹®%3Šå*tFÑ(A‚|l†0 sñÏ?ëþhN‰XÈ>fÎÖÝ0iÇIhöÿÿ»ÿ•WÒ¿Xãõ—™…šáÔñ–¥¹çB¥ÍRœ0T»y¦µ3Y¬vvßKo¼ûï5VœGÔ8Æë舆t¸è'øŽÙa¹åu3pw<3“ÙFT&& ™:\Ç“m¯Œ ²*„ š¦u¢¢8=$>xøé³·åòÔŸE|ôËeMƒ›M…Y((18VD©.À K è{ÿÅW>üÏ¿;þÃ?5 ð€‰±Ú øü…ζ¸<ütÜNÙu32/vé°m ¿¶Õƒ'+ÐT‚ÑÉ* Ýz_)×?­ ü‡|< ÁÔ€†j&âU\ï½ù#\sÄú c一elª¨Qˆ@½\ƒ'8à4ŽÁ¹«o,ø¿†Óí'Ì÷æeb$ÊÖk/èÎR,Õæùw.iB•’6$!&ž4±0â×pf6 —£Ú?4qÝX±øfç2³\¦é¬_gd¢0gb¼öÜÀcŸôê“#£ ª ¡¦Ç7™>ËD½ñË¡±ºpͰb„Z|£Òu!àÕ¸l€|ýoþÖøÿg|ʱîr½ñøMqÇwÀgÀ!ørÓMëeÀÖ)Ú¥D+€„ëòN@´êŒ¶Šf³‹hjLiI!ï‹ÍýÙ„VËÝù¬˜íí·ñkøH ¼wÔÚäs+J᪠%ANd­žçÙã“%¯- ~0XíÛd¿'O$Æñ{|O¡ùkð(ñ–IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-copy.png000066400000000000000000000010021417507262200303530ustar00rootroot00000000000000‰PNG  IHDRójœ sBITÛáOà pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<“PLTEÿÿÿ%%$&&&(((¹¹¸¼¼»ÂÃÂÄÄÃÅÆÄ®®®¯¯¯°°°±±±²²²ÒÒÒÓÓÓ×××ØØØÝÞÞåææçççéééïïïôôôõõõöööö÷÷÷÷÷÷øøøøøøùùùùùùúúúúúûûûüüüýýýþþþÿÿÿWvtRNS$'017LMeeƒ“òõùúûvW9%ÂIDATxÚ]ÎErÅPCQIá $ÓìIašf2wÇÏ*ãÃ)Õµ ^bû©³OqyÛ "–ï}eF¤D*‘ `†’’Û²ª?ß‚<¹*ý‰OªëCdH‡¾#q蛩ÂåÒ °ôux°¸|öÑk÷i™×hVz6_XI ½žÍëˆVfÏ­C5ddaÎ?Œú™Ðo7róˆ9ͣʛ|¯†‘ã¸rŠ10?þZ·1÷£ ½U fžãŠïª›W€®àO¶ýtþŸJ"±2áIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-delete.png000066400000000000000000000021201417507262200306450ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<ÍIDATxÚ´•sä8…Ÿìx Ì;ËÌÌŒEWx ?á˜¡à˜™©ð˜™—™™wí,'ŽÇ¶t-WÖ5çcêªÓÓ§§V«† !ð„‚Pl`¬yc+䡸[Zräz ySSSKzõj±&1åsî÷°v­¦8ÿÞ»bË A-a­’;;+/_5àñGy:…¦ûï×=M » ´œ¾ÕÝv«‘Þ³eW\Þ("‘•¹Zå‚02|øš!/¿ÔÄ4 N2XMô0¼H$€PU]Qû톛H çÐaôœ:Ú[oÑE,ÀýÍ“uúå—s˜ð ÅÜÎYJ ¯§æ­·™Ìuç‚BBï¹Ûp[Û`·¶Â%“É :p8MÐùÁ+§ 1×wLˆkö._n¦¶ncж žNC†tN@WQV÷Üc =ïüy(d½½ˆ––@‹Å‘øè#K²Ç2VÈ%Ð¥ßCñ²p,²6˜tù…àrÌž= N»”()FÞÀA°î»Ï‚sæ q"À]*˰Ç7"ƒ×Ö.<…‰¬‡ rNïPTuôºûnKå<€†Á~|Mp•–<æ™§iÉmçÎThÉ^_í=Z uòdì½í6ËqÝ9K ú‡D <Îçî¸îzK©©…VQ &—LP•® AóâùˆÍœ‰]wÞÙ@C‘‡ßˆ ¥æ8èüô3Äè-/‡ZTF›Ä™êY¸É$<×…ý[€ß*ÅÇT X9dÑ"=²{7Tj©i¤…®œ1¸ÜŠ ¸S§b÷—_Zžç͹(\Š0í·`ŽýûÁÛÚ|ÌHY¢Ó.Wêw±~=†.[¦+ªºRŽýMðÛ²#€MsæèüÐ!d©­8à'u$ÆGëØ±`55}ïÝT ÎÆè¿t©Î .¹¥ð¡Œ ³fªe9ƒ(€}‹—”À&àŽ4¥vܼyFñ襉mÆ¡t©í0iŽÿðƒé9ÎÜK¨,¾c¼Y4h!º»ÑKíå’Øà£“ ÛÊ©Siކ´¼z5É(¯ÏûZ¶h®>¼v†ú̦éê±#ÓÀÅ…oß¾‘™™)àœœîÝ»GÍÚuX³` ç7MgûÒ)xùøbi¦Í¿û5X4g4²ÕA*måÇ©6mÚˆi+{™‡fgg X¥RñìÙ3ôëEó†Vèëé`eõ¿ì¬ÎøÁ)\¼t©ÄºåE@º¼“dƒ•G® x:‘Ùc’±±«ÅÝuZLèÅä)ÓÊ„£Å²§¥‘Q ÍÍÍE13þœÏÚÙM°°ªÅ‘yú,jIDd,OŸ>U–‹ŒT< gšþ÷bÎli-ÐeÃMØ?Ûk»ÚʽBIF}ðà•lx–+mÈËV<”lsä×?ï®ÂÊÆ‰¡,¹ºB¢J5]?~,£©êíÛ·åÈ×7SJÀy½Íåë»?xpf<;†ðþ¼3oÞ¼Q]šzÍš5 ÚDåÀÊ64VbÌÈÁì[ٜ翞çß§¯Q"5õ»zõêÕ Ú8¨0ãâð±ÃûÄk®J%¥”¿íÿòI•ˆ*ÊôåAåÊÿO‘*òÝËúGY*ñð*Ïú|[Œ$&/IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-paste.png000066400000000000000000000016101417507262200305220ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ 22©OjIDATxÚ•5ôF…Ÿ´ZFãÏÌŒÉG™#3Çf¶#3Cæ‹ÌÌv~¹™™™–™ŒKšžnG5§:úªºD­×Ýo´³<˜¦yŠmÛ°0áóùüƒÁàE,ĶmÛàá`¥RüñÇŒ¨ÕjÀY2"2119Y²d vîÜùÒÑ£GE4uxà[xà½f³Iq±yófqøðá×öîÝklݺ³aI±çV¯^}a(Âúõëñý÷ßcéÒ¥Æc=eË–_ýµ“366†^¯wîG}úá‡NÃ,ëÖ­k§R©øgŸ}†©©)ìÛ·ÒKxPþã»ï¾Ãøø8d3øõ×_Y;–ït: rÑðÕW_ANbø,ŸÏó\åÐ:d2D"ŽÝûd°“žŒ>C,aíÚµB& "Ç¥RIpñªÕªã÷Ë/¿,æÁ³à ‹GÕeY#»£óùãÏ44ÔT†šLi¬Y½ „®JRGÞçQáÍ3M šÃ£j),zæ…I*tÔt\\a(Q†®¤[1«¨:J3á—‚>'LWØé|˜/taù…ƬE_¶,vJa«¦E•e‹µB/DQ 2(Æ£»Ã:–òn¶ŽõÅs;¥ÈP\UÞìÂÞŽ=/X¾éÎ|Co9v·ÓqŠñ“ôŠ[¼ážÝвØP¼Õjâ“O>A£Ñtrü~?‚Á 6l؉ϒÀë3 y ²3Šk“˜( ¸øâK èõºxø‘‡› +é_F,ƒN2™t»×ýdÑ-Üo»Õn⑇iÜtÓÍ×x×N$Ü*ÝÎjñr¹·H¾ì ÷óªT+RôáúwÜy5€—!±¸C1‰ÿ$áp¼æÞ¬„û³ú(”r/G6ŸÅSO>Y¿ëλ¯ðŠ›sÙUWÛ¹LÚÈe2Ê_†+N§!w:ÌFµVÃääƒxò©gn( “Ð0–œtÒŠ¥Ë—­òûðÀÜw÷Åãñ0·HÙ¥ÍÛ2²¨aÇR©ò~øV¨éŸÛ1z/†‰$¦BŒIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-redo.png000066400000000000000000000022761417507262200303500ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<;IDATxÚµÒƒ—äXÇñß Šªv÷ Ýc¯mÛ>ZûOXÛ¶mÛ¶Çžéj–™TòÞÝ—=Y[Ÿsâä=bfü–×N­° €ùÞ¦?y¾ð¹¿|õÓ“–¤q¦öI/ü[ÑýH£ë'5¶Äbõ˜Ú4ݱ.ÔµH—3X8þ%ÖŒ¯BbíHJº|² = ®ip¯ÿ çúá‚M®ŽÄÂÏž;&Ö6!nF6 T¸O˜jà I'‡áR ¿øœÓÉ£ftõM˜¶×´ƒpÕÓ——üðÑOÛ:&O랎†@.lü“B¨º,K|"¤¶N”Dï¼ü.øÑõ­=“û;ûáŠ!‰S`.Pm ù|g¾øÊ稃B^˜¿°ÇxáÏÜbu‡¨ ŠŒQP¡l»Ö nè“„#Žp õ9®àM8൩ybÔ«dETr!Ü0óQ†Ï ’Ìæ¶ïol|Ä…a–O"õhS]óé¹Tá 5Ρ<¨Âøº:ꂬ• Ž%r»XŒ_øî‰+õÕš.˜óÂAÒ­u¡Ñ§¬ÚxM(8Ã.Vö ÁovißCís:_éjk£¥ÕUÂ`Ò#z€â/†)³s…~Uw©V G¦&õ/‹&Þj¦ÖÌ꺦ą]²©!hQ\UIÈ1Q/µö×r°˜tUThÒÅo!f†z’9¤Ñ^-qz+øÍszD+¨‹œˆŠ«”Bša™šîêD€|u³ŒŸ˜úF+-Ùf”öl{Ng<2«3Ú;³–_õŽPa×ÛaÝt‚š! Òä“/dü9?ì#özkçh¼sP‡L—ó"ªnÕMÒL~x£¯Êß ÿ`ë÷6§­“Œå™„ˆ…9UÊðs>f(/ü?Ðð?ùôƒ#û^¯ëIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/edit-undo.png000066400000000000000000000022621417507262200303570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î</IDATxÚµ‘,I³ºkz¸Þ}¶~Û6϶‚gζm3p¶mß³¹Æ,Íú®g+#rØ_vW•ž8O9;@ ÀþÖüÃú³1Ê(¯}À'íÜ Ÿ€zü\Ž´¾nÝÑ^Øa£Û+G]Ô4%ÛXÛ ©k˜F&?”Cè·Sêk£ØÕGw[Ð%Fö²3·R¸üËö͵.¿ŽöeCK€…5M™­æþd2^áO¸…ñ8›¨#©F˜raÿ“,{«•Ò@|+°Ÿ½AÏÃò«þ¥'ÓÝñ("ŠñÿˆS; ¥> 1Iß[t®}‰u+‚õ?‹£Á¨\ MÍÿC¹9Èd0Aò.J |ð(QùïÓ2­™8ºwjëÚðR`ë÷‰$6”€®E£Ÿ˜Ð§¼zQw;Qo'Žë’j˜@fÒ\²Sf†Ü&&Lý>=ó·²ç³“}ê›F¶âçúFÿjX‡:\ó’W)ÔÇxYƒƒÊë ©ÚéÔ|ÿ÷8©Cuè>–¾]ìæj,F’8WY!ñ‹ t>‡Î'ä'Ö,3„åØÁÞÀÍLù¡ kÖÉàüPÕ|ï/  žú™ÂKõ~)ù‡ƒ#Ÿ$ñ1& [q ذ}º²"(E="ò]º°ï¼jQTdš£âr{XY;?NªU±b¢™~9ŽýN*óíòÛHâ ^íd “~‰3a¹z¡e²× \e÷.´Þìµaµ 'ª8èZ¹,©”×[‹q)é+ä5–_h`E±Í©+¬Yƒ *”—G¹v h7 º[ù1ïs{˜0Ñ*+±¿*.k”«+"¦1•÷~ÁÏõ`™m+oû'».?Õ.µ®Cª("ŒÁ õXÞGa…BZÃÞ•¥œ|bâªL°½Ùáòð?Æè|ÀUq å2n{”жi¿ðqvÕZ¥¢ªÓšÆÌ7þ@ȇJµ„¾‹åuÍGÿ¿D–Ÿ­•xÆ©Ÿ§Ó€Ï÷Ÿ®òÚeKëÙ¹‚C\Ò7§µô'6LÉät_5X^ýXx4šR’Ò’ô:fí³MN11o¾0ð_ÜZkêkëÜ7‡½ù=÷2 26žŽ=53,¯},,©V#ž6svè’e·OW n9TÙ´Çsi×1aY5cR¾]â(ªŠàõˆó—(‘¤Tâe×åá…ñ<vùî}‚eÞ–keáݳ :z¬$u¿ýíä.ìÓIçP$™ÁJLÑÑÍÅÖê}"ܴˉ2 D„/ÂüG~àJ£ˆb­¢(­‚È J~¶»ÊÔîâ@]GWÒzÈ…òÍäGÿZhÞ~ægŠ8J/åšñ“‹ÑDŸ·'<Ÿ 1È{|ð‰¿0«_ù•Ò• N}qƒÎÞ¨ù?ñÇ#6ü•]~ÿ§Ï<ñ·Á;³mG®‘dIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/go-down.png000066400000000000000000000015501417507262200300400ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs „ „ªâcytIME× ’N õIDATxÚbr€Ÿdû¢S‹m¿ à”€cI0ŽÁâlÛ¶mÛ¶Í2ï϶mÛ¾gÛIÖì »¯³U±ó_c~30’èÝjiçµí—÷_²ï¹ã‚ºæõèªówç”Rôï¹7&!SòŒ¥ŸÜc8†©=[B„ Î*P ] –"„㸃Â2nB*2>XÄÁaúVフ†=×Ó0!¤ë[(¥4ìn*ν㹇*uÿš™ ÚÑ•ŒB†Œ“.¸…J%õo~çûêºûߊ¶ÚWž}èK—~à­}àÅË3á뮚>â€ÍÁ‡aàÜ€J]¬]H œvòqœŠ¢qaµ„…/š´ß€+^Ñ‘ -“;gß=¶ÚrÕÕVÀ4Æ!ôCßZºRR?ÐúÝq=d3,[ÞŽz­*)7îïòXׯmbh­³ãäZµrÙúlH ãP„ACh8Œ¯£áDÈhë(#_¨¢ZsѨEþ„Êô·^wæg§¯ŒÍµíjÕ;$B~SÁ $&ˆA,Ik›u-¨W/¢Ø¾àoBË‚â<97øÝ­´Ÿ¼ÞÆÛl°úZë!•J#‘L¶mX¦Ó0Á¸B)âÀÇü‰_ÕDë,þ¾Œ^QôË[ñG(ç’…?kZ–…¤FSú±J*…tZ¿Ou~N´¾_0é+^ízoå_KÑ/†A^¡I¸DFÇoµÓ¾H&lØúa™& ÎA(Á¼‰?`Á´__ ‹ó&`(†HÏÙ£sÿûæûBÛ\$4šN&[WœÔWÛ(w`òÏïÏ¡·B7&8ª,Q`Æå?~ðdI‰ 5ü´žF¾yç±f,åùQi;&¸«¸¶¢£á8×|õîS0LÛ²ðí‡/ TÌÝWOÇ01ŒôËóÊN¼Ñjk¯·W¶m¾ùøõ 3ïNÃÅ1гîX˜_tøœŸ7ôû«ƒŽñÿ¨„ô|8å핈Uƒèj…‰Ê ½IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/go-up.png000066400000000000000000000016001417507262200275110ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs „ „ªâcytIME×   >’ IDATxÚb •¯‘ô)^+M¬z&bÉy´q|ýòmç¯ßö)‡Î硚ÁÿþünWSÓÕÓ–Pcdø?…=Ì„HÚ»(+‰O ò5ôJ@·a~WÑñùm×¶mÃêQmcØŽêAÍAmÛ¶¯­ã“dq“\Û÷Á¼ŠÄ”éUL˜<Ìò`´¼©{ÿK÷ÅÂp,LK[ñQèØ*P óÊ$$B£jÀ²)8£”â‘\'?– × e+ùk»wMöZFœjUµ:Æÿö `TÂéçÝÇu 8 •‚ïs¼ôàå Üs²ànÅÞ>tl;üç #þý¹»/tú¼˜0ÂlhhÙ\×a)σe B’VcŒ:yˆlÇ„Pá¢VøçÓqjqœæ„õ²Å< ŽmÃó\¸Žˆý €IF @Íúþq…•„cua–áœÁ¶,¤"9¥ˆå~–ˆë.6&Þ``!¡dñ=æä"ÖOl{6‚0D³é'Ë@#š¾ àå hÔ|¬—¸w‡­_yôÞÛO2` Ìå4:ºÙ÷ÙåÍ¿>ø^b!XC¼áÃy"e‘”[Xp¹œýõCØì™wJ.å³^IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/help-about.png000066400000000000000000000021261417507262200305260ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<ÓIDATxÚl”ôH†ŸN'éÌoëlÛ¶mÛ¶m£t¶]:Û¶ÛÜQØÝ7›ÙÛ©ÍÎ[õF_çùšŸ°ÖB{9€ Ôu@ „]ŽC¹´—¿°^~ÓÓ_ZOÙÎ ¹®òäh)¥ÐFÏ“‚¿ú*ùÙ%‡môâà ˜ÄT챂«ûl«/ÇÎyxóµ–[qýGпäx.H3M%J7s ?M˜5}ËUFœué¡›|ÔÛ*`Å¥Fn0q‹ßöƒCÞh‚¥Üjà€,ªF´•µ¼ÿÛ\°Íi!Æ)Ã÷g¢g·ºÀ°‰Ra’QT ž»d[´¶|Û'HסJ*ëlÒ=Ç8vM¥T¯¹ Ãâ0åÞ7þÀ•Ï“ÔRK˜9„©hÄ[ó%¦v»FkŽA$„Ik~q܆†%¿Í¨ò¿ê™Å—è«|*ÕˆŽJ•ùåÙ ª`´Ó&›6{hЧžëàû®òéœOIÕ iš§š¹uÌ Zk¦Ï+£“²¤ál:™Ô[ûW¥RÞ¤’: =ðDiÚ0"0T«UÊ‘fÊ" mÀñ[c¶ÒhýWkŽ5ßçY¥ÊÁ¹]<Õ´ëÓ­ÿV;ù¿Í‡0„ ƪÀM¤Ì;çÜ(çæ€IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/help-contents.png000066400000000000000000000024061417507262200312520ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®Îé pHYs „ „ªâcytIMEÜûrTUDHDIÄ0_ÝvT;$zè!œrÊÉâŠrüQ¹‡îŸŠªMÒP$" ¨Éÿ(‹© °3˜‚‚|”ÈÝZ‚`5¢‰: *  °(¢$6>ìŒBí=Ƭ ! “7â$ZгƒŽ¤$¬³p2‚±ßX%!Y#°X¢HtQTÁ†º7°XÂÚFJÔÔF*åÃPAUq\°þÀšd Æ6ŒnjüáŠCãTá¨KNUi©¥a*’‘Éfu÷ÔX©ybßD*`áÀÔ8ËGåºÂ™œ{öIÈs?Ggµûœùë‹‘£¯À¿)›ÔÑuÇ«¡`Œ%,Š"âwS8q7ž<ëPÒý ¦NaYÞv8#ÿ`.¸ëa.È[Â÷Þ#uÀ¶G÷<ž1øACÏãα_qÙ ·nr(þá{æÏņÃU¶ÿù%g½‰Cž}Ž#ßk÷ÈšÊG{Ÿ8ºì¡À @àÇñM¢älœÊ£Y°âÈS(þå{zmÏ «ž o|>*ÂA·¿À ;ò@ËrŽúêGŽ»áÕ;oÿûž§1Ðc'‘ k$•{Vö`ÑË_röˆátÏ›Aûû;pÜÉg“ƒ ¡ÞÀàsïå‚ésÔða8O<¥çŒéÖ~β _z;™ ˆT(9©•\|ðQœ˜™Y>•Þ¼ÄÇI<î'†v •܃ãçC×¾«GHzÊórPYì€Kf[÷u¬µÄâ†[¯¦ê­/È;è Ýó4ÛWÌþAÁ+ Æ§ä°+¤Óe‡›»Ž=Æ+í³€ý—/>Ï£Ù!ðLhÙ’_‚ÑcqS<ÔŒ¤ãûÕ‘„ ´fp<Ô׉6ŠÅª2Kš2€‚Ë/gJF¦¶›?Nbdzú%<”Ö‚Óã~øPAAa â/šìÇ7­ DEÉOGgç\™áܦLJO[=-û’1c˜µeû]}Uå¤U µ”ï€Uµàêüü­}ØGR—nßÍ«üî×ß~{µbýª+8ø´sÿë¾ñ‘Gûú¨LÖìô9ð?>N8PwÿIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/help-hint.png000066400000000000000000000017151417507262200303610ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<JIDATxڜԿëX†ñwí¤išööÜtlÛ¶m{æ#ŒmÛúilÛ¶mßc 6Ö{¦ÿ2z∠¡Ñå<÷¯Ìy¶ª_ñ?Â\Ÿ[4Ð0ìÞZø`Ò‹_+ómíÑÜ~"¯3õ<§Äk=ÁÛ¤ãêi‡Ýsñ#2÷Îaéà Êcü‚HœÂ7—)éê3ûáMñ|ü~m¡C¬ø«Êük÷)3'ˆ¿xáõµê{jiûÆÂGùu\6ù»ˆr› uå+Ô!4V÷£*D ø[X„Ó/ë°^©øå£ËÑr‹.LË}>Þp‹y?5N–Ð~u­²½mÓþœTRÁÏu@rÑ6P³¶­Êâ‘ÆøóðtÃ0’l ÔÖÕ@f½hÅ(˜ûØ•ø9Æ€qväžV…1ÍÈΧ…ööåóǶĤaÇÄ<œëÍH;18ç”ÏãÊp½£¯/óÔ\>1a¼r9ÔPµ… ûÆ?)üE¥;¼ÁOCN^"%Âb˜s9Lµ±ÃÖSu›æ_a$W’°ô?žRT|pòðz-=Jg!‚Ä•‘dN› òØYÕ‚q~M$בâÛ‹Æé>ywÒðϨà¿ê 7AžbvNH)aENº{óBµœi‚ˆJÇ#"þ·ó”®cZk®Ãü7;¿²q<ø2ß¼~ÞÚ]Šä'ó/@°"ì”jiYqu]üfÒ-FÓ7Õò™ª§sA'Õ²±óT³|‰ù&Ò¦’1p4ÔWCàÝCë´ 6 ÿmÔ}«-‚ýôÁœN)u R1·ŽD Qoï<4wxþ‡BøÏ«úx$2O¬óÙ£Ù2e„¿ÆÊíٌ¨”Ï£¾¾Y›@*i†&±®¨~GaéüÉ› \uä ½;¬éEÄ®Pð=šoEÌ O˜Ž~½† û˜Ä/zþPe—Êì8F½žaÿõ î¸þ”‘&Ù"…Ihm‘$)¢°„E[ÌŒáá¡I7hÒ°çÁXk~Š.†=÷ÜI’ÀZ¶˜Ä¤Çxæ¯EQôô*+¯²vOo/ÅqÜœçù Û·oßr FD`¿¬¼R­†¦6³††F °6yKHÈ»8†6ŠIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-image.png000066400000000000000000000017751417507262200310630ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<zIDATxÚ´”ð4GG_÷̾ClÛ¶mã¤Û¶mÛ¶mÛ¶ý÷âv:›íW¹‹ùªÖ;¿z53ÝbfüxJ¤€ÿ+5.2g&äŸfï™{€9çœsÁ'Ÿzê¢,Ë‘Þà—÷tÑõBHëõúò@\’¥ýÏmð§>Ý÷Ý8§Œ¿èÕús –¾Á”ÓÕ È,@nÊÀÀ¯Èsøòó„îeòRPL… É{èÀdB³ß Áß@Ú¤<\©}:E×äül¬Šfp-XxbÐ ïÀ=|õ˜õ†—‡L:D¯1%Dƒ@, xGý{Á;D5hŸ2غy0>¦O×$ßtW¡DI²aôŠw˜kžïiÌ3öâ0ã¤5žÿÜñОÅ&Iø.VB¨BÓC_ ;ï(ö=Æ{Ü© Šètúð7ùç& ‚™qõ+ ªHq„#¡C'ìü›Æ@»®´ÆÔ˜l"a¶©O®|óUÆëïä|= ¤ig40Í`ÆYfa¿ÃŽc¦™gå×^åÀ}v#„`”h÷TÄÚbXÛ$ÕãM¢´ZãÆ™ N_ßf5~MhqØ góî¸o±þ#Ë10õ7œzî¥\vÙe/Ÿõ Ðl6©øˆFE©U<¹V ‰òÃà… •JuÔ¸Ñh0Ó¬3²÷»°Îôoqøã{0å”SÚæ›o¾™½ÿ+ã(ŠÐHÉLˆ#âA¥/pµªg‰Åã®»îâùçŸ'9Ãý#ŒSÉèûa眤iz?ð0«Z`…QEñ&øªÒj{Õ*Yh\‹£>†ë¿½ž ŽÉˆ¸/'tŒþþ!;ozÖ¼v®úÍ^¸pº¹Ì5×\›<ûì³åyŽˆ ª£GÙˆ(ïñ‡yŽZ)güš ͺæŠóJˆßžƒËVyâðÖ[o ­½öÚ'þYÛ¼ôÒK7ZoÖõ&ØùüĘ̈8ÇÙ[{\U£Ñ®Ð·Ê ,ð*cû2 vÄq¼¨™½<œÛ×_›ÛTí‚Ô&ÛsÉF,é$Vð|qÌéÆÎ3ÎÀ\õ¨Þ6³¾< ÇBnBÍ×b`\ Pþýc*?ŽëЧ¹'CãQ†@Øyˆ¡ˆ:Š\lÄW€æ}CdyCŠ·Sª.IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/insert-text.png000066400000000000000000000014471417507262200307610ustar00rootroot00000000000000‰PNG  IHDRójœ sBITÛáOà pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<€PLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZhd…^€g | t ~ v v{ ‹ $‰$›'Ž,rÇ/š2vÉ2™4š<© <¯"CCD©%N´+SªS]žZm؃Èn‡Ç‡‹‹‹ŒŒŒŽŽŽË’Å“““–––šÏ›ÌœÏÎÙ ¡¡¡¡Ö¢Ö¤¤¤¤Ú§§§§Ú§Úž§Ü ªªª¬Ú­­­­Üš®®®¯¯¯°°°±±±²²²´´´µµµ¶¶¶···¸¸¸ºä¯¿ÙÿÊÎÓËÏÔÔâôÕÙߨÝãÜáçàâæâäèâæíçéìëëëëòúëóëïöÿðöÿòòòòô÷ò÷ÿóøÿôùÿõùõöùÿöúö÷úÿ÷ûö÷û÷øûÿøüøùüøùüùúüÿûýÿüýÿþþÿþÿÿÿÿÿÏΗz tRNS1469ÍÑÒÓÕÖÈŸ!IDATxÚeЃbAЩm]í­Ý FjÅ©mng?ý4›œÞa „€ÊX!§Ø2V”1ÇëóùåJ0:<:æËöžB Úz1 `÷Æ»¬©LQ©T}Øíúµ]ÝÕ__¶(Õ~*;£T ô\©¦/ø…^¦/øƒ^ò .ü«nën°âÕ|Lñ&_ä>O²¤»gãšÔÎðÉv;šHÏêã´Ùí§“ÉWöÛµÙÇØEŽ>qÓµ­k½ƒ£îB]šû£Õ3‹ËûëÛ»c tJÇ+ªV:»¦Š@'¿äû©f©ý/\œÙŸåsÍ, ÌJF:& À"¿4Z’+—:ÔdhÕ„0IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/list-add.png000066400000000000000000000015751417507262200301760ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<úIDATxÚ­”5”$7†?•ÔÓËÌkffff†ÐŒ±3;F­£%¯w„m$6!J#D)"èK>?Ö´ÆM½ÌÓQÇqùðÍSÓ鶛ͪéU¯?sÁ3ÎgŒÕ¶â%ž\Ê£”"#¡j«¤.æÞãG+Ô“ÞžZL+¡œMôüºõë—̇ ><áÔS˜H6±¾²4 `´BD0JpÊb]‚(øgâepBi¢-èb¢2Â͢-–xø‚Û˜ˆ¶]d’4aùÔ œDTÓˆV×x_Oà t@A(H=©Ø&l(nfÑØÌÖ*Tã”Á`¸Î¨’9‡â%¾9mä´N<­m4A`hB ¥ÿŽ}S g÷_^ðx¼ëÎ{B­)úMlª­üVñ"G"|˜àXhò$¢Ð"´š¸ñ¨kØÍ# Žl>ï×ÿ*ËoH=i'­Zü²‚17ÿ’_ÇNÔùf«¯eµÒd4±¯ÕÛ+îSû„ò÷ª¤DF+bå}ûÎ߯œ”Im b[;0±Â:K1.¡©¡E¡²™³&MV‹¸¨B)Š Uv žâ}Ó¶Ðm,ÛŠÖOÍà“¦´™Ë/¿\öÜmOëë.žØâ½G{Ã`0Dh›×ö÷÷ûýßíK\9-‹]‚©þk··úé§»ÿ †nÂÏìY‹IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/list-remove.png000066400000000000000000000007571417507262200307440ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<lIDATxÚ픃îA‡gUÛ j»Am÷î£Ü¨v£>B£nذ7®m]ÛÚ9=»™šs’owø‡˜ ü-ô‹ûÅ…amp ó:XÞçþáÃF.\xùé©SÃKø™¶` ߥý¿ù}Z3háB Òôáþ'NÜöÅ™W¯Î, ‡sµŠj8 S7&ý7˜Azz¤}¹À¦ ž0êÝ»Ñóçˆx›/~qñâüqË—£ùö-šïÞ} ¦F ¤óŒ‰QQ á7oð)Á¦µkAáðš¯KQ¯×‘}ö V¹ì%¾Ž”5DÓq`Þ(]a£TBêæM¤“Ið¤Ip‹E߯±n…C¡Ý£dœ±c%×Ic‘b†R 5Y&¼eëbôªU ÀÕKEwïÂøÐY¢2ÂkŽmϱMóûMù…ïËLæoiéÜl4žIzÏ4æWý¯[¿¸7ˆ?ÑŠè®ÂïIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-left.png000066400000000000000000000022161417507262200321600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxÚ”•€ÜJ†ÿ ÉžïjÛ¶mÛ¶mÛ¶mÛ¶mÛíÞ6“—ôÕÜ~‹ ¿Œ‡˜¦ hUòH\Z£¦Q&9vG–ªø ü Eþ} I³•vÓ(_•–ù÷yðþØâÖEvÆdsfDªD±êqáÆø.ç`*d!¡Ø,G¶OÝ^äÅ?‰›ØUV7ä¹ …dÌ„"°y÷ZÄã;‘ÖOÀ½+ŠD ¶óô½…&ù-®—sãÝ|Ãã%IBð?öóSqÓzzߊػú)¼Ïè ¼‹¯?f[ö7cU•;n[~Ç{êÐ+¬C× èªññ©}üéàxÅjÆF‚ttQ–×â×—I5#Žbˆóã% ÎWºZZx\˜5f/’¦Œô9âÁÍ10 óãËö¬xñ5×l®œÓÿ*¶éOúS;㣃ËE ®T'»cÁ´} 3.44¤M¥z™¨¨Ñ [rï ‡×H^Žå’Øœù™ßë8cÔvi4èS(B¿<ûl\ù<  ÙZ·uv–ai躎sû#ñøíYÆRð“ÓÏÇ]Hž(]3[ ‹·ûìöùÄ1g?‚a04Aá&dÝ—~‹«d›ÝÖ4pÁ~â¦n¬||Ï C7¡[rO EÒÿV\"ñDg±T³C‰,ªf›× ­Ü(±ŸÕrÎN …¡n¼}%ÁNEÒñæe$4MŒ÷Kñĉ[ºf‰ˆÝ™¦hò±Ñ`±üX£û¦‰ö+g1íç²Ã /ÁÂeÒÉ‚Ã9k=Kxúàõ¡šòýŸÄmJLtâ"^<ó%ŠˆÂ§E•Ä'Vk8žPHc?ñ ÍV ã –²ž2tM¾ò¸J••´DŽ$¢6}¢4aùxOÍb©&Ã'>·Ô¦hŠñy=RdˆËÒ  >ŸÚ9X0øÄË—Wˆàe$Ôô¼‡Ëïr³K%Ê»wÓ­\%RM£ëÆ —)ÝPLg2ÂÒ•B‚ƒ;(€áx’¨âƒ âÉ“W"ïYöÓ)aTv/v/U.o ïqæuqÀ$8{ô)ß÷Z“# ,*Xqƒ‘.»=ü&Ä AÆÆÕû¡ Î~ÏvéÿËW(U÷‰’G­] pvp¼nKîæ­ÇÂá` (:$K&~ú ïeìÚv·¯??¿ûò°t¿=„x‡«ÛÕ‹w¯.Y´/_¼~‹¿pîJ\¿rïïv—ùë±IH*ra¨O~Ò.]ÆŽD‰â"a¢8ˆ3*ž>~Ž[7ïãî‡8{ú²àˆ9v÷•áÝþé)œºwrEõ5“Õ÷]H¤êbK»_»ÏM–áΰÌšµçJý5œ5-.åomÄIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/object-rotate-right.png000066400000000000000000000022121417507262200323370ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<IDATxÚ”•˜ãj†¿4MÚNÚ±ç®m›]Û¶mÖ¶mÛ¶msìNÛø¿“®5xã|Ïy㊂” (Pj\ßBh…Q/:\ö=Ò€©Ð§ò9N¥’š•nÀ6†Ì?ìc=× iàŸgÜ»æ ÉAjUªN±¤ýÀ…åı­õA=b4PÝž¨š.qOë©~D'ÍÌœ—5†då’Õž>&h•àö…PÜ>•Gíºâ\õ½ø züÄZW½í¼}­G ÒÀÚ4^&P\H¢ ¸(X:F7ÚëÜîè9RkªWea_ÖÂt…UƒAÓdY¥øJî]ûŒ+GÃt`C#%qÿª—{˜|¤ …+@UUœ6w¯¼ÃóÇ¡è6ÄŠ$ƒÛîãÝóøs¬ÎÔñÀ£R¨{3PÕÉÓ [Ý¡( *BÃlصî–·@%ò §>a׆«"Ï«c«¿Åœ‰d  ”Ä¢LZûfTÄ#!އ§¯Œ„έeÛ.w}Dï\u‡hËí׺¹zEÍ¥CAmù£RW×ÏŸ+nËŽOðPg¡á± ùžÍf­×ahä-ê‹»yHͼó+Bãë™ã+µò/¨eáÌm³ô±êôLÊÊîüZ´ØIÿòºQz²-44zLv{ Él1ÂhbPµaý™ƒoN×É¿h‘”],%<ã)cNšÖµðàÌC¬õ²ë-æ< ±BÃU‡GløM¨~‘N˜T¿i%pœ&7V‹qïj8>½GL„Þ~B2y H™ ­¼C„=I8hßùDÑnšzðΰ«ínUóº—-W@¡jµÊ‚3»ä®É˜<±, Q”átHpÚÅ䥇]À™“WñêiÄÆS¦vøg£çL¦ÏŸ¼{´qíNDEÆàŸPpå[6íÁÓ‡oŸr¬qTšúqÕ¼#§ÙÄσ‹ËÇfÉšÙsdBPHÂ>Gàõ«xõê=îÝ~"Z ÁóÎ>åF2QMó¤ZþÉy%9¶‡$;ŠòrRIqú0´)†¥¹WÆ|‡e,ËN>üÍ×ñÖ ´×êBDyAIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/view-refresh.png000066400000000000000000000023601417507262200310740ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<mIDATxÚµ•c”[†÷)w÷ô´»‡q†±?ãrØ=¶Û¶mÛ¶mÛɯkÛê÷ž™¬•Ž“«Oq¿OíUUçð—ðô…¤Q õa…l{õŽÕßmÜ£ñ/Mz4ñÖíZ÷3g+ç–˦‘‡"ÍÅìˆyºX(¤ÿbÿ/šôk‚ŒÙè¶­ˆa§‡aÐÁAè°¦b'Ęoüš¥Ó8J 3§*Ë¥]¯LxåÝÇÄ”Jªœ'î mâ-[U†ÁÇ?“Ї´ÐÌ+f×Å,vóµÉ¯ÁZnÁcb%[ÜÛ¸wctÚÞ Ývw{ˆž{z¢û®î]ï±§Š–!mN ºïîK‰éa±–+%» Þò5åhµ¾U%­7´Æ«c_E65 ¥j<\….4èÝ+ ÐjS+ïa.ö÷‰)ƒô†tÝ×1c³8§’Ô9©. K`ãHq‚W‰—¼Ç,•A+ÓðŸÿAÎ:^¿–³š³2¦"£Ol*Rû‡–†À=Ã}g¡b"¸¥¯Ì™jVô í¥¤èSå¶r‚øÐ†õaøç’½–gVp–¸¹ØÏ'6çè„wÃÿÆü¯’°Ža`ñ j’ô•˜$ZúÀ ÔXu‹oJ=° ÕWÃÿÖóÜ ÎüÿÁ¿Ààû¥iïFwFÓM+©xŸJœ%EùˆT“…ËÒ ¶S6Ô=YM÷7E“MPkV-XûZ¡eË>±–¤üÖ) ]"Þ9ä¡ ±—¿ßìGÄRp¾õc1W€”+AΑ dIÓ¤rªc¡ºº²–35AþAKÓ`È0@Ÿ§ÔdÙËÜ>ñ£Ð "s²"Û2t¢µH÷ð}_ÇÒû¼;PJ9] ~å Ä$¶öib–H‘–b½S*LJª SÝ’lÏѳ‡Äü]Ö%I ’{RJÐOP Ï’¿a ä~¬›x “<ÂfÃ(%F$5Ƴš<ã2õÔ Ųp_,§ }ýRP'.Là…ÐM–2ÁÄ¿²ú9¹ì”HÿàÂnZ²t3pq“s¶a€iºV¢›,ÇðLÓ€®ÆZjÉ'æïÙÄ_Ç7úî2Ø8‚Æ¥<€€9FD-q!°¯ö6†_l¥ú_;QoaÀGaKíW«-´læ5“ÌÓµ®Žé†LK™®ùcÓ&%Q®)GóÊã§©pÍñ"r¹ W¢ñ†`4ØÈ©8âׂ>ã÷.W_hY2Ï4ÞÖÊ0—R©Ácâ D°+´‹ ¶éz„Î7!|™ סþö„r æIküØŽzüZ£5AŸG-wž¯ÙÛvˆÜ´’ÒH{¢˜¿Càa{e†_§8PwenBØ;B/›àºãW ?®¼öïõÕQ£›õKæ¡#KÁÏ]AÈCñÆ<õ#c[ ¦èQ{³¶ËzÞUàºjDÍ.z+ÐgÊŸòfÚst/¾4åÊíx7k­ùº»,‡}Cyô¥@÷¦Äö›ò.-ÏZóþ~‡Áʽƒk IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/window-close.png000066400000000000000000000022771417507262200311070ustar00rootroot00000000000000‰PNG  IHDRÄ´l; pHYs × ×B(›xtIME× 6Ô iªbKGDÿÿÿ ½§“LIDATxÚ…Õ”ëÚà/IÛ™Žu}mÛ¶mÛ6žmÛ¶m[Ç6ÚQ™4yG ×Ûüþ½¸¯’ž¡m€]#¦#—±1áPò éåààõìq_žs ä£H¸¹ÆÍ¦&͘ß&¼o_}3É«ÂÒ1‘׸c ¯/7çŒ3L:ê(]Ó§†šÃÃ6üå/–~ë[Ö,X Æo\ÿó_~ÞI|­‹ãç|°]o¼Q[OÏ‹¢gHÓÔÊþÐ?ûYå$ÙØàìÇùý‹àÓÈŸÀ—{9gÎ~ûÙéª+„Q ²²í]–Mÿü§úÓ6eÙú ‡?ÍbˆÁuÜÒÍS{{͹ðq<¢}§Œ¯œ/ˆÇiV¤µqÉø˜ÊÆMò3f]ºT{G‡|½®ºvmgÌ^>³‚,‚Ké™Å‡èž~ྒÞL÷1'šyÑ5ÂA«~óm…°b³ª¼i½Â~Ûù¦[µÍ˜aÑ7¾¡»»[}Ñ"µ4=ƒ?þ”!‚=8»È”® PÜ!gttŽ9»÷9Äô«îµlÍR«Ö.ì}€ÝoºC†:¦MUÍZârIOON‚6nB!:ƒúØ·7GçаξԿ~²ù%; gò ÝSf w˜©Üäð{ž„‘ÚȰoßz™®Åÿ­Z+^¿I‚“k¼#@áüvˆ'v1¸…¡@«;ïï»ùÜ×Ì9äP)ûÒMg›²úOú*‰xCª±‘á&ëÉV°{ˆ¨@QŽ ²¹f:ŠMûÍ.ùüÝg[=.€,M½ÿº V~cêä¦B*ßOÔA„ZËyÿ|ãÇ×Á—Þ„˜ÖAW£LƒÎi;ÁpóKÄ\B]¨ã™$éKoC4oL8ºÅ N™HÆÐ¾9azß0}_üDªwO¿1kC›f–Ü…éýûEO%´W¯^©F4+ðüá JFðäI“`M™‚+aNÿ0=,QdŠ ¸‡(TÖJf¸aŒ™»P@ÒSÿÎVãÉÁÄS‡šáÆul)°'w“‚è@3Ü´Übn˜¤’ˆT6<HÅÏ ÙŽo_¿É-Ü´iS¨³E¤x‡ˆ²ï¼TI¦Þã‚ü|Œ1JT]íàܹs¯KÕ}–mvý@»§6Qè±ãÇœœ­ÜEÍó<‰}§IÛ:ú(A¾ïS†¡Ì/_¾¤ëªªJÊÍÝeóݹNuÒ®»4u§CvË:??? ­êÞ½û5‚“É$¹®KeŽ+@Áš—·»Š÷T@Õ8™Á&‰Š‹‹iß¾½U}ûö]e‚Fô枈_S>÷nB}o¥GÝÅ…“ºIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-in.png000066400000000000000000000021611417507262200300550ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ òÕCñIDATxÚ¤Óc´ëJà=™ 6.žmÛ¶mÛ¶mÛ¶k³8®™:u›tæÙïf|kÍßÙ†± ”Âh±ð?<Þåë8΋[­æ¶ù‚4™çQQÚÓ¦ý8ín]|ñÅðàƒ‚ÿE^\â>)WªWL›-$S¨(¹\Twt¹ Oì·ßAçÞu×­pÕU×îãp8ðíGß.Þ|§¶—'»íD!D6è…v©ÜD”2(!æðß}mêu iÇò ‚ßÍ_0ï¬ió·Ýc=«F‹Ej*$+h…Ô~‡žìÒ›4ñ6¥)£É’Þq÷’ù†v÷O>ûøØQõ˜Pt'hÝ)™â&¨Ê°L•2PYuíM\˜‡ æŽd²a’ÐäA­Ð|^WÍøØÀ3”Öô®¼r¥¡PQgBf7äàÁW­UKÛÂy¦¸øËãŒurOô»9>û '×¥š±Ùl\+SUJ}‰f`Ïí¬üAûµ{Ïêë'õFs‡ÝöÛ`ûÃ.Ý‹"–¦Bžî}ùaC®"­ ñ~\«Öq[éPº)vŪòÛß½õ@š ¿ñ™iŸÍ|ïþ{Š& À†ªòTƒžeT«µ¶j+/Yì׳-[Géðƒb;äͶ|õŽ7 àýâÓ?€…Þ,XÔ€å˵,cTj{©$ùU?~ù¥Wüf®^jH9‡‘AÒ!<‹€1Y&4´š<ÄÉ@—”ÏO’+‰Èwß|ŸSýX …¯;j a÷#Þ´Q\·°EñwŸ?*!„Z¦rGW.çÉF±…ïîQ,Igöòø^xöõDM¿UŽÛ[뭯󬶊&¤ÁXt1ÀóVˆÉ[|ûæ³Ç,þ>øî;ì*0üN§ÓuÞ{ïƒÏºœ‚KN.¼$-9s­³VãW âÛÌøvÚA³?zîøl|8tÖYçlÕÝÓuË1P0RËøïx§ÛÕ»Ù&ž!Üö‚ Ø¥“nµÛß%“â#K/]ÛãõÌ–å6úòË/á7ÞXÝïëAÁh´¿ëºü²ËR¹LgÌœN®¹ö* Ì0QÇ!Øôî{î.–ËeòÕ×_‘ /¾`˜ÿéñèB@£Ñd~üáÇ¥+¯²òÑ»ì² b²›Ì†mnÓ«ãþøŠ¢P–ec‹-Ь·þzn¶Ùæ!´ªF+ؽß—ãþøŸI’442<"o±å;­¹Æ”R²%Ëa(8܇abäd2¹LÅ)Ûo¿ÃFv‡ƒV*•ìOÛ·÷à6fÊÁÛ·od~ÒÖÖ^ôÉWsíÝþT-‚_IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-original.png000066400000000000000000000022031417507262200312500ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ!B©gÓIDATxÚ´””Y@_¡{šã‰mÛ¶mÛ¶m[GËØ¶m'ömÿN­'÷óè~¾ß þB0 ƒA?’ ð>¯¿$MÓ‰£Ìp$º¿fÍÚ»;¤äÎñiâ{÷ï—KII¹sáú#2.>MJŒG,‡sv§‡sØÍ’’âÅеzuï™úQba§ç.œ/Ÿãõ³t«­O·6d„¢i@ˆåƳ\vÄù+·qÖ›•!ºT·]Òs%åÿƒüc"ÿå«—7ï¿u™Ú´jÂ1\ ,†ã4€å0 ‰cD|ÕêÕå·îU2%r'[š ïºÕkWÃ厝ïí{Å ž©:PHé+ƒ£$0©Û”•Ï Àd<¹"jó†EEU0€s|~¯öqiŠævL€Ä\ºtAå&Šºyòå25âNøBL@ͺñërº¨†ÉI‰:Ší~æBZ‹{GV”ßýÓ¾‚ðˆ?&ùòååŸ>{z­zùBsî¦GžHJL&ÃE•„X†0Y~…¬€‹Æ×nf6y|jKÇׯ^77›Ìæ®Ý:AêÛ´÷îX¸29%©l“Æ O²òBxBÑÚ÷ò—,›''™ˆCSHóüNcÍ«L¿~ƒsêôZcff†eë–íß»ch4ÊSQÊqïÞƒ]qÞä×=,o~~®¶êᙲi¯x̺Œ¥'Oœ™˜œ’\qúô †.¤PÈË=öâ|,8Žc¿/Lüq²sçN Y¾\ùq—._BV›•ÿá§ïQ÷ž]¿wÇÿNŸÂðkû={ö o·ÛS5j¤^ýzµ‹/!|ÃFøô¬Ì¬×ïZ¯×?v8%Z´hQ:gÎ\ñ|·`8pΨ7š¾D,IMM½EÓtã6mÛä‰U*Ø ,­êû)S'ùáK BJΛ7Ï(Ü÷•kWÐÔé“uð5‹ÅBôÖÙ´iS(K•ÅìÛ¿Wx| ¤R)™¿Ìyë¶­[Ú;;RA©Ï!ùÖh‚ÖIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/actions/zoom-out.png000066400000000000000000000021261417507262200302570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ,NÍqnÖIDATxÚ¤Ô˜$9à/Iil¬mÛ¶÷áÿŸmÛζµ¶mÛOkûÚvW§*uuöð-#N>h MÓ ¡0ü £ÉÐ3 ãõ¸Ê+**FCueEù¥/Ož8Ùt=öÔÁßÞ‡O\¼Õî Err²µü¼|æô†·Ç™¼\عMþçS¦ÎzàÍ7_gŸ}©a{=Ž= ×2eâxÚªES™JU`À0²:=d÷ÎmÙÝZ ÿÝÍóTã²ò+÷ž¾l}Ĩ1~Aä“C!,…i ¦†d™qᘜyúð®v}»Ü5i”eð8øUŠ*o0©Ø‘b8†Tˆ"‚£„G1„AÆzÆcDepiÈÇJ«$Þ€ÿ̘€î³Ï?íë ¡ûºô`Gç.i)Ù Ò‰-_ĶÛõÑ+WN¡qKÖ œ?¾¯_—N¥ß_¼p)üŸ5ÎÍÉên ¥‚òµ¤aÞ¤aÔéS:öl§)ªï*MÒ”œJ1j­:Ó¦Ò|jC¤LWHöŒzÀÿ™q4'LËÐ* WGs‚<·sw&@ˆ$y0 €`ýÿZ™µÊÎä9 "‘XªÎ>>yúTÙÀ‘Óòm ®ÚÕr©LO'^î§~f(‰TP4œ¡©Ì›Î“.jÜU†Êê\ ¾_X–/&‚Ñ€»0›àB=± bÀ€–†€feB2ƒ@RÂÀJ jôúJ•¨Í²{ços§Õš,/Þ5>sJÇ\aÏ¥F¼ˆUˆ‹D£Dèö£þÖS˦ÃÑû tŒ1íàCW'OÞ·¬²v -ÙÑ•ž†”âB’ÊÂH(@[ˆÑÀ'ŒÜ¾è³ÿ×^>\¶iã¶—êÎøWéééêªUk¶¶-‘Š©íøãVS°ÈãË* '2Ú ö‘ûvïŸdí7¹¯U™žzú™á-[¶˜K8d0ͦÅ _˜ßnÄÐAw #ŠR¾BU§Lé^›Ýõñùs{ÔjÅã1´eËX°`A—šêÚZ„4ùÓñg­ŸyúUíØñ£ì™gŸ éïr ¹ôFúeÐ;ï¾ ”²={÷²G¤ú׉Ð<¢(ý2}ᢅJ4e›·lÒî¾÷Î=kn㩪ªñh9he0Š}‹}ŠÇÌ'E¦~˯cµd¤Dt\’|!M$+Ëá€òs¥¿‚ (ʇ‹MŽFÔHÌÒY.бGê'÷vŽîÒH¹ PVkü»„À=þý Ö jiTLÔ6ÀíÛi·µ$óΧwf–vû›»mÉë¿>ô}õÐrÊWκo¡Ê^å¨ÂY³b¤‚k€ŽI£l4ùƳm-c['m›Û³…€p¯˜%Í:ó´M†TÀèoZo~ Xë»Óm €½ÌþÌnLMCZ eGJh  6Ümø `‹ç–î­ÃÉ¿ —š€šU5Ìì¼ ?ðcÊWwGuµVD!£@SPù¯Pù|ùAùs@öÅÕ.2¶3ºk´v0`€áºa»a< ‰Ò¤jœó‚FáUÑ @©’kþNé“ɦL˜â=ŠܘxPÍRµªÏ’5Žw-8ð¤¼JÞé­/ÓÐâ‰×‰õ ¥|eæö„Ûso/#ˆŒ€Œ°ŒØ0?i‹ôžô" ýV{]ËC¶Œ!³(Fà>ÿ®0Uœ ˆè¡ÒN@Ì•ˆä›uNç-]@f:/NìNíµ‚Ãӂë¶ÏŸ/NAMÁ=@·R—¤Ëq´˜ÆTÓ @þ@±\!“¯™yjÆïÓà ^º`,A$ÌÚ¢Ù’Có~HùJàè„è´ès1/⋈?ÇÆˆFåÂõÌÎ›Ú ú̀ƣ³C7Öa6+,ùÖ\ ›Ñ½°{'`{»[Ý}ÖY{Y…Ô|—W'Ù)bºcþŒ9xÑ<›¿ïˆ!¾;F…MI¨X£ã™£0U›6×:z¤?É#5÷lõÑ_€ìK‡Büîgž–U¨×t1€çàeÒ6ÞS¾àj?Á/DU"ˆß:®w¬[ð©´TºQbØg¯gi ¥‡8Bls.ÇlÙGñõñµñi˳(‰~vh¾m|’_ÎßU}²g¾=’üèZoa=N*…³cš-@©ò{õ—_S{ɰþÖý«=,á×··Ü›ÜÈÆz€3Ž3³ ¨oas\@Ö§>ùŒS <žÉ¾ÇiÃÅFsóܶ‰OÎà§7¹ùÀ:¬Kø¨ðCóùŸsÿ2‡ òró‚/TÑ=ÏÔQ:£ ¸än}õ“ˆ'!OBsì=—{®õ$ rô×̸Ä_€óÛ²¥Nª¬»Ò¸¸s®"þî*8ªâXA.9çÕ#–"³es[¶à#O¨îÈ—<$1ɪ:’!X*œ$š…9¢;"žØÕ1[Ý .RŸÝG$ŽN =íñ’AöÕ%.Åšâ†GIµÃDZ&uŒ‘M#c÷•úÍ¡(üÎ"ªW=1:~æ¼ßøŸ&y°ã 4VžeoÓw:L#ÈÇÝuݤ-\ÛvÒ¶0&HC*:%lÉ>‰ÐôqÓt®?œþpÒÿJ.Ÿo<Ï;/+[2÷s£ç®ˆóìm¾âuB‰ßÔ”Q¹¼òÝÊPú´ò˜òyåC âtÓéòÓ?EhLCL3}Xßé²ítLµO°OµÏ@ ^¥p„“62<³Ù\iþ ÐLÕŒÓxØSÚ+ÛŸ´‹ÅôZcg]PyÙUâªßÕ%GÖÆ¹ÆùÅ…E]r‘¸¨\ôã'ÓÓÒ‚\eY# t6_殬]çh+˜+ÒWœ#ˆ0y˜!œî[®®p~UùêK ²0TJ ÅÖÍ ‹rˆòm~JË-§ZŠJ›HYƒXÓŽï¼Â¸2íÊ{ëgí¶ÇkÏ›sJÍ 6ƒåÁìÝnï€í‡p[(û¯æ(N;%ñö€ÿŽ´¾š˜OI~øUø•ÉÄk¸}–?(ÿüÁi公¶Bë¿DÉ_'I>4Ñëº×e¯<ϺÞæ 2´w×W;>£¤_¹˜AI÷N¤¤­%^ò{"%áß[Ó Ú ûù/@¥i!âo4"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/categories/000077500000000000000000000000001417507262200264445ustar00rootroot00000000000000applications-education-language.png000066400000000000000000000024431417507262200353160ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/categories‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î< IDATxÚµ•C€´É€ŸÂçiLµ½Û¶ÎÑ9¾Ä¹Çvrй¶m{ÿ™ßj÷ǪJÇvò”Í÷}…sŽÿ’ÿà™ºF_ù±§Uü‹¼û‡»£$òçâ(˜K¢ÀöiçŸúþžÑ¹oð;~s«oþúc¦2Î’K… vø¾jK¥•çù ÍF2zA+¹šFk›‹ñDÖ’$$OsªÊÑj&|燗›í=Ý[œŠ¾[žû–Ïk€,3SYÿpv{:ia‹2jâ‡RBX¤L‡‚šHqFQ ­çPZÒlÄj{oç°5àóòÙÏ~¶*L¼Ú<ÆIJS¢|!}4%Mϰ§cfZ1‰ÈÑ6eBfl4ãùèužF Ö.ˆ1²³þÆPê@© €h'#j¡äy§Ï²:S׆qÚ-,Ù`D+–<ûè„"¯ *¨Ûi^àœkAˆ¦<ú ž,¼ÆLx8!°NpìBÀLÃÃÓš•ÙîêCžÑÏ-»;%W?ÐÁ÷‡sA=ÒdiŽu'!ÄÒ3g¥ÑL¿×E¤Òˆ{:† ¹»Ë‘Ó¶,xÍY->ðê£8f>¢²‹`¶•`ªœC‡:H!qR€?1#•çÍŠj@>Ž'’Jðäãfé• iK^ù¤eNZM¸ú®=DQÈÊLÂt,µ Ërêžáp»ÎáœéÍjI¹$œÁå=¼F#—çè§%Ç-78z±ÆÙGMòáïÜÆÆ´Ç1kÓ”F°ëàÌz8!ŒFlïë1L Ð Ò zI*WlH%‘Ò’w24‘2Ç-ÆÔËLÃgÏ@ò¤— Ÿ—=iQn±i•8ô8÷úÇ~óhÇÎìè+…E*µá̺ÃpÆ'©Ê kKŒ)¸âŽm–¦kX'ùü¹;XXœeoÏpò;Ìtsâ7ßði§ÔÆ .½k/÷‰ÃƒÏã± …ôæü‰&1åoVÅÁŽvÆËŸ±Žz¼Ë¡TD!=ú(Ë5ÉÖÁÏ?s‰‰ÈckèsÕõ÷ã„ǰ’J!´Ož5‡~Ó÷ Yîˆk*ŒJøÂy[¼èìy6—"_ÇYǯЪ¬/40ÊgWqîe·s¨3ááФ6éƒÓÒ"'Ã@#˜ªBEáèd†_^ó E:be:¤3,¹õ‘öøJ*ÏÜx÷7Üþ0ÖiœøM€ß¥BG-ÝQ€r¬‡ò|øàçêêº ƒøßÙ@dc= ?Ý©KWC7¹D úB[% SÐ62± ¤RiCCÃ;<ïΘ1cd%%%ñºÿ;P¥7Š&.”²ñþPMQ—€¨‘1I\ÿS®]»2lذQølE999õoß¾]€²áôåÜîf½ R1 Wr<¾æw•ft1cÆS:~‰øQÅ\¬ÄöÖSš÷?8±[3^IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/devices/000077500000000000000000000000001417507262200257415ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/devices/camera-photo.png000066400000000000000000000007051417507262200310300ustar00rootroot00000000000000‰PNG  IHDRn½¤°sBITUìF pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<DIDATxÚÌ̆TQÀñß9wêžÝÕD30` ²»"`‚}ŒÐô@=@O lÐZʆ̘¦4nªvu§ÊœnÇA Ð÷÷}8~NÈþ}¢ÿ O¦¹ÍÓ|<ù3ÙÓÆÀßçýá°ÇAcßÐŽë ys¿9ð [:sÉ[CQ(e3 ­-#ÁªS—|tU]('’›j_½òÜÜ)"+µäƒ±¹PšIÆ^zÔíØ¶7²zT²¾‹B£…=O<ôØ‘»½0’Z”,)ü‹VÕÑûÝVZKØü¼¦ ÍõÝó Û¾9¿ãZeÇgWeלÚrÛ³®Öž Î’J߉ÝBWœ™šx&F®—w"d[£²ô©tîÈ µÖeûn¹p®Aw’…×’FXÇ®Ÿ“›÷¨ÿ€ð%DñÇ·]D¤ ¶· C1§³n¼ÈëDIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/devices/scanner.png000066400000000000000000000015071417507262200301030ustar00rootroot00000000000000‰PNG  IHDRÄ´l;IDATxÚì”5¸ÄT…Ï•xòtw‡ ·÷–öõ¸»Tx_ÓÑâîT¸»»¯kr³ò-ôtÌ{óì$óÏL2‰ªª ÿ…éÅÁÿ`‹¹ýôÓOG)¥®i­ScLB éã†j¨ 9>GŸ”e9¢œs}jŸzß®»îú&hòð¾øâ‹m&¾ÎÄ}@#žçÁZ+Ç ƒÁ‚¢(þ¡yžE=zÿý÷ÿS}üñÇšG˜tVÌ÷}$I"ºZ„¶„1ÓéTtá<÷s.°Ýn÷F&œE0è`碓ÉD’Ó4Ç”._€PñU8¯=w4]g?ýôÓ‡{©V«ÝôÅO¿ŸZTšYhÅZÁ#Å—"uv;A0ÀFhÑXÕFßÃxKîñ|vþʳ_ývRn|ø; CŽo#D€ƒK¸ c…+ØmŽ^¯‡mãpÄvüìÑÇ}êî»ï ÚÅ_lî¾ûî[Éõ:¢ m„G`!-òÙdŒÙánÚG–ºwvvôSO=U øä“O®¹ ®ûµMi†!"Rº•SG(µ*©yùPóó¹—"EX_í–eÙ:€–€9昃[*Pyº‰žõ¥\4.+ñŠ”²tÒµFVVÏ÷YØ2{æ™gà5×ëõC>ÓºUÈ+µ'$wÙ"ÿgÙ m PbÕ7(<ƒŽaÏ=÷MlÕvC«Õú~ù­¸÷Þ{×šÍæ…LÞ]l¼É1÷;æ±G˜|„xÞ…a8][[чœ¦MÆŸ¼ægNúɇ~øÀ­£ã ÞdÉ’%Œ‡f|ñâ÷oß@ÉìB™ÿæææÿãããqj­šà pä!^—²IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/emblems/000077500000000000000000000000001417507262200257435ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/emblems/emblem-important.png000066400000000000000000000020121417507262200317200ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<‡IDATxÚ|•°ìV‡¿s²|¸~¶mûkkÌÚíØjÇSÚ±Þ°Ö¨¶m»]f/²›œsúO6¹sßÕæË/ü"åœc¦z9çõ7 ûôi~)yxâDd|¦©iÅ"ìUp;pGïÞ=ý‹.¿œB?ªX$ò}Úüÿæ[4Þ|3PðŠ›†¦2«øÕœwx~ÑEõ žw.åå+±Á(6ŒpÖ€‘T óEÂÊÔŸyŽê‹/|¯àÜC¡ù~Zñk9o½‚·VÞ}×PßáÃØvg 6 “tQ‘/k’}ZF|ÿ>øPEá.ÜÚ·Ï¿žó†bé²®[ß{ðNd›\<62Ê¢Ûn'«?gR.'Ç"d(Ì¿ÿòÏc6pnõÞŽmjÒÒðÈàéSëçoßñ}aXhaZ-FkU¬µ²]Á ûB ë õ:*_ çä‰> ·§>x;ïõxž¾hþ¾}˜¦Ÿ …á8}‚Z cÌ8A½‘ÆÆÓlPZ³­õŸtO.µ_R\µª¤Ëe9¹‰3%' zÒÓ¬‘XEr\ Ý)‹ˆkÞÁƒýcï¼}s*v×”—.Áù"éÊÖ;~ë,qÛ÷qž×=/+róç£a_W¬ØJØÁÊв^f©„v´-\€Ö$“ID´,³8rßns9x;ì³ýöð&M¶?þˆN`3«Ørã¨Í™¾8Ð<7æT(Ñ}T,Éç¾(Ò,»§#ýÖ[ˆ®\‰ü3Ï ùåÀ.»È˜Ž?nF Ò ñ° !€z½ȶX„ÿ÷ߨ0ó³Ô<‚mHòz8cF{L0T¶â¯ÜÌæH¶õ>ùë¾ûuŽ£:ýt¨£Ž²Þî¹×^XíûhɼÑ`E.s‰ÎÂ…Ç®üöÛØúÑGذ㎸€MSœ ‚Ðnµ0eÊ”ÜC?|€¥c[aŒ5·ßœ5 ÕwßEƒš»îB‡‹x2¿aˆg·âû˜:ujþÑÇ¿Ó÷ý?„c‚ô®òÜs¨ýþ;4™+¯D—çÔ’%Šj¥‚3fä|øá»éÿï:,@ÊÔjøcÔét O; ±Ûo‡‘ËBeáZµŠé„Þ{ÿý÷Að‹¸‚¡1–þ“OBŸw4÷»ûî+o˜|íg3NÚÌvòäÉù{î»ï6õç‘Ð1ß<)1rÌ1ȲôËNžt’õÜ6‰ì³÷ÞøîûïswÝsÏÝA‡þ5]kü˜˜Öúõ¦øÕW¦¶q£¡†¥šB>oV¬X¾úê«kµÖ—ÐèîeÛƒ:…Š(d’M8ÖŸåBj9¢Oü{&O_Pi]IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/mimetypes/text-plain.png000066400000000000000000000016311417507262200311270ustar00rootroot00000000000000‰PNG  IHDRójœ sRGB®Îé pHYs „ „ªâcytIMEÛ 3 Ú·ªPLTE µµµ™˜˜›ššžœœ®­­¡¡¡¢¡¡¬¬¬äââæääÿÿÿ +++777:::???@??@@@DDDMMMPPPQQQVVV[[[mmmxxx………‹‹‹™™™œœœ£££¦¦¦©©©ªªª´´´¸¸¸ÁÁÁÂÁÁÄÄÄÅÅÅÆÆÆÇÆÆÈÈÈÉÈÈÊÊÊÍÌÌÏÎÎÒÒÒÓÓÓÔÒÒÔÓÓÔÔÔÕÔÔÕÕÕÖÕÕÖÖÖ×ÖÖ××ר××ÙÙÙÚÙÙÚÚÚÛÙÙÛÛÛÜÜÜßßßàààáááâááâââãããäääåããåääçååçææçççèççêééëëëëìììììïîîðîîðïïñïïòððòññóòòôòòôóóôôôõóóõôôõõõöõõ÷÷÷ø÷÷øøøùøøùùùú÷÷úùùúúúûúúûûûüûûüüüüýýýüüýýýþýýþþþÿÿÿº§tRNS"FHKLMNOPQSUXZìïôõõõööþþþþîßGbKGD âÕ>IDATxÚ]‘ƒš\1@SÛÖ¸v§ÚÛ¶mÛ6þg^ßÜoöÄ'Nºpãö.7. #îÃyîë0*Uêõf«Õª·êÕZœê¿ÉÔZ- ­9"‹zÓOçÓéz5]̆Ó¡¡ïrØ}&‡-`0»Ý.B†­–Ûíf½Z ¡G€GlfXÃw kšLþd¡¼•’‹þÅÖÒ+ ¼|t™¸Î:ÀSÚBX¼yv‹hMa\üºùWO®¢3 ÝùbØÎèÿo‹Ñ×Öƒ˜Ýì•òÃëç7ÖŸ`<VbêýÉÓˆÔÐsZuFWøø:¶øÓ¹‡×ÉÅ;wO¹u‰”‡v7u_=IEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/mimetypes/x-office-document.png000066400000000000000000000013511417507262200323550ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<çPLTE¶¶¶àààÞÝÝßßß¼¼¼ßßß»»»ÓÒÒÄÄÄBBBñððÉÇÇDBBðïïÊÈÈFFFÞÝÝÌÊÊKJJØ××ÄÃÃGFF­­­ÜÜÜÚÙÙÙØØÖÖÖÔÓÓ¾½½888àßßîììðîîñïïëêêñððèèèðïïòññåääóòòñññôóóãããôôôõõõåååòòòêêêôõõïîîõôôíììëëëïïïçççàààðððóóóßßß×××ÒÒÒéééíííäääùùùöõõßÞÞáááÛÚÚçææÿÿÿ¤Ky#tRNS8±±±VüJþ« þµþµþ®þ¥;¶¸¸¸·}èåï-bKGDL÷oó pHYs7]7]€F]ÁIDATxÚmÐUbÄ àк»ßÿ õÞa÷©îÞ.aˆ{ò!#¡}„ˆŽ“s«½¶Ó¸d(ßbQPñ–¾É’Yz98›0ÈÃ{Sk‰6#q›TÚûgºÆïjïOªÌÃã…yŽñwâÝ¢ Gæ§£[ÄÇüXÄp *êÂÌŸÑ+WRFÖ ¥†O³ô®/”úˆ›àe«x¾¾›…EOœóM©øvÓâ\©'0Ó —6u©Ô}jÀ6Qü,ŽÓQ*'ŒeKy2[©Ý\%tEXtdate:create2014-12-02T12:08:28+01:00—Yî­%tEXtdate:modify2014-12-02T12:08:28+01:00æVIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/places/000077500000000000000000000000001417507262200255665ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/22x22/places/user-trash.png000066400000000000000000000020121417507262200303640ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®Îé pHYsnºnºÖÞ±tIMEÛ Í2¹èbKGDÿÿÿ ½§“ŠIDATxÚ¥•Õ’37…fÌ^Þ­Ãxfffæä.û$a¼>@à*ÌÌÌ̦ÙàŽZª ̆ÿSÕ5|úë–ÜPzúùqÜQGàí!aôÁÓ­Àó¶«T*‡ÎÌLïcÛöŽDÔH⸖$ J¥’kÛ…„ø&Š¢wS™¾âúþ§ÝÖÐ#Wf^o¾ó>Øw/<ùÜ S¾ëÜ7ì÷™žšj6 ÌÏσÇ1Æã1<ÏÃÄÄjµšŽz½Žµµ5üðýwƒB¥öŠU,\}ÂQGÙ³À¦¬Ùé™ïÞzí•ÙTQ‘”¨V«úcE E×uuH)ÁäŽã(h^¯‡Ï>û¬ÅɹgŸ{þQس#Q)gwÜq'zìч“•ËeM”¦)|ß×dl\,Q(´iøê«¯tœ}îy4?§K4†ÙñÙgž‘»î¾‡þè¡À»ï¾‹ÉÉILMMAõYSû*aAs26m·Ûèt»8é¤S úŒJ¹„Vcí™C!ŽBtÚ-,..‚Å„KKKØØC-d’jãrµ¢z=‰N«‰ ŒðÞö:62eƺ´¼*•*fææ`Y6Êêœ1T…!¶,­€Š>Ñ”J¤œñ_ˆ@à¯) s‘ IØTêsãª3Yø7ІyII*Rc”«ØÂVˆ(ÕÛO˜ øúï‰è_!%‡i‘ÐÆ›‰uæ4Õ¹>ÿ•Ì7†Ø6Feœ™ó¢°Äß;ëÊ$IÀóùwÏ6ÌLùÈâÆ_Jd0d.m‹ýјgBÖ†,Þ³Qô—ý¿'6«·©< óÆú<Žb,-má$\êŸö˜RÓK`s+.¸àÊ·‚‡¹'±¼¼¢î§(W*°, ÐI„!–’Ï`Ù6Ï?_ýõ5ÊÌ9$χ”RÉ~¿‡Þ ‡È4% aúø>õ~þJ1«Òï÷ÝvÚ©® I 6ͪÈÈ¥Š Š±¾²†Xݳ ôì ¤øêë¯C3* F+wÜqǹ~øá’ê·0ôdz®Â$Iô9©s&5IBDa»P}øáê×_w1€ŸÌRþQíK/½ôÕó·W0ë:^Åý'‰úžãbÃq×s×~úñ§žzâñ§Þyçí»|›ôyÕößÿ…]vÙ¥Eq#ŒÂ9ê)ÓJòù²J0úêË/Ãáp €‹œ~LKz3vPIúIEND®B`‚gImageReader-3.4.0/packaging/win32/skel/share/icons/hicolor/index.theme000066400000000000000000000647271417507262200257130ustar00rootroot00000000000000[Icon Theme] Name=Hicolor Comment=Fallback icon theme Hidden=true Directories=16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/filesystems,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,16x16/stock/chart,16x16/stock/code,16x16/stock/data,16x16/stock/form,16x16/stock/image,16x16/stock/io,16x16/stock/media,16x16/stock/navigation,16x16/stock/net,16x16/stock/object,16x16/stock/table,16x16/stock/text,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/filesystems,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,22x22/stock/chart,22x22/stock/code,22x22/stock/data,22x22/stock/form,22x22/stock/image,22x22/stock/io,22x22/stock/media,22x22/stock/navigation,22x22/stock/net,22x22/stock/object,22x22/stock/table,22x22/stock/text,24x24/actions,24x24/animations,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/filesystems,24x24/intl,24x24/mimetypes,24x24/places,24x24/status,24x24/stock/chart,24x24/stock/code,24x24/stock/data,24x24/stock/form,24x24/stock/image,24x24/stock/io,24x24/stock/media,24x24/stock/navigation,24x24/stock/net,24x24/stock/object,24x24/stock/table,24x24/stock/text,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/filesystems,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,32x32/stock/chart,32x32/stock/code,32x32/stock/data,32x32/stock/form,32x32/stock/image,32x32/stock/io,32x32/stock/media,32x32/stock/navigation,32x32/stock/net,32x32/stock/object,32x32/stock/table,32x32/stock/text,36x36/actions,36x36/animations,36x36/apps,36x36/categories,36x36/devices,36x36/emblems,36x36/emotes,36x36/filesystems,36x36/intl,36x36/mimetypes,36x36/places,36x36/status,36x36/stock/chart,36x36/stock/code,36x36/stock/data,36x36/stock/form,36x36/stock/image,36x36/stock/io,36x36/stock/media,36x36/stock/navigation,36x36/stock/net,36x36/stock/object,36x36/stock/table,36x36/stock/text,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/filesystems,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,48x48/stock/chart,48x48/stock/code,48x48/stock/data,48x48/stock/form,48x48/stock/image,48x48/stock/io,48x48/stock/media,48x48/stock/navigation,48x48/stock/net,48x48/stock/object,48x48/stock/table,48x48/stock/text,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/filesystems,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,64x64/stock/chart,64x64/stock/code,64x64/stock/data,64x64/stock/form,64x64/stock/image,64x64/stock/io,64x64/stock/media,64x64/stock/navigation,64x64/stock/net,64x64/stock/object,64x64/stock/table,64x64/stock/text,72x72/actions,72x72/animations,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/filesystems,72x72/intl,72x72/mimetypes,72x72/places,72x72/status,72x72/stock/chart,72x72/stock/code,72x72/stock/data,72x72/stock/form,72x72/stock/image,72x72/stock/io,72x72/stock/media,72x72/stock/navigation,72x72/stock/net,72x72/stock/object,72x72/stock/table,72x72/stock/text,96x96/actions,96x96/animations,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/filesystems,96x96/intl,96x96/mimetypes,96x96/places,96x96/status,96x96/stock/chart,96x96/stock/code,96x96/stock/data,96x96/stock/form,96x96/stock/image,96x96/stock/io,96x96/stock/media,96x96/stock/navigation,96x96/stock/net,96x96/stock/object,96x96/stock/table,96x96/stock/text,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/filesystems,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,128x128/stock/chart,128x128/stock/code,128x128/stock/data,128x128/stock/form,128x128/stock/image,128x128/stock/io,128x128/stock/media,128x128/stock/navigation,128x128/stock/net,128x128/stock/object,128x128/stock/table,128x128/stock/text,192x192/actions,192x192/animations,192x192/apps,192x192/categories,192x192/devices,192x192/emblems,192x192/emotes,192x192/filesystems,192x192/intl,192x192/mimetypes,192x192/places,192x192/status,192x192/stock/chart,192x192/stock/code,192x192/stock/data,192x192/stock/form,192x192/stock/image,192x192/stock/io,192x192/stock/media,192x192/stock/navigation,192x192/stock/net,192x192/stock/object,192x192/stock/table,192x192/stock/text,256x256/actions,256x256/animations,256x256/apps,256x256/categories,256x256/devices,256x256/emblems,256x256/emotes,256x256/filesystems,256x256/intl,256x256/mimetypes,256x256/places,256x256/status,256x256/stock/chart,256x256/stock/code,256x256/stock/data,256x256/stock/form,256x256/stock/image,256x256/stock/io,256x256/stock/media,256x256/stock/navigation,256x256/stock/net,256x256/stock/object,256x256/stock/table,256x256/stock/text,512x512/actions,512x512/animations,512x512/apps,512x512/categories,512x512/devices,512x512/emblems,512x512/emotes,512x512/filesystems,512x512/intl,512x512/mimetypes,512x512/places,512x512/status,512x512/stock/chart,512x512/stock/code,512x512/stock/data,512x512/stock/form,512x512/stock/image,512x512/stock/io,512x512/stock/media,512x512/stock/navigation,512x512/stock/net,512x512/stock/object,512x512/stock/table,512x512/stock/text,scalable/actions,scalable/animations,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/filesystems,scalable/intl,scalable/mimetypes,scalable/places,scalable/status,scalable/stock/chart,scalable/stock/code,scalable/stock/data,scalable/stock/form,scalable/stock/image,scalable/stock/io,scalable/stock/media,scalable/stock/navigation,scalable/stock/net,scalable/stock/object,scalable/stock/table,scalable/stock/text [16x16/actions] Size=16 Context=Actions Type=Threshold [16x16/animations] Size=16 Context=Animations Type=Threshold [16x16/apps] Size=16 Context=Applications Type=Threshold [16x16/categories] Size=16 Context=Categories Type=Threshold [16x16/devices] Size=16 Context=Devices Type=Threshold [16x16/emblems] Size=16 Context=Emblems Type=Threshold [16x16/emotes] Size=16 Context=Emotes Type=Threshold [16x16/filesystems] Size=16 Context=FileSystems Type=Threshold [16x16/intl] Size=16 Context=International Type=Threshold [16x16/mimetypes] Size=16 Context=MimeTypes Type=Threshold [16x16/places] Size=16 Context=Places Type=Threshold [16x16/status] Size=16 Context=Status Type=Threshold [16x16/stock/chart] Size=16 Context=Stock Type=Threshold [16x16/stock/code] Size=16 Context=Stock Type=Threshold [16x16/stock/data] Size=16 Context=Stock Type=Threshold [16x16/stock/form] Size=16 Context=Stock Type=Threshold [16x16/stock/image] Size=16 Context=Stock Type=Threshold [16x16/stock/io] Size=16 Context=Stock Type=Threshold [16x16/stock/media] Size=16 Context=Stock Type=Threshold [16x16/stock/navigation] Size=16 Context=Stock Type=Threshold [16x16/stock/net] Size=16 Context=Stock Type=Threshold [16x16/stock/object] Size=16 Context=Stock Type=Threshold [16x16/stock/table] Size=16 Context=Stock Type=Threshold [16x16/stock/text] Size=16 Context=Stock Type=Threshold [22x22/actions] Size=22 Context=Actions Type=Threshold [22x22/animations] Size=22 Context=Animations Type=Threshold [22x22/apps] Size=22 Context=Applications Type=Threshold [22x22/categories] Size=22 Context=Categories Type=Threshold [22x22/devices] Size=22 Context=Devices Type=Threshold [22x22/emblems] Size=22 Context=Emblems Type=Threshold [22x22/emotes] Size=22 Context=Emotes Type=Threshold [22x22/filesystems] Size=22 Context=FileSystems Type=Threshold [22x22/intl] Size=22 Context=International Type=Threshold [22x22/mimetypes] Size=22 Context=MimeTypes Type=Threshold [22x22/places] Size=22 Context=Places Type=Threshold [22x22/status] Size=22 Context=Status Type=Threshold [22x22/stock/chart] Size=22 Context=Stock Type=Threshold [22x22/stock/code] Size=22 Context=Stock Type=Threshold [22x22/stock/data] Size=22 Context=Stock Type=Threshold [22x22/stock/form] Size=22 Context=Stock Type=Threshold [22x22/stock/image] Size=22 Context=Stock Type=Threshold [22x22/stock/io] Size=22 Context=Stock Type=Threshold [22x22/stock/media] Size=22 Context=Stock Type=Threshold [22x22/stock/navigation] Size=22 Context=Stock Type=Threshold [22x22/stock/net] Size=22 Context=Stock Type=Threshold [22x22/stock/object] Size=22 Context=Stock Type=Threshold [22x22/stock/table] Size=22 Context=Stock Type=Threshold [22x22/stock/text] Size=22 Context=Stock Type=Threshold [24x24/actions] Size=24 Context=Actions Type=Threshold [24x24/animations] Size=24 Context=Animations Type=Threshold [24x24/apps] Size=24 Context=Applications Type=Threshold [24x24/categories] Size=24 Context=Categories Type=Threshold [24x24/devices] Size=24 Context=Devices Type=Threshold [24x24/emblems] Size=24 Context=Emblems Type=Threshold [24x24/emotes] Size=24 Context=Emotes Type=Threshold [24x24/filesystems] Size=24 Context=FileSystems Type=Threshold [24x24/intl] Size=24 Context=International Type=Threshold [24x24/mimetypes] Size=24 Context=MimeTypes Type=Threshold [24x24/places] Size=24 Context=Places Type=Threshold [24x24/status] Size=24 Context=Status Type=Threshold [24x24/stock/chart] Size=24 Context=Stock Type=Threshold [24x24/stock/code] Size=24 Context=Stock Type=Threshold [24x24/stock/data] Size=24 Context=Stock Type=Threshold [24x24/stock/form] Size=24 Context=Stock Type=Threshold [24x24/stock/image] Size=24 Context=Stock Type=Threshold [24x24/stock/io] Size=24 Context=Stock Type=Threshold [24x24/stock/media] Size=24 Context=Stock Type=Threshold [24x24/stock/navigation] Size=24 Context=Stock Type=Threshold [24x24/stock/net] Size=24 Context=Stock Type=Threshold [24x24/stock/object] Size=24 Context=Stock Type=Threshold [24x24/stock/table] Size=24 Context=Stock Type=Threshold [24x24/stock/text] Size=24 Context=Stock Type=Threshold [32x32/actions] Size=32 Context=Actions Type=Threshold [32x32/animations] Size=32 Context=Animations Type=Threshold [32x32/apps] Size=32 Context=Applications Type=Threshold [32x32/categories] Size=32 Context=Categories Type=Threshold [32x32/devices] Size=32 Context=Devices Type=Threshold [32x32/emblems] Size=32 Context=Emblems Type=Threshold [32x32/emotes] Size=32 Context=Emotes Type=Threshold [32x32/filesystems] Size=32 Context=FileSystems Type=Threshold [32x32/intl] Size=32 Context=International Type=Threshold [32x32/mimetypes] Size=32 Context=MimeTypes Type=Threshold [32x32/places] Size=32 Context=Places Type=Threshold [32x32/status] Size=32 Context=Status Type=Threshold [32x32/stock/chart] Size=32 Context=Stock Type=Threshold [32x32/stock/code] Size=32 Context=Stock Type=Threshold [32x32/stock/data] Size=32 Context=Stock Type=Threshold [32x32/stock/form] Size=32 Context=Stock Type=Threshold [32x32/stock/image] Size=32 Context=Stock Type=Threshold [32x32/stock/io] Size=32 Context=Stock Type=Threshold [32x32/stock/media] Size=32 Context=Stock Type=Threshold [32x32/stock/navigation] Size=32 Context=Stock Type=Threshold [32x32/stock/net] Size=32 Context=Stock Type=Threshold [32x32/stock/object] Size=32 Context=Stock Type=Threshold [32x32/stock/table] Size=32 Context=Stock Type=Threshold [32x32/stock/text] Size=32 Context=Stock Type=Threshold [36x36/actions] Size=36 Context=Actions Type=Threshold [36x36/animations] Size=36 Context=Animations Type=Threshold [36x36/apps] Size=36 Context=Applications Type=Threshold [36x36/categories] Size=36 Context=Categories Type=Threshold [36x36/devices] Size=36 Context=Devices Type=Threshold [36x36/emblems] Size=36 Context=Emblems Type=Threshold [36x36/emotes] Size=36 Context=Emotes Type=Threshold [36x36/filesystems] Size=36 Context=FileSystems Type=Threshold [36x36/intl] Size=36 Context=International Type=Threshold [36x36/mimetypes] Size=36 Context=MimeTypes Type=Threshold [36x36/places] Size=36 Context=Places Type=Threshold [36x36/status] Size=36 Context=Status Type=Threshold [36x36/stock/chart] Size=36 Context=Stock Type=Threshold [36x36/stock/code] Size=36 Context=Stock Type=Threshold [36x36/stock/data] Size=36 Context=Stock Type=Threshold [36x36/stock/form] Size=36 Context=Stock Type=Threshold [36x36/stock/image] Size=36 Context=Stock Type=Threshold [36x36/stock/io] Size=36 Context=Stock Type=Threshold [36x36/stock/media] Size=36 Context=Stock Type=Threshold [36x36/stock/navigation] Size=36 Context=Stock Type=Threshold [36x36/stock/net] Size=36 Context=Stock Type=Threshold [36x36/stock/object] Size=36 Context=Stock Type=Threshold [36x36/stock/table] Size=36 Context=Stock Type=Threshold [36x36/stock/text] Size=36 Context=Stock Type=Threshold [48x48/actions] Size=48 Context=Actions Type=Threshold [48x48/animations] Size=48 Context=Animations Type=Threshold [48x48/apps] Size=48 Context=Applications Type=Threshold [48x48/categories] Size=48 Context=Categories Type=Threshold [48x48/devices] Size=48 Context=Devices Type=Threshold [48x48/emblems] Size=48 Context=Emblems Type=Threshold [48x48/emotes] Size=48 Context=Emotes Type=Threshold [48x48/filesystems] Size=48 Context=FileSystems Type=Threshold [48x48/intl] Size=48 Context=International Type=Threshold [48x48/mimetypes] Size=48 Context=MimeTypes Type=Threshold [48x48/places] Size=48 Context=Places Type=Threshold [48x48/status] Size=48 Context=Status Type=Threshold [48x48/stock/chart] Size=48 Context=Stock Type=Threshold [48x48/stock/code] Size=48 Context=Stock Type=Threshold [48x48/stock/data] Size=48 Context=Stock Type=Threshold [48x48/stock/form] Size=48 Context=Stock Type=Threshold [48x48/stock/image] Size=48 Context=Stock Type=Threshold [48x48/stock/io] Size=48 Context=Stock Type=Threshold [48x48/stock/media] Size=48 Context=Stock Type=Threshold [48x48/stock/navigation] Size=48 Context=Stock Type=Threshold [48x48/stock/net] Size=48 Context=Stock Type=Threshold [48x48/stock/object] Size=48 Context=Stock Type=Threshold [48x48/stock/table] Size=48 Context=Stock Type=Threshold [48x48/stock/text] Size=48 Context=Stock Type=Threshold [64x64/actions] Size=64 Context=Actions Type=Threshold [64x64/animations] Size=64 Context=Animations Type=Threshold [64x64/apps] Size=64 Context=Applications Type=Threshold [64x64/categories] Size=64 Context=Categories Type=Threshold [64x64/devices] Size=64 Context=Devices Type=Threshold [64x64/emblems] Size=64 Context=Emblems Type=Threshold [64x64/emotes] Size=64 Context=Emotes Type=Threshold [64x64/filesystems] Size=64 Context=FileSystems Type=Threshold [64x64/intl] Size=64 Context=International Type=Threshold [64x64/mimetypes] Size=64 Context=MimeTypes Type=Threshold [64x64/places] Size=64 Context=Places Type=Threshold [64x64/status] Size=64 Context=Status Type=Threshold [64x64/stock/chart] Size=64 Context=Stock Type=Threshold [64x64/stock/code] Size=64 Context=Stock Type=Threshold [64x64/stock/data] Size=64 Context=Stock Type=Threshold [64x64/stock/form] Size=64 Context=Stock Type=Threshold [64x64/stock/image] Size=64 Context=Stock Type=Threshold [64x64/stock/io] Size=64 Context=Stock Type=Threshold [64x64/stock/media] Size=64 Context=Stock Type=Threshold [64x64/stock/navigation] Size=64 Context=Stock Type=Threshold [64x64/stock/net] Size=64 Context=Stock Type=Threshold [64x64/stock/object] Size=64 Context=Stock Type=Threshold [64x64/stock/table] Size=64 Context=Stock Type=Threshold [64x64/stock/text] Size=64 Context=Stock Type=Threshold [72x72/actions] Size=72 Context=Actions Type=Threshold [72x72/animations] Size=72 Context=Animations Type=Threshold [72x72/apps] Size=72 Context=Applications Type=Threshold [72x72/categories] Size=72 Context=Categories Type=Threshold [72x72/devices] Size=72 Context=Devices Type=Threshold [72x72/emblems] Size=72 Context=Emblems Type=Threshold [72x72/emotes] Size=72 Context=Emotes Type=Threshold [72x72/filesystems] Size=72 Context=FileSystems Type=Threshold [72x72/intl] Size=72 Context=International Type=Threshold [72x72/mimetypes] Size=72 Context=MimeTypes Type=Threshold [72x72/places] Size=72 Context=Places Type=Threshold [72x72/status] Size=72 Context=Status Type=Threshold [72x72/stock/chart] Size=72 Context=Stock Type=Threshold [72x72/stock/code] Size=72 Context=Stock Type=Threshold [72x72/stock/data] Size=72 Context=Stock Type=Threshold [72x72/stock/form] Size=72 Context=Stock Type=Threshold [72x72/stock/image] Size=72 Context=Stock Type=Threshold [72x72/stock/io] Size=72 Context=Stock Type=Threshold [72x72/stock/media] Size=72 Context=Stock Type=Threshold [72x72/stock/navigation] Size=72 Context=Stock Type=Threshold [72x72/stock/net] Size=72 Context=Stock Type=Threshold [72x72/stock/object] Size=72 Context=Stock Type=Threshold [72x72/stock/table] Size=72 Context=Stock Type=Threshold [72x72/stock/text] Size=72 Context=Stock Type=Threshold [96x96/actions] Size=96 Context=Actions Type=Threshold [96x96/animations] Size=96 Context=Animations Type=Threshold [96x96/apps] Size=96 Context=Applications Type=Threshold [96x96/categories] Size=96 Context=Categories Type=Threshold [96x96/devices] Size=96 Context=Devices Type=Threshold [96x96/emblems] Size=96 Context=Emblems Type=Threshold [96x96/emotes] Size=96 Context=Emotes Type=Threshold [96x96/filesystems] Size=96 Context=FileSystems Type=Threshold [96x96/intl] Size=96 Context=International Type=Threshold [96x96/mimetypes] Size=96 Context=MimeTypes Type=Threshold [96x96/places] Size=96 Context=Places Type=Threshold [96x96/status] Size=96 Context=Status Type=Threshold [96x96/stock/chart] Size=96 Context=Stock Type=Threshold [96x96/stock/code] Size=96 Context=Stock Type=Threshold [96x96/stock/data] Size=96 Context=Stock Type=Threshold [96x96/stock/form] Size=96 Context=Stock Type=Threshold [96x96/stock/image] Size=96 Context=Stock Type=Threshold [96x96/stock/io] Size=96 Context=Stock Type=Threshold [96x96/stock/media] Size=96 Context=Stock Type=Threshold [96x96/stock/navigation] Size=96 Context=Stock Type=Threshold [96x96/stock/net] Size=96 Context=Stock Type=Threshold [96x96/stock/object] Size=96 Context=Stock Type=Threshold [96x96/stock/table] Size=96 Context=Stock Type=Threshold [96x96/stock/text] Size=96 Context=Stock Type=Threshold [128x128/actions] Size=128 Context=Actions Type=Threshold [128x128/animations] Size=128 Context=Animations Type=Threshold [128x128/apps] Size=128 Context=Applications Type=Threshold [128x128/categories] Size=128 Context=Categories Type=Threshold [128x128/devices] Size=128 Context=Devices Type=Threshold [128x128/emblems] Size=128 Context=Emblems Type=Threshold [128x128/emotes] Size=128 Context=Emotes Type=Threshold [128x128/filesystems] Size=128 Context=FileSystems Type=Threshold [128x128/intl] Size=128 Context=International Type=Threshold [128x128/mimetypes] Size=128 Context=MimeTypes Type=Threshold [128x128/places] Size=128 Context=Places Type=Threshold [128x128/status] Size=128 Context=Status Type=Threshold [128x128/stock/chart] Size=128 Context=Stock Type=Threshold [128x128/stock/code] Size=128 Context=Stock Type=Threshold [128x128/stock/data] Size=128 Context=Stock Type=Threshold [128x128/stock/form] Size=128 Context=Stock Type=Threshold [128x128/stock/image] Size=128 Context=Stock Type=Threshold [128x128/stock/io] Size=128 Context=Stock Type=Threshold [128x128/stock/media] Size=128 Context=Stock Type=Threshold [128x128/stock/navigation] Size=128 Context=Stock Type=Threshold [128x128/stock/net] Size=128 Context=Stock Type=Threshold [128x128/stock/object] Size=128 Context=Stock Type=Threshold [128x128/stock/table] Size=128 Context=Stock Type=Threshold [128x128/stock/text] Size=128 Context=Stock Type=Threshold [192x192/actions] Size=192 Context=Actions Type=Threshold [192x192/animations] Size=192 Context=Animations Type=Threshold [192x192/apps] Size=192 Context=Applications Type=Threshold [192x192/categories] Size=192 Context=Categories Type=Threshold [192x192/devices] Size=192 Context=Devices Type=Threshold [192x192/emblems] Size=192 Context=Emblems Type=Threshold [192x192/emotes] Size=192 Context=Emotes Type=Threshold [192x192/filesystems] Size=192 Context=FileSystems Type=Threshold [192x192/intl] Size=192 Context=International Type=Threshold [192x192/mimetypes] Size=192 Context=MimeTypes Type=Threshold [192x192/places] Size=192 Context=Places Type=Threshold [192x192/status] Size=192 Context=Status Type=Threshold [192x192/stock/chart] Size=192 Context=Stock Type=Threshold [192x192/stock/code] Size=192 Context=Stock Type=Threshold [192x192/stock/data] Size=192 Context=Stock Type=Threshold [192x192/stock/form] Size=192 Context=Stock Type=Threshold [192x192/stock/image] Size=192 Context=Stock Type=Threshold [192x192/stock/io] Size=192 Context=Stock Type=Threshold [192x192/stock/media] Size=192 Context=Stock Type=Threshold [192x192/stock/navigation] Size=192 Context=Stock Type=Threshold [192x192/stock/net] Size=192 Context=Stock Type=Threshold [192x192/stock/object] Size=192 Context=Stock Type=Threshold [192x192/stock/table] Size=192 Context=Stock Type=Threshold [192x192/stock/text] Size=192 Context=Stock Type=Threshold [256x256/actions] MinSize=64 Size=256 MaxSize=256 Context=Actions Type=Scalable [256x256/animations] MinSize=64 Size=256 MaxSize=256 Context=Animations Type=Scalable [256x256/apps] MinSize=64 Size=256 MaxSize=256 Context=Applications Type=Scalable [256x256/categories] MinSize=64 Size=256 MaxSize=256 Context=Categories Type=Scalable [256x256/devices] MinSize=64 Size=256 MaxSize=256 Context=Devices Type=Scalable [256x256/emblems] MinSize=64 Size=256 MaxSize=256 Context=Emblems Type=Scalable [256x256/emotes] MinSize=64 Size=256 MaxSize=256 Context=Emotes Type=Scalable [256x256/filesystems] MinSize=64 Size=256 MaxSize=256 Context=FileSystems Type=Scalable [256x256/intl] MinSize=64 Size=256 MaxSize=256 Context=International Type=Scalable [256x256/mimetypes] MinSize=64 Size=256 MaxSize=256 Context=MimeTypes Type=Scalable [256x256/places] MinSize=64 Size=256 MaxSize=256 Context=Places Type=Scalable [256x256/status] MinSize=64 Size=256 MaxSize=256 Context=Status Type=Scalable [256x256/stock/chart] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/code] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/data] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/form] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/image] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/io] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/media] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/navigation] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/net] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/object] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/table] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [256x256/stock/text] MinSize=64 Size=256 MaxSize=256 Context=Stock Type=Scalable [512x512/actions] MinSize=64 Size=512 MaxSize=512 Context=Actions Type=Scalable [512x512/animations] MinSize=64 Size=512 MaxSize=512 Context=Animations Type=Scalable [512x512/apps] MinSize=64 Size=512 MaxSize=512 Context=Applications Type=Scalable [512x512/categories] MinSize=64 Size=512 MaxSize=512 Context=Categories Type=Scalable [512x512/devices] MinSize=64 Size=512 MaxSize=512 Context=Devices Type=Scalable [512x512/emblems] MinSize=64 Size=512 MaxSize=512 Context=Emblems Type=Scalable [512x512/emotes] MinSize=64 Size=512 MaxSize=512 Context=Emotes Type=Scalable [512x512/filesystems] MinSize=64 Size=512 MaxSize=512 Context=FileSystems Type=Scalable [512x512/intl] MinSize=64 Size=512 MaxSize=512 Context=International Type=Scalable [512x512/mimetypes] MinSize=64 Size=512 MaxSize=512 Context=MimeTypes Type=Scalable [512x512/places] MinSize=64 Size=512 MaxSize=512 Context=Places Type=Scalable [512x512/status] MinSize=64 Size=512 MaxSize=512 Context=Status Type=Scalable [512x512/stock/chart] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/code] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/data] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/form] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/image] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/io] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/media] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/navigation] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/net] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/object] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/table] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [512x512/stock/text] MinSize=64 Size=512 MaxSize=512 Context=Stock Type=Scalable [scalable/actions] MinSize=1 Size=128 MaxSize=256 Context=Actions Type=Scalable [scalable/animations] MinSize=1 Size=128 MaxSize=256 Context=Animations Type=Scalable [scalable/apps] MinSize=1 Size=128 MaxSize=256 Context=Applications Type=Scalable [scalable/categories] MinSize=1 Size=128 MaxSize=256 Context=Categories Type=Scalable [scalable/devices] MinSize=1 Size=128 MaxSize=512 Context=Devices Type=Scalable [scalable/emblems] MinSize=1 Size=128 MaxSize=256 Context=Emblems Type=Scalable [scalable/emotes] MinSize=1 Size=128 MaxSize=512 Context=Emotes Type=Scalable [scalable/filesystems] MinSize=1 Size=128 MaxSize=256 Context=FileSystems Type=Scalable [scalable/intl] MinSize=1 Size=128 MaxSize=512 Context=International Type=Scalable [scalable/mimetypes] MinSize=1 Size=128 MaxSize=256 Context=MimeTypes Type=Scalable [scalable/places] MinSize=1 Size=128 MaxSize=512 Context=Places Type=Scalable [scalable/status] MinSize=1 Size=128 MaxSize=256 Context=Status Type=Scalable [scalable/stock/chart] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/code] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/data] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/form] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/image] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/io] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/media] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/navigation] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/net] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/object] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable [scalable/stock/table] MinSize=1 Size=128 MaxSize=512 Context=Stock Type=Scalable [scalable/stock/text] MinSize=1 Size=128 MaxSize=256 Context=Stock Type=Scalable gImageReader-3.4.0/packaging/win32/skel/share/myspell/000077500000000000000000000000001417507262200224535ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/myspell/README.txt000066400000000000000000000005601417507262200241520ustar00rootroot00000000000000This folder contains spelling dictionaries. To add additional spelling dictionaries: * Visit https://cgit.freedesktop.org/libreoffice/dictionaries/tree/ * Download the *.dic and *.aff files for the desired language and place them inside this folder * If gImageReader is running, select "Redetect Languages" from the application menu, or restart the application gImageReader-3.4.0/packaging/win32/skel/share/tessdata/000077500000000000000000000000001417507262200225765ustar00rootroot00000000000000gImageReader-3.4.0/packaging/win32/skel/share/tessdata/README.txt000066400000000000000000000015451417507262200243010ustar00rootroot00000000000000This folder contains tesseract language definitions. To add additional language definitions: - Use the tessdata manager from the language selection menu in gImageReader - Or install the languages manually: * In the gImageReader about dialog, check which version of tesseract is used * If using tesseract 4.x, go to https://github.com/tesseract-ocr/tessdata_fast * If using tesseract 3.x or older, go to https://github.com/tesseract-ocr/tessdata * In the branch selection button, under tags, select the version which is *less or equal* the tesseract version in use * Download the desired language definitions (*.traineddata along with any supplementary files which certain languages need) and save them inside this folder * If gImageReader is running, select "Redetect Languages" from the application menu, or restart the application gImageReader-3.4.0/po/000077500000000000000000000000001417507262200144565ustar00rootroot00000000000000gImageReader-3.4.0/po/LINGUAS000066400000000000000000000002441417507262200155030ustar00rootroot00000000000000ar_SA cs de el es eu fr it nb_NO nl pl pt_BR ru sl sv tr uk zh_CN zh_HK zh_TW pt ko sr_Cyrl sr_CS sr_Latn ie he hi hu ar_AR ja mk sq sat ia hr gu ca ka eo ab fa ro gImageReader-3.4.0/po/POTFILES.in000066400000000000000000000123631417507262200162400ustar00rootroot00000000000000# List of source files containing translatable strings. data/gimagereader.desktop.in [type: gettext/glade]gtk/data/appmenu.ui [type: gettext/glade]gtk/data/CharacterListDialog.ui [type: gettext/glade]gtk/data/ConfigDialog.ui [type: gettext/glade]gtk/data/CrashHandler.ui [type: gettext/glade]gtk/data/HOCRBatchExportDialog.ui [type: gettext/glade]gtk/data/MainWindow.ui [type: gettext/glade]gtk/data/OutputEditorHOCR.ui [type: gettext/glade]gtk/data/OutputEditorText.ui [type: gettext/glade]gtk/data/PdfExportWidget.ui [type: gettext/glade]gtk/data/SearchReplaceFrame.ui [type: gettext/glade]gtk/data/SelectionMenu.ui [type: gettext/glade]gtk/data/SubstitutionsManager.ui [type: gettext/glade]gtk/data/TessdataManager.ui gtk/src/Acquirer.cc gtk/src/Acquirer.hh gtk/src/Application.hh gtk/src/common.hh gtk/src/Config.cc gtk/src/Config.hh gtk/src/ConfigSettings.cc gtk/src/ConfigSettings.hh gtk/src/CrashHandler.cc gtk/src/CrashHandler.hh gtk/src/Displayer.cc gtk/src/Displayer.hh gtk/src/DisplayerToolSelect.cc gtk/src/DisplayerToolSelect.hh gtk/src/DisplayRenderer.cc gtk/src/DisplayRenderer.hh gtk/src/DjVuDocument.cc gtk/src/DjVuDocument.hh gtk/src/FileDialogs.cc gtk/src/FileDialogs.hh gtk/src/FileTreeModel.cc gtk/src/FileTreeModel.hh gtk/src/FontComboBox.cc gtk/src/FontComboBox.hh gtk/src/Geometry.hh gtk/src/hocr/DisplayerToolHOCR.cc gtk/src/hocr/DisplayerToolHOCR.hh gtk/src/hocr/HOCRBatchExportDialog.cc gtk/src/hocr/HOCRBatchExportDialog.hh gtk/src/hocr/HOCRDocument.cc gtk/src/hocr/HOCRDocument.hh gtk/src/hocr/HOCRExporter.hh gtk/src/hocr/HOCROdtExporter.cc gtk/src/hocr/HOCROdtExporter.hh gtk/src/hocr/HOCRPdfExporter.cc gtk/src/hocr/HOCRPdfExporter.hh gtk/src/hocr/HOCRPdfExportWidget.cc gtk/src/hocr/HOCRPdfExportWidget.hh gtk/src/hocr/HOCRSpellChecker.cc gtk/src/hocr/HOCRSpellChecker.hh gtk/src/hocr/HOCRTextExporter.cc gtk/src/hocr/HOCRTextExporter.hh gtk/src/hocr/OutputEditorHOCR.cc gtk/src/hocr/OutputEditorHOCR.hh gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.hh gtk/src/hocr/XmlUtils.cc gtk/src/hocr/XmlUtils.hh gtk/src/Image.cc gtk/src/Image.hh gtk/src/main.cc gtk/src/MainWindow.cc gtk/src/MainWindow.hh gtk/src/OutputBuffer.cc gtk/src/OutputBuffer.hh gtk/src/OutputEditor.hh gtk/src/OutputEditorText.cc gtk/src/OutputEditorText.hh gtk/src/RecognitionMenu.cc gtk/src/RecognitionMenu.hh gtk/src/Recognizer.cc gtk/src/Recognizer.hh gtk/src/Scanner.hh gtk/src/scanner/ScannerSane.cc gtk/src/scanner/ScannerSane.hh gtk/src/scanner/ScannerTwain.cc gtk/src/scanner/ScannerTwain.hh gtk/src/SearchReplaceFrame.cc gtk/src/SearchReplaceFrame.hh gtk/src/SourceManager.cc gtk/src/SourceManager.hh gtk/src/SubstitutionsManager.cc gtk/src/SubstitutionsManager.hh gtk/src/TessdataManager.cc gtk/src/TessdataManager.hh gtk/src/Utils.cc gtk/src/Utils.hh [type: gettext/qtdesigner]qt/data/AboutDialog.ui [type: gettext/qtdesigner]qt/data/BatchModeDialog.ui [type: gettext/qtdesigner]qt/data/CharacterListDialog.ui [type: gettext/qtdesigner]qt/data/ConfigDialog.ui [type: gettext/qtdesigner]qt/data/CrashHandler.ui [type: gettext/qtdesigner]qt/data/HOCRBatchExportDialog.ui [type: gettext/qtdesigner]qt/data/MainWindow.ui [type: gettext/qtdesigner]qt/data/PageRangeDialog.ui [type: gettext/qtdesigner]qt/data/PdfExportDialog.ui [type: gettext/qtdesigner]qt/data/PdfExportWidget.ui [type: gettext/qtdesigner]qt/data/SearchReplaceFrame.ui qt/src/Acquirer.cc qt/src/Acquirer.hh qt/src/common.hh qt/src/Config.cc qt/src/Config.hh qt/src/ConfigSettings.cc qt/src/ConfigSettings.hh qt/src/CrashHandler.cc qt/src/CrashHandler.hh qt/src/Displayer.cc qt/src/Displayer.hh qt/src/DisplayerToolSelect.cc qt/src/DisplayerToolSelect.hh qt/src/DisplayRenderer.cc qt/src/DisplayRenderer.hh qt/src/DjVuDocument.cc qt/src/DjVuDocument.hh qt/src/FileDialogs.cc qt/src/FileDialogs.hh qt/src/FileTreeModel.cc qt/src/FileTreeModel.hh qt/src/hocr/DisplayerToolHOCR.cc qt/src/hocr/DisplayerToolHOCR.hh qt/src/hocr/HOCRBatchExportDialog.cc qt/src/hocr/HOCRBatchExportDialog.hh qt/src/hocr/HOCRDocument.cc qt/src/hocr/HOCRDocument.hh qt/src/hocr/HOCRExporter.hh qt/src/hocr/HOCROdtExporter.cc qt/src/hocr/HOCROdtExporter.hh qt/src/hocr/HOCRPdfExporter.cc qt/src/hocr/HOCRPdfExporter.hh qt/src/hocr/HOCRPdfExportWidget.cc qt/src/hocr/HOCRPdfExportWidget.hh qt/src/hocr/HOCRProofReadWidget.cc qt/src/hocr/HOCRProofReadWidget.hh qt/src/hocr/HOCRSpellChecker.cc qt/src/hocr/HOCRSpellChecker.hh qt/src/hocr/HOCRTextExporter.cc qt/src/hocr/HOCRTextExporter.hh qt/src/hocr/OutputEditorHOCR.cc qt/src/hocr/OutputEditorHOCR.hh qt/src/hocr/Ui_OutputEditorHOCR.hh qt/src/main.cc qt/src/MainWindow.cc qt/src/MainWindow.hh qt/src/OutputEditor.cc qt/src/OutputEditor.hh qt/src/OutputEditorText.cc qt/src/OutputEditorText.hh qt/src/OutputTextEdit.cc qt/src/OutputTextEdit.hh qt/src/RecognitionMenu.cc qt/src/RecognitionMenu.hh qt/src/Recognizer.cc qt/src/Recognizer.hh qt/src/Scanner.cc qt/src/Scanner.hh qt/src/scanner/ScannerSane.cc qt/src/scanner/ScannerSane.hh qt/src/scanner/ScannerTwain.cc qt/src/scanner/ScannerTwain.hh qt/src/SearchReplaceFrame.cc qt/src/SearchReplaceFrame.hh qt/src/SourceManager.cc qt/src/SourceManager.hh qt/src/SubstitutionsManager.cc qt/src/SubstitutionsManager.hh qt/src/TessdataManager.cc qt/src/TessdataManager.hh qt/src/Ui_MainWindow.hh qt/src/Ui_OutputEditorText.hh qt/src/Utils.cc qt/src/Utils.hh gImageReader-3.4.0/po/ab.po000066400000000000000000001751461417507262200154160ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/ar_AR.po000066400000000000000000002450721417507262200160140ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-10-05 19:26+0000\n" "Last-Translator: Riyadh Talal \n" "Language-Team: Arabic \n" "Language: ar_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 4.3-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "برنامج التعر٠الضوئي للمستندات المصورة" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "إعادة تحميل لغات التعر٠الضوئي" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "إدارة لغات التعر٠الضوئي" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "خيارات" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "مساعدة" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "نبذة" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "إنهاء البرنامج" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 #, fuzzy msgid "Enter a string of characters..." msgstr "الحصول على المدخلات..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "تم" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "اتجاه شاشة المخرجات:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Ø£Ùقي" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "عمودي" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "طلب تثبيت قواميس الإملاء غير المثبتة" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "البحث عن تحديثات البرنامج تلقائيا" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ØªØ¹Ø±ÙŠÙØ§Øª اللغات الموجودة:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "ØªØ¹Ø±ÙŠÙØ§Øª اللغات الإضاÙية:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "تعري٠مل٠اللغة ÙÙŠ محرك التعر٠الضوئي" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "تعريÙ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "رمز اللغة ISO-639-1 متبوعا برمز الدولة" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "رمز ISO القياسي" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "اسم اللغة" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "الاسم" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "إلغاء" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "خط شاشة المخرجات:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "مكان مجلد لغات التعر٠الضوئي ÙÙŠ النظام:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "مسار مجلد لغات التعر٠الضوئي ÙÙŠ الحاسوب:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "مسار قواميس التدقيق الإملائي:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "مسار Ø§Ù„Ù…Ù„ÙØ§Øª على مستوى النظام" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "مسار Ø§Ù„Ù…Ù„ÙØ§Øª على مستوى المستخدم" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "ÙØªØ­ المستندات المخرجة باستخدام البرامج Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ©" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "إعادة إنشاء سجلات الأخطاء" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "لقد انهار التطبيق\n" "\n" "عذرا لهذا الإزعاج. للمساعدة ÙÙŠ تحسين التطبيق، ÙØ¶Ù„ا ضغ ÙÙŠ اعتبارك الإبلاغ عن " "المشكلة إلى manisandro@gmail.com. Ù„Ø·ÙØ§ حاول وص٠ما " "كنت ØªÙØ¹Ù„Ù‡ قبل انهيار التطبيق، أيضا أرÙÙ‚ هذه البيانات بالأسÙÙ„ØŒ شكرا لك." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "تطبيق" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "إغلاق" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "النسق:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "المخرج:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "صيغة المخرجات:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "اسم المل٠المصور" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "خيارات أخرى" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "تبديل مكان شاشة المخرجات" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "تدوير اتجاه Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "تدوير اتجاه كل Ø§Ù„ØµÙØ­Ø§Øª" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "أزل وقم بتعديل بعض المسميات التي يصر المصمم على Ø¥Ø¶Ø§ÙØªÙ‡Ø§" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Ø¥Ø¶Ø§ÙØ© مصورات" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Ø¥Ø¶Ø§ÙØ© مصورات" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "إلغاء الصورة من القائمة" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "حذ٠الصورة" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "إلغاء جميع القائمة" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "الجهاز:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "تحديث" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "المخرج:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "الصيغة:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "اللون" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "تدرج الرمادي" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "الدقة النقطية:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "مسح ضوئي" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "المصدر:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "الحصول" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "السطوع" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "التباين" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "الدقة النقطية" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "عكس الألوان" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "تكبير" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "تصغير" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "المقاس العادي" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ø£ÙØ¶Ù„ تلاؤم" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "تدوير Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "اختر وضعية جهة الدوران" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "اختر وضعية الإدخال" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "اختر Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "أزرار التحكم بالصورة" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "نص عادي txt" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "صيغة PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "تعر٠تلقائي لتخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "التعر٠الضوئي للكل" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "اختر اللغة" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "تصدير" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "برنامج واجهة لمحرك التعر٠الضوئي tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "طابق نسق الحر٠case للإنجليزي" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "ألحق المخرج الحالي بنص شاشة المخرجات:" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "تعر٠تلقائي لتخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "مجال Ø§Ù„ØµÙØ­Ø§Øª" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "مجال Ø§Ù„ØµÙØ­Ø§Øª:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "مثال:1-11,13, 15-19" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "مساحة التعر٠الضوئي:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "كامل Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "تعر٠تلقائي" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "ألحق المخرج الحالي بنص شاشة المخرجات:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "اسم المل٠المصور" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "مصدر المصورات" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF محمي بكلمة سر" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "ØµÙØ­Ø§Øª متعددة..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Ø¥Ø¶Ø§ÙØ© كلمة" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "أدخل كلمة:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "تدوير اتجاه Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "تصدير نص txt" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "تصدير PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "تصدير ODT وورد" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "إلحاق بالنص المخرج الحالي" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Ø§Ø­ÙØ¸ النص المخرج" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "تصدير" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "مسح النص المخرج" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "بحث واستبدال" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "عرض قيم الثقة للتعر٠الضوئي" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "عرض كمثال" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "التالي (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "السابق (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "عرض الكل" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "تجميع المعروض" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "خصائص" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "المصدر" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "إلحاق بالنص المخرج الحالي" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "أدرج عند المؤشر" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "استبدل النص الحالي" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Ø§Ø­ØªÙØ¸ بإدراج السطر التالي إذا..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "كان مسبوقا بعلامة ترقيم توق٠(.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "مسبوقا أو متبوعا بعلامة تنصيص" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "خيارات أخرى" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "ربط الكلمات المتقطعة ب -" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "جمع Ø§Ù„Ù…Ø³Ø§ÙØ§Øª" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Ø§Ø­ØªÙØ¸ بالÙقرات" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "مساعدة مرئية" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Ø§Ø­Ø°Ù Ø§Ù„Ù…Ø³Ø§ÙØ©" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "احذ٠كسر السطر التالي للنص المحدد" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "تراجع" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "إعادة ÙØ¹Ù„" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "صيغة المخرجات:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF المصور الأصلي مع وجود نص بالخلÙية" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "الضغط:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "مقدار الضغط:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "الدقة النقطية:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "خوارزمية التحويل لأسود وأبيض:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "إعدادات الصورة:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "وحد السطر مع Ù…Ø³Ø§ÙØ© الكلمة" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "حدد خطا Ù…Ø®ØªÙ„ÙØ§:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "ÙÙŠ حال عدم ØªÙˆÙØ± الخط:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "تحديد حجم الخط:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "مقياس الخط:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "نقطة" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Ø§Ø­ØªÙØ¸ Ø¨Ø§Ù„Ù…Ø³Ø§ÙØ§Øª الأكبر من:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "الحروÙ" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "إعدادات النص:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "مقاس Ø§Ù„ØµÙØ­Ø©:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "العرض" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "الطول" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "الأساسي" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "النسخة الرقمية للـ PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "كلمة السر:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "تأكيد كلمة السر:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "التشÙير (اختياري):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "المؤلÙ:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "العنوان:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "الموضوع:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "صانع الملÙ:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "منتج الملÙ:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "الكلمات Ø§Ù„Ù…ÙØªØ§Ø­ÙŠØ©:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "معلومات أخرى(اختياري):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "استخرج من المصدر الحالي" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "متقدم" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "بحث" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "استبدال" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "استبدال الكل" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "بحث سابق" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "بحث لاحق" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "طابق نسق الحر٠case للإنجليزي" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "استبدالات" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "حذÙ" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "الترتيب:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "تعر٠ضوئي" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "تعر٠ضوئي إلى Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Ø§Ø­ÙØ¸ كصورة" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "ÙØªØ­" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Ø­ÙØ¸" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "مسح الكل" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Ø¥Ø¶Ø§ÙØ©" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "إلغاء" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "مدير Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "إدارة لغات التعر٠المثبتة:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "صور" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "اختر اسم المل٠للمخرج..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "ÙØ´Ù„ ÙÙŠ تهيئة المسح الضوئي." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "ÙØ´Ù„ المسح الضوئي" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "لم يتم اكتشا٠أي ماسحات ضوئية." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "بدء المسح الضوئي..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "ÙØªØ­ جهاز..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "خيارات الإعدادات..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "الحصول على المدخلات..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "نقل البيانات..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "إلغاء المسح الضوئي..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "بادئة اسم الملÙ" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "الرمز" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "الاسم الأصلي" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "مدير أخطاء البرنامج" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "عملك تم Ø­ÙØ¸Ù‡ ÙÙŠ %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "لا توجد أعمال محÙوظة." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "ÙØ´Ù„ ÙÙŠ الحصول على سجلات الأخطاء. هل برنامج gdb مثبت؟" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "ÙØ´Ù„ ÙÙŠ تحميل الصورة" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "هذا المل٠يبدو أنه ليس صورة:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 #, fuzzy msgid "Page %1" msgstr "ØµÙØ­Ø©: %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "صور PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Ø§Ø­ÙØ¸ الصورة المختارة" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "التعر٠الضوئي للكل" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "التعر٠على التحديد" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "إجراء تحليل للتخطيط" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 #, fuzzy msgid "Select folder..." msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "لا توجد اقتراحات" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Ø¥Ø¶Ø§ÙØ© إلى القاموس" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "تجاهل الكلمة" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "كتلة النص" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "الÙقرة" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "السطر" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "تصويري" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "ÙØ´Ù„ ÙÙŠ التصدير" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ÙØ´Ù„ ÙÙŠ التصدير: كتابة المخرجات غير ممكنة." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "تصدير بصيغة ODT وورد..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "تم إلغاء العملية" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "ÙØ´Ù„ ÙÙŠ محاولة رسم Ø§Ù„ØµÙØ­Ø© %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Ø­ÙØ¸ بصيغة PDF نصي..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "ÙØ´Ù„ ÙÙŠ تصدير PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "مكتبة PDF لا يمكنها تحميل هذا الخط '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "أسود وأبيض" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "أقرب لون" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "انتشار لوني" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (Ø¨Ù†ÙØ³ جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (Ø¨Ù†ÙØ³ جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "JPG (أقل من جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Ø¨Ù†ÙØ³ نسق المصدر" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "تهيئة خاصة" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "سنتيمتر" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "بوصة" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "عملية تصدير المل٠النصي ÙØ´Ù„ت: لا يمكن كتابة المل٠على الحاسوب." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "كتلة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "السطر" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "الكلمة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "كلمة خاطئة إملائيا" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "عرض قيم الثقة للتعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Ø§Ù„ØµÙØ­Ø§Øª التالية لا يمكن معالجتها:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "أخطاء ÙÙŠ التعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "قيم متعددة" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "دمج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "تبديل" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Ø¥Ø¶Ø§ÙØ© منطقة للتعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Ø¥Ø¶Ø§ÙØ© كتلة نص" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Ø¥Ø¶Ø§ÙØ© Ùقرة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Ø¥Ø¶Ø§ÙØ© سطر" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Ø¥Ø¶Ø§ÙØ© كلمة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "مل٠HTML بصيغة hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 #, fuzzy msgid "" "The following files could not be opened:\n" "%1" msgstr "لا يمكن ÙØªØ­ Ø§Ù„Ù…Ù„ÙØ§Øª التالية:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 #, fuzzy msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "هذا المل٠لا يبدو أنه يحتوي على hOCR HTML صالح: %1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "لا يمكن ÙØªØ­ Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "المخرج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Ø§Ø­ÙØ¸ مخرج hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "ÙØ´Ù„ت عملية Ø­ÙØ¸ المخرج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "قم بالتأكد أنك تملك صلاحية كتابة Ø§Ù„Ù…Ù„ÙØ§Øª ÙÙŠ المجلد المحدد." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "مستندات من نوع OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Ø§Ø­ÙØ¸ بصيغة ODT وورد..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Ù…Ù„ÙØ§Øª PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Ø­ÙØ¸ مخرج الـPDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "مخرج خاطئ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "لا يمكن استبدال المل٠المصدر لهذا المستند." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Ù…Ù„ÙØ§Øª نصية txt" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Ø§Ø­ÙØ¸ بصيغة مل٠نصي txt..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "المخرج لم يتم Ø­ÙØ¸Ù‡" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ø­ÙØ¸ المخرج قبل المتابعة؟" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "جار الاستبدال..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "جار تطبيق الاستبدالات..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "باستخدام محرك التعر٠tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "اختر صورة للبدء..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 #, fuzzy msgid "Multiple sources (%1)" msgstr "مصادر متعددة" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "مستعد" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "نسخة جديدة" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "البرنامج gImageReader %1 Ù…ØªÙˆÙØ±" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "تنزيل" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "سجل التغييرات" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "لا تقم بإعلامي مرة أخرى" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "لا تعرض هذا مرة أخرى" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "تثبيت" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "قاموس التدقيق الإملائي غير موجود" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "قاموس التدقيق الإملائي لـ %1 غير مثبت" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "جار تثبيت قاموس التدقيق الإملائي لـ '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "خطأ" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "ÙØ´Ù„ ÙÙŠ تثبيت قاموس التدقيق الإملائي: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "ÙØ´Ù„ ÙÙŠ إنشاء مجلد قواميس التدقيق الإملائي." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "لا يمكن قراءة %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "جار التنزيل '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "هذا القواميس لا يمكن تنزيلها \n" "%1\n" "\n" "تأكد من اتصالك بالشبكة وصلاحيات المجلد\n" "تلميح: إذا كان لا يمكنك الكتابة ÙÙŠ مجلدات النظام، يمكنك أن تتحول إلى مسار " "المستخدمين ÙÙŠ الإعدادت." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "القواميس تم تثبيتها" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "هذه القواميس تم تثبيتها:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "لا يتم العثور على قواميس تدقيق إملائي لـ '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 #, fuzzy msgid "Page: %1\n" msgstr "ØµÙØ­Ø©: %1" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "تم لصق %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "المخرج لم يتم Ø­ÙØ¸Ù‡" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Ø­ÙØ¸ المخرج قبل المتابعة؟" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "إزالة كسر السطور..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Ø§ÙØ­Øµ إملائيا" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "ملÙ: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "ØµÙØ­Ø©: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[خطأ ÙÙŠ التعر٠الضوئي Ù„Ù„ØµÙØ­Ø© %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Ø­ÙØ¸ المخرج..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "لا توجد لغات متاحة" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "لا توجد لغات تعر٠ضوئي لمحرك التعر٠tesseract. التعر٠الضوئي لن يعمل." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "بلغات متعددة" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "تقسيم تخطيط Ø§Ù„ØµÙØ­Ø© بشكل تلقائي" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "تقسيم تخطيط Ø§Ù„ØµÙØ­Ø© مع التعر٠التلقائي للغة واتجاه Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "اعتبر النص ÙÙŠ عمود واحد" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "اعتبر كتلة نص واحدة مضبوطة عموديا" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "اعتبر كتلة نص واحدة" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "اعتبر نص ÙÙŠ سطر واحد" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "اعتبر وجود كلمة واحدة" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "اعتبر وجود كلمة واحدة ÙÙŠ دائرة" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "نص متناثر بدون أي ترتيب" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "نص متناثر مع التعر٠التلقائي لاتجاه Ø§Ù„ØµÙØ­Ø© واللغة" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "وضعية تخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "إدارة اللغات..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "التحديد الحالي" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "حدثت أخطاء ÙÙŠ التعر٠الضوئي" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "ÙØ´Ù„ ÙÙŠ تهيئة محرك التعر٠الضوئي tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "جار التعر٠الضوئي على Ø§Ù„ØµÙØ­Ø© %1 (%2 من %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 #, fuzzy msgid "- Page %1: failed to render page" msgstr "" "\n" "- Ø§Ù„ØµÙØ­Ø© %1: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "جار التعر٠الضوئي.." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 #, fuzzy msgid "- %1:%2: failed to render page" msgstr "" "\n" "- Ø§Ù„ØµÙØ­Ø© %1: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "ÙØ´Ù„ ÙÙŠ إنشاء المخرج" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 #, fuzzy msgid "The following errors occurred:" msgstr "حدثت الأخطاء التالية: %1" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "تم إلغاء المسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "لم يتم تحديد ماسحات ضوئية" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "غير قادر على الاتصال بالماسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "غير قادر على بدء عملية المسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "حدث خطأ أثناء الاتصال بالماسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "خطأ أثناء Ø­ÙØ¸ الصورة" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "تم إلغاء العملية." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "الجهاز مشغول." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "الغطاء Ù…ÙØªÙˆØ­." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "علبة تغذية المستندات متحشرجة." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "علبة تغذية المستندات ÙØ§Ø±ØºØ©." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "تم منع الوصول إلى الماسح الضوئي." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "أدخل كلمة السر للمل٠'%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "Ù…Ù„ÙØ§Øª PDF مع نص" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "هذه PDF تحتوي على نصوص Ø¨Ø§Ù„ÙØ¹Ù„:\n" "%1" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "صور ÙˆÙ…Ù„ÙØ§Øª PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "خطأ ÙÙŠ Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "خطأ أثناء القراءة من Ø§Ù„Ø­Ø§ÙØ¸Ø©." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "تم لصق %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "خطأ ÙÙŠ لقطة الشاشة" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "خطأ أثناء التقاط الشاشة." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "لطقة شاشة %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "جار Ø­ÙØ¸ الصورة..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "لا يمكن كتابة الملÙ" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "لا يمكن الكتابة ÙÙŠ %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØŸ" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "Ø§Ø­ÙØ¸ النص المخرج" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "مل٠ناقص" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "هذا المل٠تم حذÙÙ‡ أو نقله:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "ابحث عن" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "استبدل بـ" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "ÙØªØ­ مل٠قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "خطأ أثناء قراءة الملÙ" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "لا يمكن قراءة '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "حدثت أخطاء أثناء قراءة الملÙ" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "بعض المدخلات ÙÙŠ قائمة الاستبدالات لا يمكن قراءتها." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Ø­ÙØ¸ مل٠قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "حدث خطأ أثناء Ø­ÙØ¸ الملÙ" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "لا يمكن الكتابة ÙÙŠ '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Ø§Ø­ÙØ¸ القائمة؟" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "هل تود Ø­ÙØ¸ القائمة الحالية؟" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 #, fuzzy msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "يوجد أدوات ناقصة ÙÙŠ محرك التعر٠الضوئي. قم بالتأكد من الإعدادات." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "جار تغذية Ø§Ù„Ù…Ù„ÙØ§Øª الموجودة" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "خطأ أثناء تغذية قائمة اللغات المتاحة: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "خطأ أثناء التمرير: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "جار تطبيق التغييرات..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "ÙØ´Ù„ أثناء إنشاء مجلد Ù…Ù„ÙØ§Øª لغات التعر٠الضوئي tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "جار التنزيل %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "هذه Ø§Ù„Ù…Ù„ÙØ§Øª لا يمكن تنزيلها أو أنها أزيلت:\n" "%1\n" "تأكد من الاتصال بالشبكة وأذونات المجلد\n" "\n" "تلميح: إذا كنت لا تملك صلاحية الكتابة ÙÙŠ مجلدات النظام، يمكنك استخدام مسار " "المستخدمين ÙÙŠ الإعدادات." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "نعم" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "لا" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "تجاوز" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "تجاوز" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "السطر" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "صيغة PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "نبذة عن برنامج gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

برنامج واجهة لمحرك التعر٠الضوئي " "tesseract-ocr

الموقع

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "المحسوبية" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "الترخيص" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "ترميز النظام" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8 يونيكود" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "ترميز المل٠النصي:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "لقد انهار التطبيق\n" "\n" "عذرا لهذا الإزعاج. للمساعدة ÙÙŠ تحسين التطبيق، ÙØ¶Ù„ا ضغ ÙÙŠ اعتبارك الإبلاغ عن " "المشكلة إلى manisandro@gmail.com. Ù„Ø·ÙØ§ حاول وص٠ما " "كنت ØªÙØ¹Ù„Ù‡ قبل انهيار التطبيق، أيضا أرÙÙ‚ هذه البيانات بالأسÙÙ„ØŒ شكرا لك." #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "مسطح" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "الجهة العلوية من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "الجهة السÙلية من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "الجهتين من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "تكبير" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "تصغير" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "الحجم العادي" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ø£ÙØ¶Ù„ تلاؤم" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "تدوير إلى اليسار" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "تدوير إلى اليسار" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "تدوير إلى اليمين" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "تدوير إلى اليمين" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "أزرار التحكم بالصورة" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "تعر٠تلقائي على التخطيط" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "تبديل شاشة المخرجات" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "تصدير PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "محرك كتابة PDF:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "بالطول" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "بالعرض" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "خطأ أثناء كتابة الملÙ" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Ø§Ø­ÙØ¸ بصيغة hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "بحث واستبدال" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "عرض كمثال" #: ../qt/src/MainWindow.cc:624 #, fuzzy msgid "" "The following dictionary files were installed:\n" "%1" msgstr "القاموس التالي غير مثبت:%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "اسم المل٠المصور" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØŸ" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Ø§Ù„Ù…Ù„ÙØ§Øª التالية لا يمكن تنزيلها أو أنها قد أزيلت:\n" "%1\n" "تأكد من اتصالك بالشبكة وأذونات المجلد.\n" "تلميح: إذا لم يكن لديك صلاحية على مجلدات النظام، قم بالتغيير إلى مسار " "المستخدم ÙÙŠ الإعدادات." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "المخرج" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "وضعية التعر٠الضوئي:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "Ø¥Ø¶Ø§ÙØ© كلمة" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "لصق" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ø­ÙØ¸ لقطة شاشة" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "إزالة الصورة" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "حذ٠الصورة" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "مسح القائمة بالكامل" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "احذ٠كسر السطور" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Ø§Ø­ÙØ¸ المخرج" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "امسح المخرج" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "النسق:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "المل٠المسمى \"%1\" موجود Ø¨Ø§Ù„ÙØ¹Ù„. هل أنت متأكد أنك تريد استبداله؟" #~ msgid "Overwrite File?" #~ msgstr "استبدال Ø§Ù„Ù…Ù„ÙØŸ" #~ msgid "Recent" #~ msgstr "مستخدم مؤخراً" #~ msgid "Failed to create output" #~ msgstr "ÙØ´Ù„ ÙÙŠ إنشاء المخرج" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "ÙØ´Ù„ ÙÙŠ إنشاء المخرج. سجل الخطأ هو: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

حدث خطأ ÙÙŠ " #~ "البرنامج

نعتذر لكم، لتطوير البرنامج يرجى التبليغ عن هذه " #~ "المشكلة لـ manisandro@gmail.com. ÙØ¶Ù„ا قم بتوضيح " #~ "ما كنت تعمله قبيل حدوث الخطأ. قم بإلحاق هذه البيانات أيضا بالأسÙÙ„. شكراً " #~ "لك.

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "مثال:1-11,13, 15-19" #, fuzzy #~ msgid "plain text" #~ msgstr "نص عادي txt" #~ msgid "Multiple sources" #~ msgstr "مصادر متعددة" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Ø§Ù„ØµÙØ­Ø© %1: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #~ msgid "The following errors occurred:%1" #~ msgstr "حدثت الأخطاء التالية: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "هذه Ø§Ù„Ù…Ù„ÙØ§Øª سو٠يتم حذÙها:%1" #~ msgid "The application has crashed" #~ msgstr "حدث خطأ Ù…ÙØ§Ø¬Ø¦ ÙÙŠ البرنامج" #~ msgid "Failed to open file" #~ msgstr "ÙØ´Ù„ت عملية ÙØªØ­ الملÙ" #~ msgid "The file could not be opened: %1." #~ msgstr "هذ المل٠لا يمكن ÙØªØ­Ù‡: %1." #~ msgid "Invalid hOCR file" #~ msgstr "مل٠hOCR غير صالح" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "محرك التعر٠الضوئي Tesseract قام بخطأ Ù…ÙØ§Ø¬Ø¦ مع هذه الرسالة:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "هذا يحدث عادة لأحد هذه الأسباب:\n" #~ "- استخدام مل٠تعر٠ضوئي قديم traineddata.\n" #~ "- Ù…Ù„ÙØ§Øª إضاÙية للغة ناقصة.\n" #~ "- Ù…Ù„ÙØ§Øª تعر٠ضوئي للغة معطوبة.\n" #~ "\n" #~ "تأكد أن مل٠لغة التعر٠الضوئي متواÙÙ‚ مع tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "لا يمكن قراءة %1: %2" gImageReader-3.4.0/po/ar_SA.po000066400000000000000000002514641417507262200160170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2020-04-12 18:11+0000\n" "Last-Translator: Alaa Sayed \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_SA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 4.0-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "برنامج التعر٠الضوئي" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "إعادة تحميل لغات التعر٠الضوئي" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "إدارة لغات التعر٠الضوئي" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "خيارات" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "مساعدة" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "نبذة" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "إنهاء البرنامج" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Ùلتر الحرو٠المسموح / غير المسموح" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "اعزل هذه الحرو٠عن التعر٠(غير مسموحة):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "أدخل كلمة مكونة من حروÙ..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Ùقط تعر٠على قائمة الحرو٠هذه (مسموح بها):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "تم" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "اتجاه شاشة المخرجات:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Ø£Ùقي" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "عمودي" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "طلب تثبيت قواميس الإملاء غير المثبتة" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "البحث عن تحديثات البرنامج تلقائيا" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ØªØ¹Ø±ÙŠÙØ§Øª اللغات الموجودة:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "ØªØ¹Ø±ÙŠÙØ§Øª اللغات الإضاÙية:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "تعري٠مل٠اللغة ÙÙŠ محرك التعر٠الضوئي" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "تعريÙ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "رمز اللغة ISO-639-1 متبوعا برمز الدولة" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "رمز ISO القياسي" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "اسم اللغة" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "الاسم" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "إلغاء" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "خط شاشة المخرجات:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "مكان مجلد لغات التعر٠الضوئي ÙÙŠ النظام:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "مسار مجلد لغات التعر٠الضوئي ÙÙŠ الحاسوب:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "مسار قواميس التدقيق الإملائي:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "مسار Ø§Ù„Ù…Ù„ÙØ§Øª على مستوى النظام" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "مسار Ø§Ù„Ù…Ù„ÙØ§Øª على مستوى المستخدم" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "ÙØªØ­ المستندات المخرجة باستخدام البرامج Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ©" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "إعادة إنشاء سجلات الأخطاء" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "حصل خطأ ما ÙÙŠ البرنامج\n" "\n" "عذرا لهذا الإزعاج. لتطوير البرنامج، ÙØ¶Ù„ا قم بإخبار مبرمج البرنامج عن هذا " "الخطأ manisandro@gmail.com. ووضح ما كنت ØªÙØ¹Ù„Ù‡ " "قبل حدوث هذا الخطأ Ø§Ù„Ù…ÙØ§Ø¬Ø¦ØŒ أيضا أرÙÙ‚ هذه البيانات بالأسÙÙ„ØŒ شكرا لك." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "محرك التعر٠الضوئي ÙØ´Ù„ ÙÙŠ التنÙيذ\n" "\n" "خطأ غير معروÙ!\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "تطبيق" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "إغلاق" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "النسق:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "المخرج:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "صيغة المخرجات:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "اسم المل٠المصور" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "خيارات أخرى" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "تبديل مكان شاشة المخرجات" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "تدوير اتجاه Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "تدوير اتجاه كل Ø§Ù„ØµÙØ­Ø§Øª" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "أزل وقم بتعديل بعض المسميات التي يصر المصمم على Ø¥Ø¶Ø§ÙØªÙ‡Ø§" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Ø¥Ø¶Ø§ÙØ© صور" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Ø¥Ø¶Ø§ÙØ© صور" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "إلغاء الصورة من القائمة" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "حذ٠صورة" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "مسح القائمة" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "مصغرات صورية" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "الجهاز:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "تحديث" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "المخرج:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "الصيغة:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "اللون" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "تدرج الرمادي" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "الدقة النقطية:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "مسح ضوئي" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "المصدر:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "الحصول" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "السطوع" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "التباين" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "الدقة النقطية" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "عكس الألوان" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "تكبير" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "تصغير" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "المقاس العادي" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ø£ÙØ¶Ù„ تلاؤم" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "تدوير اتجاه Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "اختر وضعية جهة الدوران" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "اختر وضعية الإدخال" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "اختر Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "أزرار التحكم بالصورة" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "نص عادي txt" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "صيغة PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "تعر٠تلقائي لتخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "التعر٠الضوئي للكل" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "اختر اللغة" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "تصدير" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "برنامج واجهة لمحرك التعر٠الضوئي tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "الوضع المتعدد ÙÙŠ آن" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "ÙÙŠ الوضع المتعدد، كل من المدخلات يتم معالجتها بشكل Ù…Ù†ÙØµÙ„ والمخرجات يتم Ø­ÙØ¸Ù‡Ø§ " "جنبا إلى جنب ÙÙŠ المل٠المدخل." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "المخرج الحالي:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "ألحق أرقام Ø§Ù„ØµÙØ­Ø§Øª بنص شاشة المخرجات" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "تعر٠تلقائي لتخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "مجال Ø§Ù„ØµÙØ­Ø§Øª" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "مجال Ø§Ù„ØµÙØ­Ø§Øª:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "مثال:1-11,13, 15-19" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "مساحة التعر٠الضوئي:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "كامل Ø§Ù„ØµÙØ­Ø©" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "تعر٠تلقائي" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "ألحق المخرج الحالي بنص شاشة المخرجات:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "اسم المل٠المصور" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "مصدر المصورات" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF محمي بكلمة سر" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "ØµÙØ­Ø§Øª متعددة..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "الوضع المتعدد ÙÙŠ آن..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Ø¥Ø¶Ø§ÙØ© كلمة" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "أدخل كلمة:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "أض٠النص الجديد بعد آخر ØµÙØ­Ø©" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "أض٠النص الجديد قبل Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "تصدير نص txt" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "تصدير PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "تصدير ODT وورد" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "أض٠المستند بعد Ø§Ù„ØµÙØ­Ø© الأخيرة" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "أض٠المستند قبل Ø§Ù„ØµÙØ­Ø© الحالية" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Ø­ÙØ¸ المخرج" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "تصدير" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "مسح القائمة" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "بحث واستبدال" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "عرض قيم الثقة للتعر٠الضوئي" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "عرض كمثال" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "التالي (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "السابق (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "عرض الكل" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "تجميع المعروض" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "خصائص" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "المصدر" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "إلحاق بالنص المخرج الحالي" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "أدرج عند المؤشر" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "استبدل النص الحالي" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Ø§Ø­ØªÙØ¸ بإدراج السطر التالي إذا..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "كان مسبوقا بعلامة ترقيم توق٠(.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "مسبوقا أو متبوعا بعلامة تنصيص" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "خيارات أخرى" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "ربط الكلمات المتقطعة ب -" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "جمع Ø§Ù„Ù…Ø³Ø§ÙØ§Øª" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Ø§Ø­ØªÙØ¸ بالÙقرات" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "مساعدة مرئية" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Ø§Ø­Ø°Ù Ø§Ù„Ù…Ø³Ø§ÙØ©" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "احذ٠كسر السطر التالي للنص المحدد" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "تراجع" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "إعادة ÙØ¹Ù„" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "صيغة المخرجات:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF المصور الأصلي مع وجود نص بالخلÙية" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "الضغط:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "مقدار الضغط:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "الدقة النقطية:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "خوارزمية التحويل لأسود وأبيض:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "إعدادات الصورة:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "وحد السطر مع Ù…Ø³Ø§ÙØ© الكلمة" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "حدد خطا Ù…Ø®ØªÙ„ÙØ§:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "ÙÙŠ حال عدم ØªÙˆÙØ± الخط:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "تحديد حجم الخط:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "مقياس الخط:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "نقطة" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Ø§Ø­ØªÙØ¸ Ø¨Ø§Ù„Ù…Ø³Ø§ÙØ§Øª الأكبر من:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "الحروÙ" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "قم بوصل قواطع اللغة الإنجليزية قبل انتهاء الأسطر" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "إعدادات النص:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "مقاس Ø§Ù„ØµÙØ­Ø©:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "العرض" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "الطول" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "عامل الصورة وكأنها ذات دقة نقطية:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "الأساسي" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "النسخة الرقمية للـ PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "كلمة السر:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "تأكيد كلمة السر:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "التشÙير (اختياري):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "المؤلÙ:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "العنوان:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "الموضوع:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "صانع الملÙ:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "منتج الملÙ:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "الكلمات Ø§Ù„Ù…ÙØªØ§Ø­ÙŠØ©:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "معلومات أخرى(اختياري):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "استخرج من المصدر الحالي" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "متقدم" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "بحث" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "استبدال" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "استبدال الكل" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "بحث سابق" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "بحث لاحق" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "طابق نسق الحر٠case للإنجليزي" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "استبدالات" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "حذÙ" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "الترتيب:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "تعر٠ضوئي" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "تعر٠ضوئي إلى Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Ø§Ø­ÙØ¸ كصورة" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "ÙØªØ­" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Ø­ÙØ¸" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "مسح الكل" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Ø¥Ø¶Ø§ÙØ©" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "إلغاء" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "مدير Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "إدارة لغات التعر٠المثبتة:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "صور" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "اختر اسم المل٠للمخرج..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "ÙØ´Ù„ ÙÙŠ تهيئة المسح الضوئي." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "ÙØ´Ù„ المسح الضوئي" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "لم يتم اكتشا٠أي ماسحات ضوئية." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "بدء المسح الضوئي..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "ÙØªØ­ جهاز..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "خيارات الإعدادات..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "الحصول على المدخلات..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "نقل البيانات..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "إلغاء المسح الضوئي..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "بادئة اسم الملÙ" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "الرمز" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "الاسم الأصلي" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "اسكريبت" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "مدير أخطاء البرنامج" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "عملك تم Ø­ÙØ¸Ù‡ ÙÙŠ %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "لا توجد أعمال محÙوظة." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "ÙØ´Ù„ ÙÙŠ الحصول على سجلات الأخطاء. هل برنامج gdb مثبت؟" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "ÙØ´Ù„ ÙÙŠ تحميل الصورة" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "هذا المل٠يبدو أنه ليس صورة:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "ØµÙØ­Ø©: %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "صور PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Ø§Ø­ÙØ¸ الصورة المختارة" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "التعر٠الضوئي للكل" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "التعر٠على التحديد" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "إجراء تحليل للتخطيط" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 #, fuzzy msgid "Select folder..." msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "لا توجد اقتراحات" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Ø¥Ø¶Ø§ÙØ© إلى القاموس" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "تجاهل الكلمة" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "كتلة النص" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "الÙقرة" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "السطر" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "تصويري" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "ÙØ´Ù„ ÙÙŠ التصدير" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ÙØ´Ù„ ÙÙŠ التصدير: كتابة المخرجات غير ممكنة." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "تصدير بصيغة ODT وورد..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "تم إلغاء العملية" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "ÙØ´Ù„ ÙÙŠ محاولة رسم Ø§Ù„ØµÙØ­Ø© %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Ø­ÙØ¸ بصيغة PDF نصي..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "ÙØ´Ù„ ÙÙŠ تصدير PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "مكتبة PDF لا يمكنها تحميل هذا الخط '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "أسود وأبيض" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "أقرب لون" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "انتشار لوني" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (Ø¨Ù†ÙØ³ جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (Ø¨Ù†ÙØ³ جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "JPG (أقل من جودة الأصل)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Ø¨Ù†ÙØ³ نسق المصدر" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "تهيئة خاصة" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "سنتيمتر" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "بوصة" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "عملية تصدير المل٠النصي ÙØ´Ù„ت: لا يمكن كتابة المل٠على الحاسوب." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "كتلة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "السطر" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "الكلمة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "كلمة خاطئة إملائيا" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "عرض قيم الثقة للتعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Ø§Ù„ØµÙØ­Ø§Øª التالية لا يمكن معالجتها:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "أخطاء ÙÙŠ التعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "قيم متعددة" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "دمج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Ø§ÙØµÙ„ عن الأصل" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "تبديل" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Ø¥Ø¶Ø§ÙØ© منطقة للتعر٠الضوئي" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Ø¥Ø¶Ø§ÙØ© كتلة نص" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Ø¥Ø¶Ø§ÙØ© Ùقرة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Ø¥Ø¶Ø§ÙØ© سطر" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Ø¥Ø¶Ø§ÙØ© كلمة" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "مل٠HTML بصيغة hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "ÙØªØ­ مل٠hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "لا يمكن ÙØªØ­ Ø§Ù„Ù…Ù„ÙØ§Øª التالية:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "هذا المل٠لا يبدو أنه يحتوي على hOCR HTML صالح:\n" " %1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "لا يمكن ÙØªØ­ Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "المخرج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Ø§Ø­ÙØ¸ مخرج hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "ÙØ´Ù„ت عملية Ø­ÙØ¸ المخرج" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "قم بالتأكد أنك تملك صلاحية كتابة Ø§Ù„Ù…Ù„ÙØ§Øª ÙÙŠ المجلد المحدد." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "مستندات من نوع OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Ø§Ø­ÙØ¸ بصيغة ODT وورد..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Ù…Ù„ÙØ§Øª PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Ø­ÙØ¸ مخرج الـPDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "مخرج خاطئ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "لا يمكن استبدال المل٠المصدر لهذا المستند." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Ù…Ù„ÙØ§Øª نصية txt" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Ø§Ø­ÙØ¸ بصيغة مل٠نصي txt..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "المخرج لم يتم Ø­ÙØ¸Ù‡" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ø­ÙØ¸ المخرج قبل المتابعة؟" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "جار الاستبدال..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "جار تطبيق الاستبدالات..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "باستخدام محرك التعر٠tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "اختر صورة للبدء..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "مصادر متعددة (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "مستعد" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "نسخة جديدة" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "البرنامج gImageReader %1 Ù…ØªÙˆÙØ±" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "تنزيل" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "سجل التغييرات" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "لا تقم بإعلامي مرة أخرى" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "لا تعرض هذا مرة أخرى" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "تثبيت" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "قاموس التدقيق الإملائي غير موجود" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "قاموس التدقيق الإملائي لـ %1 غير مثبت" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "جار تثبيت قاموس التدقيق الإملائي لـ '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "خطأ" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "ÙØ´Ù„ ÙÙŠ تثبيت قاموس التدقيق الإملائي: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "ÙØ´Ù„ ÙÙŠ إنشاء مجلد قواميس التدقيق الإملائي." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "لا يمكن قراءة %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "جار التنزيل '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "هذا القواميس لا يمكن تنزيلها \n" "%1\n" "\n" "تأكد من اتصالك بالشبكة وصلاحيات المجلد\n" "تلميح: إذا كان لا يمكنك الكتابة ÙÙŠ مجلدات النظام، يمكنك أن تتحول إلى مسار " "المستخدمين ÙÙŠ الإعدادت." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "القواميس تم تثبيتها" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "هذه القواميس تم تثبيتها:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "لا يتم العثور على قواميس تدقيق إملائي لـ '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "ØµÙØ­Ø©: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "تم لصق %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "المخرج لم يتم Ø­ÙØ¸Ù‡" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Ø­ÙØ¸ المخرج قبل المتابعة؟" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "إزالة كسر السطور..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Ø§ÙØ­Øµ إملائيا" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "ملÙ: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "ØµÙØ­Ø©: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[خطأ ÙÙŠ التعر٠الضوئي Ù„Ù„ØµÙØ­Ø© %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "اختر Ù…Ù„ÙØ§Øª" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Ø­ÙØ¸ المخرج..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "لا توجد لغات متاحة" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "لا توجد لغات تعر٠ضوئي لمحرك التعر٠tesseract. التعر٠الضوئي لن يعمل." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "بلغات متعددة" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "تقسيم تخطيط Ø§Ù„ØµÙØ­Ø© بشكل تلقائي" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "تقسيم تخطيط Ø§Ù„ØµÙØ­Ø© مع التعر٠التلقائي للغة واتجاه Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "اعتبر النص ÙÙŠ عمود واحد" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "اعتبر كتلة نص واحدة مضبوطة عموديا" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "اعتبر كتلة نص واحدة" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "اعتبر نص ÙÙŠ سطر واحد" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "اعتبر وجود كلمة واحدة" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "اعتبر وجود كلمة واحدة ÙÙŠ دائرة" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "نص متناثر بدون أي ترتيب" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "نص متناثر مع التعر٠التلقائي لاتجاه Ø§Ù„ØµÙØ­Ø© واللغة" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "وضعية تخطيط Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "قائمة الحرو٠المسموح بها / غير المسموح بها..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "إدارة اللغات..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "استبدل المخرجات الحالية" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "تجاهل معالجة المدخلات" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "التحديد الحالي" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "حدثت أخطاء ÙÙŠ التعر٠الضوئي" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "ÙØ´Ù„ ÙÙŠ تهيئة محرك التعر٠الضوئي tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "جار التعر٠الضوئي على Ø§Ù„ØµÙØ­Ø© %1 (%2 من %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- ØµÙØ­Ø© %1: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "جار التعر٠الضوئي.." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: المخرج موجود Ø¨Ø§Ù„ÙØ¹Ù„ØŒ تم التجاهل" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: ÙØ´Ù„ ÙÙŠ إنشاء المخرج" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "حدثت الأخطاء التالية:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "تم إلغاء المسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "لم يتم تحديد ماسحات ضوئية" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "غير قادر على الاتصال بالماسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "غير قادر على بدء عملية المسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "حدث خطأ أثناء الاتصال بالماسح الضوئي" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "خطأ أثناء Ø­ÙØ¸ الصورة" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "تم إلغاء العملية." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "الجهاز مشغول." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "الغطاء Ù…ÙØªÙˆØ­." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "علبة تغذية المستندات متحشرجة." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "علبة تغذية المستندات ÙØ§Ø±ØºØ©." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "تم منع الوصول إلى الماسح الضوئي." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "أدخل كلمة السر للمل٠'%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "Ù…Ù„ÙØ§Øª PDF مع نص" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "هذه PDF تحتوي على نصوص Ø¨Ø§Ù„ÙØ¹Ù„:\n" "%1\n" "ÙØªØ­ على أية حال؟" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "صور ÙˆÙ…Ù„ÙØ§Øª PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "خطأ ÙÙŠ Ø§Ù„Ø­Ø§ÙØ¸Ø©" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "خطأ أثناء القراءة من Ø§Ù„Ø­Ø§ÙØ¸Ø©." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "تم لصق %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "خطأ ÙÙŠ لقطة الشاشة" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "خطأ أثناء التقاط الشاشة." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "لطقة شاشة %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "جار Ø­ÙØ¸ الصورة..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "لا يمكن كتابة الملÙ" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "لا يمكن الكتابة ÙÙŠ %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØŸ" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "حذ٠هذه Ø§Ù„Ù…Ù„ÙØ§ØªØŸ" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "Ø­ÙØ¸ المخرج" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "مل٠ناقص" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "هذا المل٠تم حذÙÙ‡ أو نقله:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "ابحث عن" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "استبدل بـ" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "ÙØªØ­ مل٠قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "خطأ أثناء قراءة الملÙ" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "لا يمكن قراءة '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "حدثت أخطاء أثناء قراءة الملÙ" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "بعض المدخلات ÙÙŠ قائمة الاستبدالات لا يمكن قراءتها." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Ø­ÙØ¸ مل٠قائمة الاستبدالات" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "حدث خطأ أثناء Ø­ÙØ¸ الملÙ" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "لا يمكن الكتابة ÙÙŠ '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Ø§Ø­ÙØ¸ القائمة؟" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "هل تود Ø­ÙØ¸ القائمة الحالية؟" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "يوجد أدوات ناقصة ÙÙŠ محرك التعر٠الضوئي. قم بالتأكد من الإعدادات." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "جار تغذية Ø§Ù„Ù…Ù„ÙØ§Øª الموجودة" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "خطأ أثناء تغذية قائمة اللغات المتاحة: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "خطأ أثناء التمرير: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "جار تطبيق التغييرات..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "ÙØ´Ù„ أثناء إنشاء مجلد Ù…Ù„ÙØ§Øª لغات التعر٠الضوئي tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "جار التنزيل %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "هذه Ø§Ù„Ù…Ù„ÙØ§Øª لا يمكن تنزيلها أو أنها أزيلت:\n" "%1\n" "تأكد من الاتصال بالشبكة وأذونات المجلد\n" "\n" "تلميح: إذا كنت لا تملك صلاحية الكتابة ÙÙŠ مجلدات النظام، يمكنك استخدام مسار " "المستخدمين ÙÙŠ الإعدادات." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "نعم" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "نعم للكل" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "لا" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "لا للكل" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "تجاوز" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "تجاوز" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "السطر" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "صيغة PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "نبذة عن برنامج gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

برنامج واجهة لمحرك التعر٠الضوئي " "tesseract-ocr

الموقع

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "المحسوبية" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "الترخيص" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "ÙÙŠ الوضع المتعدد، كل من المدخلات يتم معالجتها بشكل Ù…Ù†ÙØµÙ„ والمخرجات يتم Ø­ÙØ¸Ù‡Ø§ " "جنبا إلى جنب ÙÙŠ المل٠المدخل." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "ترميز النظام" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8 يونيكود" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "ترميز المل٠النصي:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "حصل خطأ ما ÙÙŠ البرنامج\n" "\n" "عذرا لهذا الإزعاج. لتطوير البرنامج، ÙØ¶Ù„ا قم بإخبار مبرمج البرنامج عن هذا " "الخطأ manisandro@gmail.com. ووضح ما كنت ØªÙØ¹Ù„Ù‡ " "قبل حدوث هذا الخطأ Ø§Ù„Ù…ÙØ§Ø¬Ø¦ØŒ أيضا أرÙÙ‚ هذه البيانات بالأسÙÙ„ØŒ شكرا لك." #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "محرك التعر٠الضوئي ÙØ´Ù„ ÙÙŠ التنÙيذ\n" "\n" "خطأ غير معروÙ!\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "مسطح" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "الجهة العلوية من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "الجهة السÙلية من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "الجهتين من علبة تغذية المستندات" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "تكبير" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "تصغير" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "المقاس العادي" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ø£ÙØ¶Ù„ تلاؤم" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "تدوير لليسار" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "تدوير لليسار" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "تدوير لليمين" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "تدوير لليمين" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "أزرار التحكم بالصورة" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "تعر٠تلقائي لتخطيط Ø§Ù„ØµÙØ­Ø©" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "تبديل شاشة المخرجات" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "تصدير PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "محرك كتابة PDF:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "بالطول" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "بالعرض" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "خطأ أثناء كتابة الملÙ" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: ÙŠÙˆÙØ± ضغطاً أعلى لكنه غير متواÙÙ‚ مع اللغات " "غير اللاتينية كالعربية.
  • QPrinter: ضغط أقل من نوع JPG ويدعم كل اللغات." "
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Ø§Ø­ÙØ¸ بصيغة hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "بحث واستبدال" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "عرض كمثال" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "القاموس التالي غير مثبت:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "اسم المل٠المصور" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Ø§Ù„Ù…Ù„ÙØ§Øª التالية لا يمكن تنزيلها أو أنها قد أزيلت:\n" "%1\n" "تأكد من اتصالك بالشبكة وأذونات المجلد.\n" "تلميح: إذا لم يكن لديك صلاحية على مجلدات النظام، قم بالتغيير إلى مسار " "المستخدم ÙÙŠ الإعدادات." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "المخرج" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "وضعية التعر٠الضوئي:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Ø¥Ø¶Ø§ÙØ© مجلد" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "لصق" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ø­ÙØ¸ لقطة شاشة" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "إزالة الصورة" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "حذ٠صورة" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "مسح القائمة" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "احذ٠كسر السطور" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Ø­ÙØ¸ المخرج" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "مسح القائمة" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "النسق:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "المل٠المسمى \"%1\" موجود Ø¨Ø§Ù„ÙØ¹Ù„. هل أنت متأكد أنك تريد استبداله؟" #~ msgid "Overwrite File?" #~ msgstr "استبدال Ø§Ù„Ù…Ù„ÙØŸ" #~ msgid "Recent" #~ msgstr "مستخدم مؤخراً" #~ msgid "Failed to create output" #~ msgstr "ÙØ´Ù„ ÙÙŠ إنشاء المخرج" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "ÙØ´Ù„ ÙÙŠ إنشاء المخرج. سجل الخطأ هو: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

حدث خطأ ÙÙŠ " #~ "البرنامج

نعتذر لكم، لتطوير البرنامج يرجى التبليغ عن هذه " #~ "المشكلة لـ manisandro@gmail.com. ÙØ¶Ù„ا قم بتوضيح " #~ "ما كنت تعمله قبيل حدوث الخطأ. قم بإلحاق هذه البيانات أيضا بالأسÙÙ„. شكراً " #~ "لك.

" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

توق٠محرك التعر٠" #~ "الضوئي لخطأ ما

خطأ ما قد حصل.

سجل الأخطاء مرÙÙ‚ بالأسÙÙ„." #~ "

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "مثال:1-11,13, 15-19" #, fuzzy #~ msgid "plain text" #~ msgstr "نص عادي txt" #~ msgid "Multiple sources" #~ msgstr "مصادر متعددة" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Ø§Ù„ØµÙØ­Ø© %1: لا يمكن رسم Ø§Ù„ØµÙØ­Ø©" #~ msgid "The following errors occurred:%1" #~ msgstr "حدثت الأخطاء التالية: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "هذه Ø§Ù„Ù…Ù„ÙØ§Øª سو٠يتم حذÙها:%1" #~ msgid "Failed to open file" #~ msgstr "ÙØ´Ù„ت عملية ÙØªØ­ الملÙ" #~ msgid "The file could not be opened: %1." #~ msgstr "هذ المل٠لا يمكن ÙØªØ­Ù‡: %1." #~ msgid "Invalid hOCR file" #~ msgstr "مل٠hOCR غير صالح" #~ msgid "The application has crashed" #~ msgstr "حدث خطأ Ù…ÙØ§Ø¬Ø¦ ÙÙŠ البرنامج" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "محرك التعر٠الضوئي Tesseract قام بخطأ Ù…ÙØ§Ø¬Ø¦ مع هذه الرسالة:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "هذا يحدث عادة لأحد هذه الأسباب:\n" #~ "- استخدام مل٠تعر٠ضوئي قديم traineddata.\n" #~ "- Ù…Ù„ÙØ§Øª إضاÙية للغة ناقصة.\n" #~ "- Ù…Ù„ÙØ§Øª تعر٠ضوئي للغة معطوبة.\n" #~ "\n" #~ "تأكد أن مل٠لغة التعر٠الضوئي متواÙÙ‚ مع tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "لا يمكن قراءة %1: %2" gImageReader-3.4.0/po/ca.po000066400000000000000000001751461417507262200154170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/cs.po000066400000000000000000002546251417507262200154410ustar00rootroot00000000000000# Czech translations for gImageReader package # Czech messages for gImageReader. # Copyright (C) 2010-2013 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Pavel Borecki , 2014-2017. # Sandro Mani , 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2020-05-02 18:11+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "optické rozpoznávání znaků (OCR)" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Znovu zjistit přítomnost jazykových dat" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Spravovat jazyková data" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "PÅ™edvolby" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "NápovÄ›da" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "O aplikaci" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "UkonÄit" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Seznam povolených/zakázaných znaků" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Vynechat tyto znaky z rozpoznávání (blacklist):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Zadejte Å™etÄ›zec znaků…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Povolit rozpoznávání pouze následujících znaků (whitelist):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientace podokna s výstupním textem:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "VodorovnÄ›" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Svisle" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Dotazovat se na instalaci chybÄ›jících slovníků pro kontrolu pÅ™eklepů" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automaticky zjišťovat případné novÄ›jší verze aplikace" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "PÅ™edpÅ™ipravené jazykové definice:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Další jazykové definice:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "PÅ™edpona souboru s jazykovými daty engine tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "PÅ™edpona" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Kód jazyka dle normy ISO 639-1, následovaný kódem pro zemi" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Kód dle ISO normy" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Název jazyka" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Název" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Storno" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Písmo textu v podoknÄ› s výstupem:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Výchozí" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "UmístÄ›ní jazykových dat:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Popis umístÄ›ní jazykových definic:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Popis umístÄ›ní slovníků pro kontrolu pÅ™eklepů:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Popisy umístÄ›ní spoleÄné pro vÅ¡echny uživatele" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Pro jednotlivé uživatele" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Automaticky otevřít exportované dokumenty pomocí výchozí aplikace" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Znovu naÄíst hlášení backtrace diagnostiky" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Aplikace zhavarovala\n" "\n" "Velmi se omlouváme za vzniklé potíže. Prosíme pomozte s odstranÄ›ním příÄiny " "tohoto problému nahlášením na e-mail manisandro@gmail.com. Ve zprávÄ› se " "pokuste popsat svou Äinnost pÅ™ed pádem aplikace. Též pÅ™iložte níže uvedené " "informace. DÄ›kujeme." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract pÅ™eruÅ¡en\n" "\n" "Tesseract (souÄást vykonávající optické rozpoznávání znaků) pÅ™eruÅ¡ena pÅ™i " "rozpoznávání z textu. K tomu může dojít pokud jsou použitá nacviÄená data " "poÅ¡kozená nebo nekompatibilní s verzí s použitou verzí tesseract, nebo vinou " "chyby v nÄ›m.\n" "\n" "Níže uvedený výpis zásobníku může poskytnout další informace o tom, kde " "doÅ¡lo k pádu.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Použít" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Zavřít" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Vybrat složku..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formát:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Výstup:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Výstupní režim:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Žádné nedávné soubory" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Další možnosti" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Zobrazit Äi skrýt podokno s výstupním textem" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "OtoÄit stávající stránku" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "OtoÄit vÅ¡echny stránky" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Zdroje" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "PÅ™idat obrázky" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "PÅ™idat obrázky" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Odebrat obrázek ze seznamu" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Smazat obrázek" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "VyÄistit seznam" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Náhledy" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Soubory" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Zařízení:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Znovu naÄíst" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Výstup:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Režim:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Barevný" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "StupnÄ› Å¡edé" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "RozliÅ¡ení:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skenovat" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Zdroj:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Získat" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "SvÄ›tlost" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "RozliÅ¡ení" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "PÅ™evrátit barvy" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "PÅ™iblížit" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Oddálit" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Původní velikost" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "PÅ™izpůsobit oknu" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "OtoÄit stránku" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Vyberte režim otáÄení" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Vyberte režim vkládání" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Vyberte stránku" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Ovládání parametrů obrázku" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Holý text" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Automaticky zjistit rozvržení stránky" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Rozpoznat vÅ¡e" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Vyberte jazyk" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Export" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Grafická nadstavba pro engine tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Dávkový režim" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "V dávkovém režimu je každý ze vstupních zdrojů zpracován zvlášť a výstup je " "uložen ve vstupním souboru vedle sebe." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Stávající výstup:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "PÅ™ed výstupní text pÅ™idávat Äísla stránek" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Automaticky zjistit rozvržení stránky" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Strany" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Strany:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Příklad: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Oblast k rozpoznání:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Celá strana" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automaticky" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "PÅ™idat pÅ™ed výstupní text:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Název zdrojového souboru" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Zdrojová stránka" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "ChránÄ›né PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Stávající strana" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Vícero stránek…" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Dávkový režim…" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "PÅ™idat slovo" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Zadejte slovo:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "PÅ™ipojit nový výstup za poslední stránku" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Vložit nový výstup pÅ™ed stávající stránku" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportovat do holého textu" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportovat do PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportovat do ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "PÅ™ipojit dokument za poslední stránku" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Vložit dokument pÅ™ed stávající stránku" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Otevřít soubor formátu hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Uložit výstup" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Export" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "VyÄistit výstup" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Najít a nahradit" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Zobrazit hodnoty jistoty" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Zobrazit náhled" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Následující (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "PÅ™edchozí (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Rozbalit vÅ¡e" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Sbalit vÅ¡e" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Vlastnosti" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Zdroj" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "PÅ™ipojit za stávající text" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Vložit na pozici kurzoru" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Nahradit stávající text" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Ponechat zalomení řádku pokud…" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Následuje po znaÄce konce vÄ›ty (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Následuje po nebo pÅ™edchází pÅ™ed uvozovkou" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Další možnosti" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Spojit rozdÄ›lená slova" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Odstranit prázdné místo" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Zachovat odstavce" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Vizuální pomůcky" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Zvýraznit prázdné znaky" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Otevřít soubor formátu hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Z oznaÄeného textu odebrat zalomení řádků" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "ZpÄ›t" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Znovu" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Výstupní režim:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF s neviditelnou textovou vrstvou" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Komprese:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Stupeň komprese:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "Bodů na palec (DPI):" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Rozmývací algoritmus:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Nastavení obrázku:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Sjednotit velikost rozestupů řádků a slov" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "PÅ™epsat skupinu písem:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Náhradní skupina písem:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "PÅ™epsat velikost písma:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Měřítko písma:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "bodů" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Zachovat mezery Å¡irší než:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "znaky" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Sanovat spojovníky pÅ™ed konci řádků" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Nastavení textu:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Velikost papíru:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Šířka" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Výška" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Zacházet s obrazovými zdroji tak, jako by mÄ›ly skuteÄné DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Základní" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Verze PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Heslo:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Potvrzení hesla:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Å ifrování (volitelné):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titul:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "PÅ™edmÄ›t:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Tvůrce:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Producent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "KlíÄová slova:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Další informace (volitelné):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importovat ze stávajícího zdroje" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "PokroÄilé" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Najít" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Nahradit" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Nahradit vÅ¡e" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Najít pÅ™edchozí výskyt" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Najít následující výskyt" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "RozliÅ¡ovat malá/velká písmena" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Dosazování" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Smazat" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "PoÅ™adí:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Rozpoznat" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Rozpoznat do schránky" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Uložit jako obrázek" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Otevřít" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Uložit" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "VyÄistit" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "PÅ™idat" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Odebrat" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Správa dat engine Tesseract" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Spravovat nainstalovaná jazyková data:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "sken.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Obrázky" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Zvolte název souboru pro uložení výstupu…" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "NepodaÅ™ilo se inicializovat podpůrnou vrstvu (backend) pro skenování." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skenování se nezdaÅ™ilo" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nebyly nalezeny žádné skenery." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Zahajování skenování…" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Navazování komunikace se skenerem…" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Nastavování pÅ™edvoleb…" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Získávání parametrů…" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "PÅ™enášení dat…" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "RuÅ¡ení skenování…" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "PÅ™edpona názvu souboru" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kód" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Název v daném jazyce" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skript" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "OÅ¡etÅ™ení pádu aplikace" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Zpracovávané bylo uloženo do %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Od minulého uložení nepÅ™ibylo nic nového." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" "NezdaÅ™ilo se získat backtrace diagnostiku. Je nainstalován ladící nástroj " "GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Obrázek se nepodaÅ™ilo naÄíst" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Soubor nejspíš neobsahuje obrazová data nebo je poÅ¡kozený:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Strana %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG obrázky" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Uložit obrázek výbÄ›ru" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "vyber.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Rozpoznat vÅ¡e" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Rozpoznat výbÄ›r" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Analyzuje se rozvržení stránky" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Vybrat složku..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Žádné návrhy" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "PÅ™idat do slovníku" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorovat slovo" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Strana" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Blok textu" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Odstavec" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Řádek textu" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafika" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Export se nezdaÅ™il" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Export do ODT se nezdaÅ™il: nepodaÅ™ilo se zapsat soubor s výstupem." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Export do ODT…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operace byla zruÅ¡ena" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "NepodaÅ™ilo se vykreslit stránku %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Export do PDF…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Export do PDF se nezdaÅ™il: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" "(softwarové) knihovnÄ› funkcí pro práci s formátem PDF se nepodaÅ™ilo naÄíst " "písmo „%1“." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monochromatické" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Práh (nejbližší barva)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Rozptýlit" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (bezztrátové)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (bezztrátové)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (ztrátové)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Stejné jako zdroj" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Uživatelem urÄené" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "palce" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Export textu se nezdaÅ™il: nepodaÅ™ilo se zapsat soubor s výstupem." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Řádek" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Slovo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Zkomolené slovo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Zobrazit hodnoty jistoty" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Následující stránky nebylo možné zpracovat:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Chyby rozpoznávání" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Vícero hodnot" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "SlouÄit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "OddÄ›lit od nadÅ™azeného" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Prohodit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "PÅ™idat oblast s grafikou" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "PÅ™idat textový blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "PÅ™idat odstavec" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "PÅ™idat řádek" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "PÅ™idat slovo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "HTML soubory ve formátu hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Otevřít soubor formátu hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Následující soubory se nepodaÅ™ilo otevřít:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Následující soubory neobsahují platnou HTML podobu formátu HOCR:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Soubory se nedaří otevřít" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "výstup" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Uložit výstup do formátu hOCR…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Uložení výstupu se nezdaÅ™ilo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Zkontrolujte své oprávnÄ›ní zapisovat do zvolené složky." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Textové dokumenty OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Uložit výstup do formátu ODT…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF soubory" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Uložit výstup do formátu PDF…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Neplatný výstup" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Není možné pÅ™epsat soubor který je zdrojovým obrázkem pro tento dokument." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Textové soubory" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Uložit textový výstup…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Výstup nebyl uložen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "PÅ™ed pokraÄováním – uložit výstup?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Nahrazování…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "ProvádÄ›ní dosazení…" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Klávesové zkratky" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Řádků pÅ™ed:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Řádků po:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "
TabNásledující kolonka
Shift+TabPředchozí kolonka
Šipka dolůNásledující " "řádek
Šipka nahoruPředchozí řádek
Ctrl+MezerníkPravopisná doporuÄení
Ctrl+BVyp/zap. tuÄnÄ›
Ctrl+IVyp/" "zap. skloněné
Ctrl+DRozdělit slovo na pozici " "kurzoru
Ctrl+MSpojit s předcházejícím slovem
Ctrl+Shift+MSpojit s následujícím slovem
Ctrl+{Šipka vlevo, vpravo}Upravit levý okraj zarovnání
Ctrl+Shift+{Šipka vlevo, vpravo}Upravit pravý okraj " "zarovnání
Ctrl+{Šipka nahoru, dolů}Upravit horní " "okraj zarovnání
Ctrl+Shift+{Šipka nahoru, dolů}Upravit spodní okraj zarovnání
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Míra jistoty: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "S použitím engine tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "ZaÄnÄ›te výbÄ›rem obrázku…" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Vícero zdrojů (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "PÅ™ipraveno" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nová verze" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "je k dispozici gImageReader %1" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Stáhnout" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Seznam zmÄ›n" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "PříštÄ› už neoznamovat" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "PříštÄ› už nezobrazovat" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Nainstalovat" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Chybí slovník pro kontrolu pÅ™eklepů" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Není nainstalovaný slovník pro kontrolu pÅ™eklepů pro %1" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instaluje se slovník pro kontrolu pÅ™eklepů pro „%1“" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Chyba" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Instalace slovníku pro kontrolu pÅ™eklepů se nezdaÅ™ila: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "VytvoÅ™ení složky pro slovníky pro kontrolu pÅ™eklepů se nezdaÅ™ilo." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "%1 se nedaří naÄíst: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Stahování „%1“…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Následující slovníky se nepodaÅ™ilo stáhnout:\n" "%1\n" "\n" "Zkontrolujte své pÅ™ipojení k Internetu a oprávnÄ›ní na složce.\n" "Rada: pokud nemáte oprávnÄ›ní zapisovat do systémových složek, můžete v " "dialogu nastavení pÅ™epnout na ty uživatelské." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Slovníky byly nainstalovány" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Byly nainstalovány tyto slovníky:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Pro „%1“ nebyly nalezeny žádné slovníky pro kontrolu pÅ™eklepů." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Strana: %1\n" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "Dokument" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Vloženo %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Výstup nebyl uložen" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "PÅ™ed pokraÄováním – uložit výstup?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Odebírání konců řádků…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Zkontrolovat text na pÅ™eklepy" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Soubor: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Strana: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Rozpoznávání na stránce %1 se nezdaÅ™ilo]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Vyberte soubory" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Uložit výstup…" #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Dokument" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nejsou k dispozici žádná jazyková data" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Nejsou k dispozici žádná jazyková data pro engine tesseract. Rozpoznávání " "proto nebude fungovat." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "VícejazyÄné" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatické rozdÄ›lení stránky na prvky" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "RozdÄ›lení stránky se zjiÅ¡tÄ›ním orientace a písma" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "PÅ™edpokládat jeden sloupec textu" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "PÅ™edpokládat jediný blok svisle zarovnaného textu" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "PÅ™edpokládat jediný jednolitý blok textu" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "PÅ™edpokládat řádek textu" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "PÅ™edpokládat jediné slovo" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "PÅ™edpokládat jediné slovo v kruhu" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Rozptýlený text bez konkrétního poÅ™adí" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Rozptýlený text se zjišťováním orientace a písma" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Režim rozdÄ›lování stránky na prvky" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Seznam povolených/zakázaných znaků…" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Spravovat jazyková data…" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "PÅ™epsat existující výstup" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "PÅ™eskoÄit zpracovávání zdroje" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Stávající výbÄ›r" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "PÅ™i rozpoznávání se vyskytly chyby" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "NepodaÅ™ilo se inicializovat engine tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Rozpoznávání strany %1 (%2 ze %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Stránka %1: stránku se nepodaÅ™ilo vykreslit" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Rozpoznávání…" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: stránku se nepodaÅ™ilo vykreslit" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: výstup už existuje, bude pÅ™eskoÄeno" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: nepodaÅ™ilo se vytvoÅ™it výstupní soubor" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "DoÅ¡lo k následujícím chybám:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skenování bylo zruÅ¡eno" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Nebyl urÄen žádný skener" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Nedaří se spojit se skenerem" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Nedaří se zahájit skenování" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Chyba komunikace se skenerem" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Obrázek se nepodaÅ™ilo uložit" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operace byla zruÅ¡ena." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Zařízení je zaneprázdnÄ›né." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Je otevÅ™ený kryt." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "PÅ™edloha se zasekla v podavaÄi." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "V podavaÄi doÅ¡ly pÅ™edlohy." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Přístup ke skeneru odepÅ™en." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Zadejte heslo k souboru „%1“:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF s textem" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF soubor už obsahuje text:\n" "%1\n" "Otevřít i tak?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Obrázky a PDF soubory" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Chyba schránky" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Obsah schránky se nepodaÅ™ilo naÄíst." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Vloženo %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Chyba pÅ™i poÅ™izování snímku obrazovky" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "NepodaÅ™ilo se pořídit snímek obrazovky." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Snímek obrazovky %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Ukládání obrázku…" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Do souboru se nedaří zapsat" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Do umístÄ›ní %1 se nedaří zapisovat." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Smazat soubor?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Smazat následující soubory?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Otevřít výstup" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Byl nalezen jak text, tak hOCR výstup. Který chcete otevřít?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "ChybÄ›jící soubor" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Následující soubor byl smazán Äi pÅ™esunut:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Hledat výskyt" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Čím nahradit" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Seznam dosazování" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Otevřít seznam dosazování" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Chyba pÅ™i naÄítání souboru" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Z „%1“ se nedaří Äíst." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "PÅ™i naÄítání souboru se vyskytly chyby" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "NÄ›které položky seznamu dosazování se nepodaÅ™ilo naÄíst." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Uložit seznam dosazování" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Chyba pÅ™i ukládání do souboru" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Do „%1“ se nedaří zapisovat." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Uložit seznam?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Chcete stávající seznam uložit?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Pro správu balíÄků jazykových dat pro engine tesseract, spoleÄných pro " "vÅ¡echny uživatele, je tÅ™eba nástroje PackageKit, který se ale na tomto " "systému nenachází. Tato služba je obvykle poskytována aplikací pro správu " "software, jako napÅ™. Gnome Software. Nainstalujte software, který poskytuje " "potÅ™ebné PackageKit rozhraní, nebo použijte jiný nástroj pro správu balíÄků " "vaÅ¡eho systému a jazykové balíÄky engine tesseract spravujte přímo jeho " "prostÅ™ednictvím. PřípadnÄ› náhradnÄ› v nastavovacím dialogu pÅ™epnÄ›te na " "používání umístÄ›ní pro jednotlivého uživatele." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Zjišťování dostupných jazykových dat" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "NepodaÅ™ilo se získat seznam dostupných jazykových dat: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Chyba zpracování: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Promítnutí zmÄ›n…" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "NepodaÅ™ilo se vytvoÅ™it složku pro datové soubory engine tesseract." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Stahování %1…" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Následující soubory se nepodaÅ™ilo stáhnout na Äi odebrat z poÄítaÄe:\n" "%1\n" "\n" "Zkontrolujte své pÅ™ipojení k Internetu a přístupová práva na přísluÅ¡né " "složce.\n" "\n" "Rada: pokud nemáte oprávnÄ›ní zapisovat do systémových složek, můžete v " "dialogu nastavení pÅ™epnout na ty uživatelské." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Ano" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Ano na vÅ¡e" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ne" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Ne na vÅ¡e" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Zahodit" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Zahodit" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Text" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "O aplikaci gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Grafická nadstavba pro tesseract-ocr

Webové stránky

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Zásluhy" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licence" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "V dávkovém režimu je každý ze vstupních zdrojů zpracován zvlášť a výstup je " "uložen ve vstupním souboru vedle sebe." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Znaková sada systému" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Znaková sada textového souboru:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

Došlo k pádu " "aplikace

Velmi se omlouváme za vzniklé potíže. Prosíme pomozte " "s odstranÄ›ním příÄiny tohoto problému nahlášením na e-mail manisandro@gmail.com. Ve zprávÄ› se pokuste popsat svou Äinnost pÅ™ed pádem aplikace. Též " "pÅ™iložte níže uvedené informace. DÄ›kujeme.

" #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "Tesseract pÅ™eruÅ¡en\n" "\n" "Tesseract (souÄást vykonávající optické rozpoznávání znaků) pÅ™eruÅ¡ena pÅ™i " "rozpoznávání z textu. K tomu může dojít pokud jsou použitá nacviÄená data " "poÅ¡kozená nebo nekompatibilní s verzí s použitou verzí tesseract, nebo vinou " "chyby v nÄ›m.\n" "\n" "Níže uvedený výpis zásobníku může poskytnout další informace o tom, kde " "doÅ¡lo k pádu.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Deskový" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Aut. podavaÄ dokumentů pÅ™ední" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Aut. podavaÄ dokumentů zadní" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Aut. podavaÄ dokumentů oboustranné" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "PÅ™iblížit" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Oddálit" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Původní velikost" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "PÅ™izpůsobit oknu" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "OtoÄit vlevo" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "OtoÄit vlevo" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "OtoÄit vpravo" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "OtoÄit vpravo" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Ovládání parametrů obrázku" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Automaticky zjistit rozvržení stránky" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Zobrazit Äi skrýt podokno s výstupním textem" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Export do PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Podpůrná vrstva (backend):" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Na výšku" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Na šířku" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "NepodaÅ™ilo se zapsat soubor" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: nabízí více voleb komprimace obrázků, ale " "neporadí si s komplexními skripty.
  • QPrinter: pro ukládání obrázků " "podporuje pouze JPEG kompresi, zato podporuje komplexní skripty.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Uložit jako text ve formátu hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Najít a nahradit" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Zobrazit náhled" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Byly nainstalovány tyto soubory se slovníky:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Žádné nedávné soubory" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Smazat soubory" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Následující soubory se nepodaÅ™ilo stáhnout na Äi odebrat z poÄítaÄe:\n" "%1\n" "\n" "Zkontrolujte své pÅ™ipojení k Internetu a přístupová práva na přísluÅ¡né " "složce.\n" "Rada: Pokud nemáte oprávnÄ›ní zapisovat do systémových složek, můžete v " "dialogu nastavení pÅ™epnout na ty uživatelské." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Výstup" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Režim OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "PÅ™idat složku" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Vložit" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Zachytit snímek obrazovky" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Odebrat obrázek" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Smazat obrázek" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "VyÄistit seznam" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Odebrat zalomení řádků" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Uložit výstup" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "VyÄistit výstup" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Formát:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Soubor s názvem „%1“ už existuje. Opravdu má být pÅ™epsán?" #~ msgid "Overwrite File?" #~ msgstr "PÅ™epsat soubor?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Dokument" #~ msgid "Recent" #~ msgstr "Nedávno použité" #~ msgid "Failed to create output" #~ msgstr "VytvoÅ™ení výstupu se nezdaÅ™ilo" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "VytvoÅ™ení výstupu se nezdaÅ™ilo. Byla vrácena chyba: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Aplikace byla neoÄekávanÄ› ukonÄena</span></" #~ "p><p>Omlouváme se za vzniklé nepohodlí. Chcete-li pomoci " #~ "aplikaci zlepÅ¡it nahlaste problém na <a href="mailto:" #~ "manisandro@gmail.com?subject=gImageReader%20Crash\">manisandro@gmail." #~ "com</a>. Zde se pokuste popsat svou Äinnost pÅ™ed pádem aplikace. " #~ "Též pÅ™iložte níže uvedené informace.Díky.</p></body></" #~ "html>" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

Tesseract bylo " #~ "přerušeno

Tesseract (OCR engine) byl pÅ™eruÅ¡en v průbÄ›hu " #~ "rozpoznávání textu. K tomu může dojít v případÄ› poÅ¡kozených natrénovaných " #~ "dat nebo použití nekompatibilní verze tesseract, Äi chybÄ› v tesseract.

Výpis zásobníku níže může poskytnout další informace o tom, kde " #~ "došlo k pádu.

" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Příklad:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Holý text" #~ msgid "Multiple sources" #~ msgstr "Vícero zdrojů" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Strana %1: vykreslení stránky se nezdaÅ™ilo" #~ msgid "The following errors occurred:%1" #~ msgstr "DoÅ¡lo k tÄ›mto chybám:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Následující soubory budou smazány:%1" #~ msgid "Failed to open file" #~ msgstr "NepodaÅ™ilo se otevřít soubor" #~ msgid "The file could not be opened: %1." #~ msgstr "Soubor se nepodaÅ™ilo otevřít: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Soubor neobsahuje platná data ve formátu hOCR" #~ msgid "The application has crashed" #~ msgstr "DoÅ¡lo k pádu aplikace" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "DoÅ¡lo k pádu engine tesseract, doprovázenému následujícím hlášením:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Toto se typicky dÄ›je z jednoho z tÄ›chto důvodů:\n" #~ "- Použití zastaralých dat uživatelských slovníků.\n" #~ "- ChybÄ›jící soubory s pomocnými jazykovými daty.\n" #~ "- PoÅ¡kozené soubory s jazykovými daty.\n" #~ "\n" #~ "Ověřte, že soubory s jazykovými daty jsou platné a kompatibilní s " #~ "tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "%1 se nedaří naÄíst: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "PoDoFo" #~ msgstr "PoDoFo" #~ msgid "QPrinter" #~ msgstr "QPrinter" #~ msgid "90" #~ msgstr "90" #~ msgid "300" #~ msgstr "300" #~ msgid "100" #~ msgstr "100" #~ msgid "10" #~ msgstr "10" #~ msgid "%" #~ msgstr "%" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" #~ msgid "Document font:" #~ msgstr "Písmo dokumentu:" #~ msgid "Scale:" #~ msgstr "Měřítko:" #~ msgid "Errors occurred" #~ msgstr "Vyskytly se chyby" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Následující stránky se nepodaÅ™ilo vykreslit:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "seznam_dosazovani.txt" #~ msgid "Detect script and orientation" #~ msgstr "Zjistit písmo a orientaci stránky" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Pro správu balíÄků jazykových dat pro engine tesseract, provádÄ›nou přímo " #~ "z gImageReader, je tÅ™eba nástroje PackageKit, který se ale na tomto " #~ "systému nenachází. NáhradnÄ› proto použijte nástroj pro správu balíÄků " #~ "vaÅ¡eho systému a jeho prostÅ™ednictvím spravujte jazykové balíÄky engine " #~ "tesseract." #~ msgid "Image format:" #~ msgstr "Formát obrázku" #~ msgid "System-wide" #~ msgstr "Pro vÅ¡echny uživatele" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tNepodaÅ™ilo se inicializovat engine tesseract" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Nad oblastmi, které mají být rozpoznány, natáhnÄ›te obdélníky." #~ msgid "So&urces" #~ msgstr "&Zdroje" #~ msgid "&Output" #~ msgstr "&Výstup:" #~ msgid "Rendering image..." #~ msgstr "Vykreslování obrázku…" #~ msgid "en_US" #~ msgstr "cs_CZ" #~ msgid "So&urces" #~ msgstr "Zdr&oje" #~ msgid "&Output" #~ msgstr "&Výstup" #~ msgid "Configuration" #~ msgstr "Nastavení" #~ msgid "Preceeded or succeeded by quote" #~ msgstr "PÅ™edchází Äi následují uvozovky" #~ msgid "Preceeded by dot" #~ msgstr "Následuje za teÄkou" #~ msgid "Pasting clipboard..." #~ msgstr "Vkládání ze schránky..." #~ msgid "Taking screenshot..." #~ msgstr "PoÅ™izování snímku obrazovky..." #~ msgid "Autolayout" #~ msgstr "Autorozvržení" #~ msgid "Options" #~ msgstr "Možnosti" #~ msgid "Manage list" #~ msgstr "Spravovat seznamy" #~ msgid "Replacement list" #~ msgstr "Seznam nahrazování" #~ msgid "replace_list.txt" #~ msgstr "seznam_nahrazovani.txt" #~ msgid "Open replacement list" #~ msgstr "Otevřít seznam nahrazování" #~ msgid "Save replacement list" #~ msgstr "Uložit seznam nahrazování" #~ msgid "Save the current list?" #~ msgstr "Uložit souÄasný seznam?" gImageReader-3.4.0/po/de.po000066400000000000000000002527551417507262200154260ustar00rootroot00000000000000# German translations for gImageReader package # German messages for gImageReader. # Copyright (C) 2010-2016 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # # 2016-11-09: Translation corrected :Heinrich Schwietering # # # Sandro Mani , 2010-2011, 2013, 2014, 2015, 2016, 2017, 2018, 2022. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2022-01-24 23:18+0100\n" "Last-Translator: Sandro Mani \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Lokalize 21.12.1\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Texterkennung" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Spracherkennung erneut ausführen" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Sprachen verwalten" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Einstellungen" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Hilfe" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Über …" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Beenden" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Blacklist / Whitelist von Zeichen" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Folgende Zeichen von der Erkennung ausschliessen (blacklist):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Zeichenfolge eingeben..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Nur folgende Zeichen erkennen (whitelist):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Ausrichtung des Ausgabebereichs:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Waagerecht" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Senkrecht" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Installation von fehlenden Rechtschreibwörterbüchern vorschlagen" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatisch nach neuen Programmversionen suchen" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Voreingestellte Sprachdefinitionen:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Weitere Sprachdefinitionen:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Das Präfix der Tesserakt-Sprachdatei" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Präfix" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Der ISO 639-1-Sprachencode, gefolgt vom Landescode" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO-Code" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Der Name der Sprache" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Name" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Abbrechen" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Schriftart im Ausgabebereich:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Standard" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Speicherort für Sprachdaten:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Speicherort für Sprachdefinitionen:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Speicherort der Rechtschreibwörterbücher:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Systemweite Ordner" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Benutzerordner" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Exportierte Dokumente automatisch öffnen" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Backtrace nochmals durchführen" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Die Anwendung ist abgestürzt\n" "\n" "Bitte entschuldigen Sie die Unannehmlichkeiten. Wenn Sie helfen möchten, die " "Anwendung zu verbessern, melden Sie das aufgetretene Problem bitte an manisandro@gmail.com. Bitte beschreiben " "Sie auch, was Sie machten, bevor die Anwenung abgestürzte. Senden Sie zudem " "bitte auch die untenstehenden Informationen. Danke." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract hat abgebrochen\n" "\n" "Tesseract (die OCR engine) hat während des Erkennen des Textes abgebrochen. " "Dies kann passieren, falls die traineddata Datein korrupt oder mit der " "verwendeten Version von Tesseract inkompatibel sind, oder wegen eines " "Fehlers in Tesseract.\n" "\n" "Der Stacktrace unten könnte weitere Informationen zum Ursprung des Fehlers " "liefern.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "HOCR-Batch-Export" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Anwenden" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Schließen" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Quellordner auswählen:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Eingabe:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Ausgabevorschau:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Eingabedateien" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Exportoptionen" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Ausgabebereich ein-/ausblenden" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Aktuelle Seite rotieren" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Alle Seiten rotieren" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Quellen" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Bilder hinzufügen" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Bilder hinzufügen" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Bild von Liste entfernen" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Bild löschen" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Liste leeren" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Vorschau" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Dateien" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Gerät:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Aktualisieren" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Ausgabebild:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modus:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Farbig" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Graustufen" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Auflösung:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Scannen" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Quelle:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Erstellen" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Helligkeit" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Auflösung" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Farben invertieren" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Ansicht vergrößern" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Ansicht verkleinern" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Originalgröße" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Anpassen" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Seite rotieren" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Rotationsmodus auswählen" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Einfügemodus auswählen" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Seite auswählen" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Bildbearbeitung" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Reiner Text" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Layout automatisch erkennen" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Alles erkennen" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Sprache auswählen" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Batch-Export" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Eine graphische Oberfläche für Tesseract-OCR" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Batchmodus" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Im Batchmodus wird jede Quelle separat verarbeitet und die Ausgabe neben " "der Quelldatei gespeichert." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Existierende Ausgabe:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Seitennummern dem Ausgabetext voranstellen" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Layout automatisch erkennen" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Seiten" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Seiten:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Beispiel: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Erkennungsbereich:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Ganze Seite" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatisch erkennen" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Dem Ausgabetext voranstellen:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Quelldateiname" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Quellseite" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Geschützes PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Aktuelle Seite" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Mehrere Seiten..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Batchmodus..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Wort hinzufügen" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Wort eingeben:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Ausgabe nach letzter Seite hinzufügen" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Ausgabe vor aktuelle Seite hinzufügen" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Als Text exportieren" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Als PDF exportieren" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Als ODT exportieren" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Dokument nach letzter Seite hinzufügen" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Dokument vor aktueller Seite hinzufügen" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR-Datei öffnen" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Ausgabe speichern" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Export" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Ausgabe löschen" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Suchen und ersetzen" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Vertrauenswerte anzeigen" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Vorschau anzeigen" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Nächstes (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Vorheriges (Shift + F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Ausklappen" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Einklappen" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Eigenschaften" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Quelle" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "An aktuellen Text anhängen" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "An Cursor-Stelle einfügen" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Aktuellen Text ersetzen" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Behalte Zeilenumbruch bei falls..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "ein Satzendzeichen (.?!) davor steht" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "ein Anführungszeichen davor oder dahinter steht" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Weitere Optionen" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Wörter mit Bindestrich zusammenfügen" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Leerstellen bereinigen" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Absätze erhalten" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Visuelle Hilfen" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Leerstellen zeichnen" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Datei öffnen" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Zeilenumbrüche im markierten Text entfernen" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Rückgängig" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Wiederholen" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Neuer Tab" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Ausgabemodus:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF mit unsichtbarer Textlage" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Komprimierung:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Komprimierungsqualität:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Dithering Algorithmus:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Bildeinstellungen:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Zeilen- und Wortabstände vereinheitlichen" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Schriftart übersteuern:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Standard-Schriftart:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Schriftgrösse übersteuern:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Schriftgrössenskalierung:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Bewahre Abstände breiter als:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "Zeichen" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Bindestriche vor Zeilenumbrüchen korrigieren" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Texteinstellungen:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Papiergrösse:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Breite" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Höhe" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Angenommene DPI für Bildquellen:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Grundeinstellungen" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF Version:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Passwort:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Passwort bestätigen:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Verschlüsslung (optional):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titel:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Betreff:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Ersteller:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produzent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Schlüsselwörter:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Weitere Informationen (optional):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Aus aktueller Quelle importieren" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Fortgeschritten" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Suche" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Ersetzen" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Alle ersetzen" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Rückwärts suchen" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Vorwärts suchen" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Groß-/Kleinschreibung beachten" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Ersetzungen" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Löschen" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Reihenfolge:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Erkennen" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Erkennung in die Zwischenablage kopieren" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Als Bild speichern" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Öffnen" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Speichern" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Liste leeren" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Hinzufügen" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Entfernen" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata-Verwaltung" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Installierte Sprachen verwalten:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Bilder" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Wählen Sie den Namen der Ausgabedatei..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Scanning-Backend konnte nicht initialisiert werden." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Scannen fehlgeschlagen" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Keine Scanner gefunden." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Scan wird gestartet..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Die Verbindung zum Scanner wird hergestellt..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Einstellungen werden gesetzt..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Parameter werden gelesen..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Bildinformation wird übertragen..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Scan wird unterbrochen..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Präfix des Dateinamens" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Code" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nativer Name" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Schrift" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Crash-Handler" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Ihre Arbeit wurde unter %1 gespeichert." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Keine ungespeicherte Arbeit." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Der Backtrace konnte nicht generiert werden. Ist gdb installiert?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Das Bild konnte nicht geladen werden" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Die Datei ist möglicherweise kein Bild oder ist beschädigt:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Seite %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG-Bilder" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Bild speichern" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "Auswahl.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Alles erkennen" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Auswahl erkennen" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Layout-Analyse wird durchgeführt" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Temporäre Dateien" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Ordner auswählen..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Keine Vorschläge" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Zum Wörterbuch hinzufügen" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Wort ignorieren" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Seite" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Textblock" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Absatz" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Textzeile" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Graphik" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Export fehlgeschlagen" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" "Der ODT Export schlug fehl: die Ausgabedatei konnte nicht geschrieben werden." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ODT Export erfolgt..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Der Prozess wurde abgebrochen" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Seite %1 konnte nicht gerendert werden" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "PDF Export erfolgt..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Der PDF-Export ist fehlgeschlagen: %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Die PDF-Bibliothek konnte die Schriftart '%1' nicht laden." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Einfarbig" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Schwellenwert (nächstliegende Farbe)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffus" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (verlustlos)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (verlustlos)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (verlustbehaftet)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Gleich wie Quelle" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Benutzerdefiniert" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "Der Text-Export schlug fehl: die Ausgabedatei konnte nicht geschrieben " "werden." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Block" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Zeile" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Wort" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Falsch geschrieben" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "Wort mit geringem Vertrauenswert" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Folgende Seiten konnten nicht verarbeitet werden:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Erkennungsfehler" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Mehrere Werte" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Verschmelzen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Von Gruppe trennen" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Tauschen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Graphikregion hinzufügen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Textblock hinzufügen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Paragraph hinzufügen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Zeile hinzufügen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Wort hinzufügen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR-HTML-Dateien" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "hOCR-Datei öffnen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Folgende Dateien konnten nicht geöffnet werden:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Folgende Dateien enthalten kein gültiges hOCR-HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Dateien konnten nicht geöffnet werden" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "Ausgabe" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "hOCR-Ausgabe speichern..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Konnte Ausgabe nicht speichern" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Kontrollieren Sie, ob Sie Schreibrechte im gewählten Ordner besitzen." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Textdokumente" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT Ausgabe speichern..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-Dateien" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "PDF-Ausgabe speichern..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ungültige Ausgabe" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Quelldateien dieses Dokuments können nicht überschrieben werden." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Textdateien" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Text-Ausgabe speichern..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Ausgabe nicht gespeichert" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ausgabe vor dem Fortsetzen speichern?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Ersetzen läuft..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Ersetzungen werden durchgeführt..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Tastenkürzel" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Zeilen davor:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Zeilen danach:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Tastenkürzel" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Vertrauenswert: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Verwendet tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Zum Starten ein Bild wählen..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Mehrere Quellen (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Bereit" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Neue Version" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 ist erhältlich" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Herunterladen" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Änderungshistorie" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Nicht mehr benachrichtigen" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Nicht mehr zeigen" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installieren" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Rechtschreibwörterbuch fehlt" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Das Rechtschreibwörterbuch für %1 ist nicht installiert" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Rechtschreibwörterbuch für '%1' wird installiert" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Fehler" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Rechtschreibwörterbuch konnte nicht installiert werden: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ordner für Rechtschreibwörterbücher konnte nicht erstellt werden." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "%1 konnte nicht gelesen werden: %2" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "'%1' wird heruntergeladen..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Folgende Wörterbücher konnten nicht heruntergeladen werden:\n" "%1\n" "\n" "Überprüfe die Netzverbindung sowie die Schreibrechte.\n" "Hinweis: Falls der Benutzer keine Schreibrechte in den Systemordner hat, " "kann im Einstellungsdialog auf Benutzerprofilordner gewechselt werden." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Rechtschreibwörterbücher installiert" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Folgende Rechtschreibwörterbücher wurden installiert:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Kein Rechtschreibwörterbuch für '%1' gefunden." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Seite: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Dokument schließen" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Unbenannt %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Dokument nicht gespeichert" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Dokument vor dem Fortsetzen speichern?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Zeilenumbrüche werden entfernt..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Keine Hervorhebung" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Hervorhebung" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Rechtschreibprüfung" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "%1 Treffer ersetzt" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Datei: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Seite: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Seite %1 konnte nicht erkannt werden]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Dateien auswählen" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Ausgabe speichern..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Ungespeicherte Dokumente" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "Die folgenden Dokumente haben ungespeicherte Änderungen. Welche Dokumente " "sollen vor dem Fortsetzten gespeichert werden?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Keine Sprachen verfügbar" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "Keine Tesseract-Sprachen verfügbar. Texterkennung nicht möglich." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Mehrsprachig" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatische Seitensegmentierung" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Seitensegmentierung mit Orientierung- und Skripterkennung" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Eine einzelne Textspalte annehmen" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Einen einzelnen Block vertikal ausgerichteten Text annehmen" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Einen einzelnen einheitlichen Textblock annehmen" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Eine einzelne Textlinie annehmen" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Ein einzelnes Wort annehmen" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Ein einzelnes Wort in einem Kreis annehmen" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Spärlicher Text in keiner bestimmten Reihenfolge" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Spärlicher Text mit Orientierung- und Skripterkennung" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Seitensegmentierungsmodus" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Blacklist / Whitelist von Zeichen..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Sprachen verwalten..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Existierende Ausgabe überschreiben" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Quelle überspringen" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Aktuelle Auswahl" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Erkennungsfehler sind aufgetreten" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Tesseract konnte nicht initialisiert werden" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Quelle bereits erkannt" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Eine oder mehrere ausgewählte Quellen wurden bereits erkannt. Trotzdem " "weitermachen?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Erkennung von Seite %1 (%2 von %3) wird durchgeführt" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Seite %1: Seite konnte nicht gerendert werden" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Erkennung wird durchgeführt..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Seite %1:%2: Seite konnte nicht gerendert werden" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: Ausgabe existiert bereits, Quelle wurde übersprungen" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: Ausgabe konnte nicht erstellt werden" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Folgende Fehler sind aufgetreten:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Scan abgebrochen" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Kein Scanner angegeben" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Scanner nicht gefunden" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Scan konnte nicht gestartet werden" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Fehler in der Scanner-Kommunikation" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Das Bild konnte nicht gespeichert werden" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Prozess abgebrochen." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Das Gerät ist beschäftigt." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Der Deckel ist offen." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Der Dokument-Feeder ist blockiert." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Keine weitere Dokumente liegen im Feeder." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Zugriff auf Scanner wurde verweigert." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Passwort für die Datei '%1' eingeben:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF mit Text" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "DiePDF Datei enthält bereits Text:\n" "%1\n" "Soll sie trotzdem geöffnet werden?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Bilder und PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Fehler: Zwischenablage" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Zwischenablage konnte nicht gelesen werden." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "%1 eingefügt" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Fehler: Bildschirmfoto" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Bildschirmfoto konnte nicht erstellt werden." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Bildschirmfoto %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Bild wird gespeichert..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Fehler beim Schreiben der Datei" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Auf %1 konnte nicht geschrieben werden." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Datei löschen?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Folgende Dateien Löschen?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Ausgabe öffnen" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Sowohl Text als hOCR Ausgabe wurden gefunden. Welche soll geöffnet werden?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Fehlende Datei" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Folgende Datei wurde gelöscht oder verschoben:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Suche nach" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Ersetzen mit" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Ersetzungsliste" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Ersetzungsliste laden" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Fehler beim Lesen der Datei" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Die Datei '%1' konnte nicht gelesen werden." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Fehler beim Lesen der Datei" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Einige Einträge der Ersetzungsliste konnten nicht gelesen werden." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Ersetzungsliste speichern" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Fehler beim Speichern der Datei" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Die Datei '%1' konnte nicht geschrieben werden." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Liste speichern?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Soll die aktuelle Liste gespeichert werden?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Für die Verwaltung systemweiter Tesserakt-Sprachpakete ist eine " "Sitzungsverbindung zum PackageKit-Backend erforderlich, wurde aber nicht " "gefunden. Dieser Service wird in der Regel von einer Software-" "Verwaltungsanwendung wie z.B. Gnome Software bereitgestellt. Bitte " "installieren Sie Software, die die erforderliche PackageKit-Schnittstelle " "bereitstellt, verwenden Sie eine andere Systempaketverwaltungssoftware, um " "die Tesseract-Sprachpakete direkt zu verwalten oder wechseln Sie im " "Konfigurationsdialog auf den user tessdata Pfad." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Liste der verfügbare Sprachen wird geladen" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Die Liste der verfügbare Sprachpakete konnte nicht geladen werden: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Parsing-Fehler: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Änderung werden übernommen..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ordner für tessdata Sprachdefinitionen konnte nicht erstellt werden." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "'%1' wird heruntergeladen..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Folgende Dateien konnten nicht heruntergeladen werden:\n" "%1\n" "\n" "Überprüfe die Netzverbindung sowie die Schreibrechte.\n" "\n" "Hinweis: Falls der Benutzer keine Schreibrechte in den Systemordner hat, " "kann im Einstellungsdialog auf Benutzerprofilordner gewechselt werden." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Ja" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Ja, alle" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Nein" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nein, alle" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Verwerfen" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Alle verwerfen" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Text" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Über gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Eine graphische Oberfläche für Tesseract-" "OCR

Website

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Mitwirkende" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Lizenz" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Im Batchmodus wird jede Quelle separat verarbeitet und die Ausgabe neben der " "Quelldatei gespeichert." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Systemkodierung" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Kodierung der Textdateien:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

Die Anwendung ist " "abgestürzt

Bitte entschuldigen Sie die Unannehmlichkeiten. Wenn " "Sie helfen möchten, die Anwendung zu verbessern, melden Sie das aufgetretene " "Problem bitte an manisandro@gmail.com. Bitte beschreiben " "Sie auch, was Sie machten, bevor die Anwendung abgestürzte. Senden Sie zudem " "bitte auch die untenstehenden Informationen. Danke.

" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "

Tesseract hat " "abgebrochen

Tesseract (die OCR Engine) hat während des Erkennen " "des Textes abgebrochen. Dies kann passieren, falls die traineddata Datein " "korrupt oder mit der verwendeten Version von Tesseract inkompatibel sind, " "oder wegen eines Fehlers in Tesseract.

Der Stacktrace unten könnte " "weitere Informationen zum Ursprung des Fehlers liefern.

" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Flachbett" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF Vorseite" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF Rückseite" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF-Duplex" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Ansicht vergrößern" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Ansicht verkleinern" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Originalgröße" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Anpassen" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Gegen den Uhrzeigersinn drehen" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Gegen den Uhrzeigersinn drehen" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Im Uhrzeigersinn drehen" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Im Uhrzeigersinn drehen" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Bildbearbeitung" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Layout automatisch erkennen" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Ausgabebereich ein-/ausblenden" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF-Export" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Hochformat" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Querformat" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Datei konnte nicht geschrieben werden" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: bietet mehr Bildkompressionsoptionen an, " "aber unterstützt keine komplexe Schriften.
  • QPrinter: unterstützt nur " "JPEG Kompression für Bilder, aber unterstützt komplexe Schriften.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Als hOCR-Text speichern" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Suchen und ersetzen" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Korrekturlesefenster anzeigen" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Folgende Rechtschreibwörterbücher wurden installiert:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Keine zuletzt geöffneten Dateien" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Dateien löschen" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Folgende Dateien konnten nicht heruntergeladen bzw. entfernt werden:\n" "%1\n" "\n" "Überprüfe die Netzverbindung sowie die Schreibrechte.\n" "Hinweis: Falls der Benutzer keine Schreibrechte in den Systemordner hat, " "kann im Einstellungsdialog auf Benutzerprofilordner gewechselt werden." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Ausgabe" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR-Modus:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Ordner hinzufügen" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Einfügen" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Bildschirmfoto erstellen" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Bild entfernen" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Bild löschen" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Liste leeren" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Zeilenumbrüche entfernen" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Ausgabe speichern" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Ausgabe löschen" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Reiter hinzufügen" #, fuzzy #~ msgid "Form" #~ msgstr "Format:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Eine Datei namens \"%1\" existiert bereits. Soll sie ersetzt werden?" #~ msgid "Overwrite File?" #~ msgstr "Datei ersetzen?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Es gibt %1 Dokumente mit nicht gespeicherten Änderungen" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Änderungen vor dem Schließen speichern? Wenn Sie nicht speichern, gehen " #~ "alle Ihre Änderungen dauerhaft verloren.\n" #~ "Wählen Sie die Dokumente aus, die Sie speichern möchten:" #~ msgid "New document %1" #~ msgstr "Neues Dokument %1" #~ msgid "Recent" #~ msgstr "Zuletzt geöffnet" #~ msgid "Failed to create output" #~ msgstr "Ausgabe konnte nicht erstellt werden" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "" #~ "Die Ausgabe konnte nicht erstellt werden. Folgender Fehler ist " #~ "aufgetreten: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Die Anwendung ist abgestürzt</span></p>" #~ "<Bitte entschuldigen Sie die Unannehmlichkeiten. Wenn Sie helfen " #~ "möchten, die Anwendung zu verbessern, melden Sie das aufgetretene Problem " #~ "bitte an manisandro@gmail.com. Bitte " #~ "beschreiben Sie auch, was Sie machten, bevor die Anwendung abgestürzte. " #~ "Senden Sie zudem bitte auch die untenstehenden Informationen. Danke." #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

Tesseract hat " #~ "abgebrochen

Tesseract (die OCR engine) hat abgebrochen " #~ "während des Erkennen des Textes. Dies kann passieren, falls die " #~ "traineddata Dateien korrupt oder mit der verwendeten Version von " #~ "Tesseract inkompatibel sind, oder wegen eines Fehlers in Tesseract.

Der Stacktrace unten könnte weitere Informationen zum Ursprung des " #~ "Fehlers liefern.

" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Beispiel: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Reiner Text" #~ msgid "Multiple sources" #~ msgstr "Mehrere Quellen" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Seite %1: Seite konnte nicht gerendert werden" #~ msgid "The following errors occurred:%1" #~ msgstr "Folgende Fehler sind aufgetreten:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Folgende Dateien werden gelöscht:%1" #~ msgid "Failed to open file" #~ msgstr "Datei konnte nicht geöffnet werden" #~ msgid "The file could not be opened: %1." #~ msgstr "Die Datei konnte nicht geöffnet werden: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ungültige hOCR-Datei" #~ msgid "The application has crashed" #~ msgstr "Die Anwendung ist abgestürzt" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract stürzte mit folgender Ausgabe ab:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Das ist typisch für einen der folgenden Gründe:\n" #~ "- Es werden veraltete traineddata-Dateien verwendet.\n" #~ "- Zusätzliche Sprachdaten-Dateien fehlen.\n" #~ "- Beschädigte Sprachdaten-Dateien.\n" #~ "\n" #~ "Stellen SIe sicher, dass die Sprachdaten-Dateien gültig und zu Tessaract " #~ "kompatibel sind %2." #~ msgid "Could not read %1: %2" #~ msgstr "%1 konnte nicht gelesen werden: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "PoDoFo" #~ msgstr "PoDoFo" #~ msgid "QPrinter" #~ msgstr "QPrinter" #~ msgid "90" #~ msgstr "90" #~ msgid "300" #~ msgstr "300" #~ msgid "100" #~ msgstr "100" #~ msgid "10" #~ msgstr "10" #~ msgid "%" #~ msgstr "%" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" #~ msgid "Document font:" #~ msgstr "Schriftart:" #~ msgid "Scale:" #~ msgstr "Skalierung:" #~ msgid "Errors occurred" #~ msgstr "Erkennungsfehler sind aufgetreten" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Folgende Seiten konnten nicht gerendert werden:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "substitutionen.txt" #~ msgid "Detect script and orientation" #~ msgstr "Skript und Ausrichtung erkennen" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "PackageKit ist erforderlich um tesseract-Sprachpakete zu verwalten, wurde " #~ "aber nicht gefunden. Bitte stattdessen die System-Paketverwaltung " #~ "benutzen, um die tesseract-Sprachpakete zu verwalten." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tTesseract konnte nicht initialisiert werden" #~ msgid "So&urces" #~ msgstr "Quellen" #~ msgid "&Output" #~ msgstr "Ausgabe" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "" #~ "Um bestimmte Bereiche zu erkennen, können Rechtecke darüber gezogen " #~ "werden." #~ msgid "Rendering image..." #~ msgstr "Bild wird gerendert..." #~ msgid "en_US" #~ msgstr "de_DE" #, fuzzy #~ msgid "So&urces" #~ msgstr "Quellen" #, fuzzy #~ msgid "&Output" #~ msgstr "Ausgabe" #~ msgid "Configuration" #~ msgstr "Konfiguration" gImageReader-3.4.0/po/el.po000066400000000000000000002576041417507262200154340ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Sandro Mani , 2016, 2017. # Dimitris Spingos (ΔημήτÏης Σπίγγος) , 2017. msgid "" msgstr "" "Project-Id-Version: gImageReader 3.1.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2021-05-19 18:33+0000\n" "Last-Translator: Eugenia Russell \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.7-dev\n" "X-Poedit-SourceCharset: UTF-8\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "ΕφαÏμογή OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Επανανίχνευση γλωσσών" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "ΔιαχείÏιση γλωσσών" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ΠÏοτιμήσεις" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Βοήθεια" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "ΠεÏί" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Έξοδος" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Λευκή / μαÏÏη λίστα χαÏακτήÏων" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 #, fuzzy msgid "Enter a string of characters..." msgstr "Λήψη παÏαμέτÏων..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Εντάξει" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "ΠÏοσανατολισμός παÏαθÏÏου εξόδου:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "ΟÏιζόντιος" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Κάθετος" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "ΕÏώτηση για εγκατάσταση λεξικών οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï… που λείπουν" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Αυτόματος έλεγχος για νέες εκδόσεις του Ï€ÏογÏάμματος" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ΠÏοκαθοÏισμένοι οÏισμοί γλωσσών:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "ΠÏόσθετοι οÏισμοί γλωσσών:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Το Ï€Ïόθημα του αÏχείου δεδομένων γλώσσας του tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ΠÏόθημα" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Ο κωδικός γλώσσας ISO 639-1 ακολουθοÏμενος από τον κωδικό της χώÏας" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Κωδικός ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Το όνομα της γλώσσας" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Όνομα" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "ΆκυÏο" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "ΓÏαμματοσειÏά παÏαθÏÏου εξόδου:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "ΠÏοεπιλογή" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Τοποθεσίες δεδομένων γλώσσας:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "ΔιαδÏομή οÏισμών γλώσσας:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "ΔιαδÏομή οÏθογÏαφικών λεξικών:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "ΔιαδÏομές ολόκληÏου του συστήματος" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "ΔιαδÏομές χÏήστη" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "ΕπαναδημιουÏγία οπισθοανίχνευσης" #: ../gtk/data/CrashHandler.ui.h:3 #, fuzzy, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Συγνώμη για το Ï€Ïόβλημα. Για να βοηθήσετε στην βελτίωση της εφαÏμογής, " "παÏακαλοÏμε να στείλετε μια αναφοÏά του Ï€Ïοβλήματος στο manisandro@gmail.com. ΠαÏακαλοÏμε, Ï€Ïοσπαθήστε να πεÏιγÏάψετε τι κάνατε Ï€Ïιν να καταÏÏεÏσει η " "εφαÏμογή. Επίσης, να συμπεÏιλάβετε την παÏακάτω πληÏοφοÏία. Σας ευχαÏιστοÏμε." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "ΕφαÏμογή" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Κλείσιμο" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Επιλογή αÏχείων" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "ΜοÏφή:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Έξοδος:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Κατάσταση εξόδου:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Άλλες επιλογές" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Εναλλαγή παÏαθÏÏου εξόδου" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "ΠεÏιστÏοφή Ï„Ïέχουσας σελίδας" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "ΠεÏιστÏοφή όλων των σελίδων" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Πηγές" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "ΠÏοσθήκη εικόνων" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "ΠÏοσθήκη εικόνων" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "ΑφαίÏεση εικόνας από τη λίστα" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "ΔιαγÏαφή εικόνας" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "ΚαθαÏισμός λίστας" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "ΑÏχεία" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Συσκευή:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Ανανέωση" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Έξοδος:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Κατάσταση:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "ΧÏώμα" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Κλίμακα του γκÏίζου" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Ανάλυση:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "ΣάÏωση" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 #, fuzzy msgid "Source:" msgstr "ΠÏοέλευση" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Λήψη" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Φωτεινότητα" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Αντίθεση" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Ανάλυση" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "ΑντιστÏοφή χÏωμάτων" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Μεγέθυνση" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "ΣμίκÏυνση" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Κανονικό μέγεθος" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "ΆÏιστη Ï€ÏοσαÏμογή" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 #, fuzzy msgid "Rotate page" msgstr "ΠεÏιστÏοφή όλων των σελίδων" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Επιλογή κατάστασης πεÏιστÏοφής" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Επιλογή κατάστασης εισαγωγής" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 #, fuzzy msgid "Select page" msgstr "Επιλογή γλώσσας" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Στοιχεία ελέγχου εικόνας" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Απλό κείμενο" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Αυτόματη ανίχνευση διάταξης" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "ΑναγνώÏιση όλων" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Επιλογή γλώσσας" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Εξαγωγή ως PDF" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Μια γÏαφική διεπαφή χÏήστη στο tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "ΤαίÏιασμα πεζών-κεφαλαίων" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "ΠÏοσάÏτηση στο υφιστάμενο κείμενο" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "Αυτόματη ανίχνευση διάταξης" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "ΠεÏιοχή σελίδων" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "ΠεÏιοχή σελίδων:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "ΠαÏάδειγμα: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "ΠεÏιοχή αναγνώÏισης:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "ΟλόκληÏη σελίδα" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Αυτόματη ανίχνευση" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 #, fuzzy msgid "Prepend to output text:" msgstr "ΠÏοσάÏτηση στο υφιστάμενο κείμενο" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 #, fuzzy msgid "Source page" msgstr "ΠÏοέλευση" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "ΤÏέχουσα σελίδα" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Πολλαπλές σελίδες..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 #, fuzzy msgid "Enter word:" msgstr "ΠαÏάβλεψη λέξης" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "ΠεÏιστÏοφή Ï„Ïέχουσας σελίδας" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 #, fuzzy msgid "Export to plain text" msgstr "Εξαγωγή σε PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Εξαγωγή σε PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 #, fuzzy msgid "Export to ODT" msgstr "Εξαγωγή σε PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "ΠÏοσάÏτηση στο υφιστάμενο κείμενο" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Άνοιγμα αÏχείου hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Αποθήκευση εξόδου" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 #, fuzzy msgid "Export" msgstr "Εξαγωγή ως PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ΚαθαÏισμός εξόδου" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "ΕÏÏεση και αντικατάσταση" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Εμφάνιση Ï€Ïοεπισκόπησης" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Ανάπτυξη" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "ΣÏμπτυξη" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Ιδιότητες" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "ΠÏοέλευση" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "ΠÏοσάÏτηση στο υφιστάμενο κείμενο" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Εισαγωγή στον δÏομέα" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Αντικατάσταση του υφιστάμενου κειμένου" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "ΔιατήÏηση της αλλαγής γÏαμμής αν..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "ΠÏοηγείται ένδειξη τέλους (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "ΠÏοηγοÏνται ή ακολουθοÏν εισαγωγικά" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Άλλες επιλογές" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Ένωση λέξεων με ενωτικό" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "ΣÏμπτυξη ÎºÎµÎ½Î¿Ï Î´Î¹Î±ÏƒÏ„Î®Î¼Î±Ï„Î¿Ï‚" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "ΔιατήÏηση παÏαγÏάφων" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Οπτικά βοηθήματα" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "ΧάÏαξη ÎºÎµÎ½Î¿Ï Î´Î¹Î±ÏƒÏ„Î®Î¼Î±Ï„Î¿Ï‚" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Άνοιγμα αÏχείου hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "ΑφαίÏεση αλλαγών γÏαμμής στο επιλεγμένο κείμενο" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "ΑναίÏεση" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "ΑκÏÏωση αναίÏεσης" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Κατάσταση εξόδου:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF με αόÏατη επικάλυψη κειμένου" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Συμπίεση:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Ποιότητα συμπίεσης:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "ΑλγόÏιθμος Ï€Ïόσμειξης:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Ρυθμίσεις εικόνας:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Ομογενοποίηση γÏαμμής και απόστασης λέξης" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 #, fuzzy msgid "Override font size:" msgstr "ΧÏήση των μεγεθών γÏαμματοσειÏάς που ανιχνεÏτηκαν" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "ΔιατήÏηση διαστημάτων μεγαλÏτεÏων από:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "χαÏακτήÏες" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Ρυθμίσεις κειμένου:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 #, fuzzy msgid "PDF version:" msgstr "Îέα έκδοση" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 #, fuzzy msgid "Additional information (optional):" msgstr "ΠÏόσθετοι οÏισμοί γλωσσών:" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "ΕÏÏεση" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Αντικατάσταση" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Αντικατάσταση όλων" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "ΕÏÏεση Ï€ÏοηγοÏμενου" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "ΕÏÏεση επόμενου" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "ΤαίÏιασμα πεζών-κεφαλαίων" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Υποκαταστάσεις" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "ΔιαγÏαφή" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "ΣειÏά:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "ΑναγνώÏιση" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Η αναγνώÏιση στο Ï€ÏόχειÏο" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Αποθήκευση ως εικόνα" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Άνοιγμα" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Αποθήκευση" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "ΚαθαÏισμός" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "ΠÏοσθήκη" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "ΑφαίÏεση" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "ΔιαχειÏιστής Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "ΔιαχείÏιση εγκατεστημένων γλωσσών:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "σαÏωμένο.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Εικόνες" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Επιλογή ονόματος αÏχείου εξόδου..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Αποτυχία αÏχικοποίησης της παÏασκηνιακής σάÏωσης" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Αποτυχία σάÏωσης" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Δεν ανιχνεÏτηκαν σαÏωτές." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "ΈναÏξη σάÏωσης..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Άνοιγμα συσκευής..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "ΟÏισμός επιλογών..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Λήψη παÏαμέτÏων..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "ΜεταφοÏά δεδομένων..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "ΑκÏÏωση σάÏωσης..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "ΠÏόθημα ονόματος αÏχείου" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Κωδικός" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Τοπικό όνομα" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "ΧειÏισμός κατάÏÏευσης" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Η εÏγασία σας έχει αποθηκευτεί στο %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Δεν υπάÏχει καμία μη αποθηκευμένη εÏγασία." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Αποτυχία λήψης οπισθοανίχνευσης. Είναι εγκατεστημένο το gdb;" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Αποτυχία φόÏτωσης εικόνας" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Το αÏχείο μποÏεί να μην είναι εικόνα ή να είναι αλλοιωμένο:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 #, fuzzy msgid "Page %1" msgstr "Ανάλυση του σφάλματος: %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Εικόνες PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Αποθήκευση εικόνας επιλογής" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "επιλεγμένο.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "ΑναγνώÏιση όλων" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "ΑναγνώÏιση επιλογής" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Εκτέλεση ανάλυσης διάταξης" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 #, fuzzy msgid "Select folder..." msgstr "Επιλογή αÏχείων" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "ΧωÏίς Ï€Ïοτάσεις" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "ΠÏοσθήκη στο λεξικό" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "ΠαÏάβλεψη λέξης" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 #, fuzzy msgid "Page" msgstr "Ανάλυση του σφάλματος: %1" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 #, fuzzy msgid "Text block" msgstr "ΑÏχεία κειμένου" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "ΠαÏάγÏαφος" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "ΓÏαμμή κειμένου" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "ΓÏαφικό" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 #, fuzzy msgid "Exporting to ODT..." msgstr "Εξαγωγή σε PDF" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 #, fuzzy msgid "Failed to render page %1" msgstr "" "\n" "[Αποτυχία αναγνώÏισης της σελίδας %1]\n" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 #, fuzzy msgid "Exporting to PDF..." msgstr "Εξαγωγή σε PDF" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 #, fuzzy msgid "The PDF library could not load the font '%1'." msgstr "Η βιβλιοθήκη PDF δεν υποστηÏίζει την επιλεγμένη γÏαμματοσειÏά." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "ΜονόχÏωμο" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Κατώφλι (το πιο κοντινό χÏώμα)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Διάχυση" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Συμπίεση (χωÏίς απώλειες)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Ομάδα 4 (χωÏίς απώλειες)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (με απώλειες)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 #, fuzzy msgid "Same as source" msgstr "ΠÏοέλευση" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 #, fuzzy msgid "in" msgstr "ΕÏÏεση" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Οι παÏακάτω σελίδες δεν μπόÏεσαν να επεξεÏγαστοÏν:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Σφάλματα αναγνώÏισης" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 #, fuzzy msgid "Multiple values" msgstr "Πολλαπλές Ï€ÏοελεÏσεις" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Συγχώνευση" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "ΠÏοσθήκη πεÏιοχής γÏαφικών" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 #, fuzzy msgid "Add paragraph" msgstr "ΠαÏάγÏαφος" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 #, fuzzy msgid "Add line" msgstr "ΠÏοσθήκη εικόνων" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "ΑÏχεία hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Άνοιγμα αÏχείου hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 #, fuzzy msgid "" "The following files could not be opened:\n" "%1" msgstr "Τα παÏακάτω αÏχεία δεν μπόÏεσαν να ανοιχθοÏν:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 #, fuzzy msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "Το αÏχείο δεν φαίνεται να πεÏιέχει έγκυÏο hOCR HTML: %1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Αδυναμία ανοίγματος αÏχείων" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "έξοδος" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Αποθήκευση εξόδου hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Αποτυχία αποθήκευσης εξόδου" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Ελέγξτε ότι έχετε δικαίωμα εγγÏαφής στον επιλεγμένο φάκελο." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 #, fuzzy msgid "Save ODT Output..." msgstr "Αποθήκευση εξόδου PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "ΑÏχεία PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Αποθήκευση εξόδου PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 #, fuzzy msgid "Invalid Output" msgstr "Αποθήκευση εξόδου" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "ΑÏχεία κειμένου" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 #, fuzzy msgid "Save Text Output..." msgstr "Αποθήκευση εξόδου..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Η έξοδος δεν αποθηκεÏτηκε" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Αποθήκευση της εξόδου Ï€Ïιν την συνέχεια;" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Αντικατάσταση..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "ΕφαÏμόζονται υποκαταστάσεις..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNächstes Feld
Shift+TabVorheriges Feld
Pfeil runterNächste Zeile
Pfeil hochVorherige Zeile
Ctrl+LeerKorrekturvorschläge
Ctrl+EnterZum Wörterbuch hinzufügen
Ctrl+BFettschrift
Ctrl+IKursiv
Ctrl+DWort an Cursorposition " "trennen
Ctrl+MMit vorherigem Wort zusammenlegen
Ctrl+LöschenWort löschen
Ctrl+Shift+MMit nächstem Wort zusammenlegen
Ctrl+{Links,Rechts}Linker Boundingbox Rand anpassen
Ctrl+Shift+{Links,Rechts}Rechter Boundingbox Rand " "anpassen
Ctrl+{Hoch,Runter}Oberer Boundingbox Rand " "anpassen
Ctrl+Shift+{Hoch,Runter}Unterer " "Boundingbox Rand anpassen
Ctrl++Schrift " "vergrössern
Ctrl+-Schrift verkleinern
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "ΧÏήση του tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Επιλογή εικόνας για έναÏξη..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 #, fuzzy msgid "Multiple sources (%1)" msgstr "Πολλαπλές Ï€ÏοελεÏσεις" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Έτοιμος" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Îέα έκδοση" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "Ο gImageReader %1 είναι διαθέσιμος" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Λήψη" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "ΑÏχείο αλλαγών" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Îα μην ξαναενημεÏωθώ" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Îα μην ξαναεμφανιστεί" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Εγκατάσταση" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Λείπει το οÏθογÏαφικό λεξικό" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Το οÏθογÏαφικό λεξικό για το %1 δεν είναι εγκατεστημένο" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Εγκατάσταση του οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï Î»ÎµÎ¾Î¹ÎºÎ¿Ï Î³Î¹Î± το '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Σφάλμα" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Αποτυχία εγκατάστασης του οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï Î»ÎµÎ¾Î¹ÎºÎ¿Ï: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Αποτυχία δημιουÏγίας καταλόγου για οÏθογÏαφικά λεξικά." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Αδυναμία ανάγνωσης του %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "ΜεταφοÏτώνεται το '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Εγκατεστημένα λεξικά" #: ../gtk/src/MainWindow.cc:636 #, fuzzy msgid "" "The following dictionaries were installed:\n" "%1" msgstr "Τα παÏακάτω λεξικά εγκαταστάθηκαν: %1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Δεν βÏέθηκαν οÏθογÏαφικά λεξικά για το '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 #, fuzzy msgid "Page: %1\n" msgstr "Ανάλυση του σφάλματος: %1" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "ΕγγÏαφο" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Επικολλήθηκε το %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Η έξοδος δεν αποθηκεÏτηκε" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Αποθήκευση της εξόδου Ï€Ïιν την συνέχεια;" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "ΑφαίÏεση αλλαγών γÏαμμών..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "ΟÏθογÏαφικός έλεγχος" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 #, fuzzy msgid "File: %1" msgstr "ΑÏχεία" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 #, fuzzy msgid "Page: %1" msgstr "Ανάλυση του σφάλματος: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Αποτυχία αναγνώÏισης της σελίδας %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Επιλογή αÏχείων" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Αποθήκευση εξόδου..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "ΕγγÏαφο" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Δεν υπάÏχουν διαθέσιμες γλώσσες" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Δεν υπάÏχουν διαθέσιμες γλώσσες tesseract Ï€Ïος χÏήση. Η αναγνώÏιση δεν θα " "δουλέψει." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Πολυγλωσσικός" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Αυτόματος τεμαχισμός σελίδας" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Τεμαχισμός σελίδας με Ï€Ïοσανατολισμό και αναγνώÏιση γÏαφής" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "ΘεωÏείται μονή στήλη κειμένου" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "ΘεωÏείται μονό μπλοκ κάθετα στοιχισμένου κειμένου" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "ΘεωÏείται μονό ομοιόμοÏφο μπλοκ κειμένου" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "ΘεωÏείται γÏαμμή κειμένου" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "ΘεωÏείται απλή λέξη" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "ΘεωÏείται απλή λέξη σε κÏκλο" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "ΑÏαιό κείμενο χωÏίς καμιά συγκεκÏιμένη τάξη" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "ΑÏαιό κείμενο με Ï€Ïοσανατολισμό και αναγνώÏιση γÏαφής" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Κατάσταση Ï„ÎµÎ¼Î±Ï‡Î¹ÏƒÎ¼Î¿Ï ÏƒÎµÎ»Î¯Î´Î±Ï‚" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "ΔιαχείÏιση γλωσσών..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "ΤÏέχουσα επιλογή" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Συνέβησαν σφάλματα αναγνώÏισης" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Αποτυχία Ï€Ïοετοιμασίας του tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "ΑναγνώÏιση της σελίδας %1 (%2 από %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Σελίδα %1: αποτυχία απόδοσης της σελίδας" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Γίνεται αναγνώÏιση..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Σελίδα %1: αποτυχία απόδοσης της σελίδας" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "Αποτυχία αποθήκευσης εξόδου" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 #, fuzzy msgid "The following errors occurred:" msgstr "Τα παÏακάτω σφάλματα συνέβησαν:%1" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "ΑκυÏώθηκε η σάÏωση" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Δεν οÏίστηκε σαÏωτής" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Αδυναμία σÏνδεσης με σαÏωτή" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "ΑδÏνατη η έναÏξη σάÏωσης" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Σφάλμα επικοινωνίας με τον σαÏωτή" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Αποτυχία αποθήκευσης της εικόνας" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 #, fuzzy msgid "Operation is cancelled." msgstr "ΑκυÏώθηκε η σάÏωση" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 #, fuzzy msgid "Access to scanner is denied." msgstr "Δεν οÏίστηκε σαÏωτής" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "Απλό κείμενο" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Εικόνες και PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Σφάλμα Ï€ÏοχείÏου" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Αποτυχία ανάγνωσης του Ï€ÏοχείÏου" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Επικολλήθηκε το %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Σφάλμα στιγμιοτÏπου" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Αποτυχία λήψης στιγμιοτÏπου" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Στιγμιότυπο %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "ΑποθηκεÏεται η εικόνα..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Αδυναμία εγγÏαφής αÏχείου" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Αδυναμία εγγÏαφής στο %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Îα διαγÏαφεί το αÏχείο;" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "Αποθήκευση εξόδου" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Λείπει αÏχείο" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Το παÏακάτω αÏχείο έχει διαγÏαφεί ή μετακινηθεί:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Αναζήτηση για" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Αντικατάσταση με" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Λίστα υποκαταστάσεων" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Άνοιγμα λίστας υποκαταστάσεων" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Σφάλμα ανάγνωσης αÏχείου" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Αδυναμία ανάγνωσης του '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Συνέβησαν σφάλματα ανάγνωσης του αÏχείου" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" "Κάποιες καταχωÏίσεις της λίστας υποκατάστασης δεν μπόÏεσαν να διαβαστοÏν." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Αποθήκευση λίστας υποκαταστάσεων" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Σφάλμα αποθήκευσης αÏχείου" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "ΑδÏνατη η εγγÏαφή στο '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Îα αποθηκευτεί η λίστα;" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Θέλετε να αποθηκευτεί η Ï„Ïέχουσα λίστα;" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 #, fuzzy msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Το PackageKit απαιτείται για τη διαχείÏιση των γλωσσικών πακέτων tesseract " "για ολόκληÏο το σÏστημα, αλλά δεν βÏέθηκε. ΠαÏακαλοÏμε, χÏησιμοποιήστε το " "λογισμικό διαχείÏισης πακέτων του συστήματος για να διαχειÏιστείτε τα " "γλωσσικά πακέτα του tesseract ή αλλάξτε για να χÏησιμοποιήσετε τη διαδÏομή " "tessdata του χÏήστη στον διάλογο ÏÏθμισης." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "ΜεταφέÏονται οι διαθέσιμες γλώσσες" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Αποτυχία μεταφοÏάς του καταλόγου των διαθέσιμων γλωσσών: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Ανάλυση του σφάλματος: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "ΕφαÏμογή αλλαγών..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Αποτυχία δημιουÏγίας καταλόγου για τα αÏχεία tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "ΜεταφοÏτώνεται το %1..." #: ../gtk/src/TessdataManager.cc:330 #, fuzzy msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Τα παÏακάτω αÏχεία δεν μπόÏεσαν να μεταφοÏτωθοÏν ή να αφαιÏεθοÏν:\n" "%1\n" "\n" "Ελέγξτε τη σÏνδεση και τα δικαιώματα του καταλόγου." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Îαι" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Όχι" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "ΑπόÏÏιψη" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "ΑπόÏÏιψη" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "ΓÏαμμή κειμένου" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCR, PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "ΠεÏί του gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Μια γÏαφική διεπαφή χÏήστη στο tesseract-" "ocr

Ιστότοπος

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Μνείες" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Άδεια" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Κωδικοποίηση συστήματος" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Κωδικοποίηση αÏχείου κειμένου:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

Η εφαÏμογή " "κατέÏÏευσε

Συγνώμη για το Ï€Ïόβλημα. Για να βοηθήσετε στην " "βελτίωση της εφαÏμογής, παÏακαλοÏμε αναφέÏτε το Ï€Ïόβλημα στο manisandro@gmail.com. ΠαÏακαλοÏμε, " "Ï€Ïοσπαθήστε να πεÏιγÏάψετε τι κάνατε Ï€Ïιν να καταÏÏεÏσει η εφαÏμογή. Επίσης, " "να συμπεÏιλάβετε την παÏακάτω πληÏοφοÏία. Σας ευχαÏιστοÏμε.

" #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "

Η εφαÏμογή " "κατέÏÏευσε

Συγνώμη για το Ï€Ïόβλημα. Για να βοηθήσετε στη " "βελτίωση της εφαÏμογής, παÏακαλοÏμε να εξετάσετε την αναφοÏά του Ï€Ïοβλήματος " "στο manisandro@gmail.com. ΠαÏακαλοÏμε, " "Ï€Ïοσπαθήστε να πεÏιγÏάψετε τι κάνατε Ï€Ïιν την κατάÏÏευση της εφαÏμογής. " "Επίσης, συμπεÏιλάβετε τις παÏακάτω πληÏοφοÏίες. Σας ευχαÏιστοÏμε.

" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Μεγέθυνση" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "ΣμίκÏυνση" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Κανονικό μέγεθος" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "ΆÏιστη Ï€ÏοσαÏμογή" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "ΑÏιστεÏή πεÏιστÏοφή" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "ΑÏιστεÏή πεÏιστÏοφή" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Δεξιά πεÏιστÏοφή" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Δεξιά πεÏιστÏοφή" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Στοιχεία ελέγχου εικόνας" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Αυτόματη ανίχνευση διάταξης" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Εναλλαγή παÏαθÏÏου εξόδου" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Εξαγωγή ως PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 #, fuzzy msgid "Failed to write to file" msgstr "Αποτυχία ανοίγματος του αÏχείου" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Αποθήκευση κειμένου ως hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "ΕÏÏεση και αντικατάσταση" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Εμφάνιση Ï€Ïοεπισκόπησης" #: ../qt/src/MainWindow.cc:624 #, fuzzy msgid "" "The following dictionary files were installed:\n" "%1" msgstr "Τα παÏακάτω αÏχεία λεξικών εγκαταστάθηκαν:%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "Îα διαγÏαφεί το αÏχείο;" #: ../qt/src/TessdataManager.cc:281 #, fuzzy msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Τα παÏακάτω αÏχεία δεν μπόÏεσαν να μεταφοÏτωθοÏν ή να αφαιÏεθοÏν:\n" "%1\n" "\n" "Ελέγξτε τη σÏνδεση και τα δικαιώματα του καταλόγου." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Έξοδος" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Κατάσταση OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "ΠÏοσθήκη εικόνων" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Επικόλληση" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Λήψη στιγμιοτÏπου" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "ΑφαίÏεση εικόνας" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "ΔιαγÏαφή εικόνας" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "ΚαθαÏισμός λίστας" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "ΑφαίÏεση αλλαγών γÏαμμής" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Αποθήκευση εξόδου" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ΚαθαÏισμός εξόδου" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "ΜοÏφή:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "ΥπάÏχει ήδη ένα αÏχείο με όνομα \"%1\". Είσαστε βέβαιοι ότι θέλετε να το " #~ "αντικαταστήσετε;" #~ msgid "Overwrite File?" #~ msgstr "Îα αντικατασταθεί το αÏχείο;" #, fuzzy #~ msgid "New document %1" #~ msgstr "ΕγγÏαφο" #~ msgid "Recent" #~ msgstr "ΠÏόσφατα" #, fuzzy #~ msgid "Failed to create output" #~ msgstr "Αποτυχία αποθήκευσης εξόδου" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

Η εφαÏμογή " #~ "κατέÏÏευσε

Συγνώμη για το Ï€Ïόβλημα. Για να βοηθήσετε στη " #~ "βελτίωση της εφαÏμογής, παÏακαλοÏμε να εξετάσετε την αναφοÏά του " #~ "Ï€Ïοβλήματος στο manisandro@gmail.com. ΠαÏακαλοÏμε, " #~ "Ï€Ïοσπαθήστε να πεÏιγÏάψετε τι κάνατε Ï€Ïιν την κατάÏÏευση της εφαÏμογής. " #~ "Επίσης, συμπεÏιλάβετε τις παÏακάτω πληÏοφοÏίες. Σας ευχαÏιστοÏμε.

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "ΠαÏάδειγμα: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Απλό κείμενο" #~ msgid "Multiple sources" #~ msgstr "Πολλαπλές Ï€ÏοελεÏσεις" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Σελίδα %1: αποτυχία απόδοσης της σελίδας" #~ msgid "The following errors occurred:%1" #~ msgstr "Τα παÏακάτω σφάλματα συνέβησαν:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Τα παÏακάτω αÏχεία θα διαγÏαφοÏν:%1" #~ msgid "Failed to open file" #~ msgstr "Αποτυχία ανοίγματος του αÏχείου" #~ msgid "The file could not be opened: %1." #~ msgstr "Τα αÏχείο δεν μπόÏεσε να ανοιχθεί: %1" #~ msgid "Invalid hOCR file" #~ msgstr "ΆκυÏο αÏχείο hOCR" #~ msgid "The application has crashed" #~ msgstr "Η εφαÏμογή κατέÏÏευσε" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Το Tesseract κατέÏÏευσε με το παÏακάτω μήνυμα:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Αυτό συμβαίνει συνήθως για έναν από τους παÏακάτω λόγους:\n" #~ "- ΧÏησιμοποιοÏνται παÏωχημένα αÏχεία δεδομένων εκπαίδεθυσης.\n" #~ "- Λείπουν βοηθητικά αÏχεία δεδομένων γλώσσας.\n" #~ "- ΚατεστÏαμμένα αÏχεία δεδομένων γλώσσας.\n" #~ "\n" #~ "Εξασφαλίστε ότι τα αÏχεία δεδομένων γλώσσας είναι έγκυÏα και συμβατά με " #~ "το tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Αδυναμία ανάγνωσης του %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "ΓÏαμματοσειÏά εγγÏάφου:" #~ msgid "Scale:" #~ msgstr "Κλίμακα:" #~ msgid "Errors occurred" #~ msgstr "Συνέβησαν σφάλματα" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Οι παÏακάτω σελίδες δεν μπόÏεσαν να αποδοθοÏν:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "λίστα_υποκατάστασης.txt" #~ msgid "Detect script and orientation" #~ msgstr "Ανίχνευση δέσμης ενεÏγειών και Ï€ÏοσανατολισμοÏ" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Το PackageKit απαιτείται για τη διαχείÏιση των γλωσσικών πακέτων " #~ "tesseract, αλλά δεν βÏέθηκε. ΠαÏακαλοÏμε, χÏησιμοποιήστε το λογισμικό " #~ "διαχείÏισης πακέτων του συστήματος για να διαχειÏιστείτε τα γλωσσικά " #~ "πακέτα του tesseract." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tΑποτυχία Ï€Ïοετοιμασίας του tesseract" #~ msgid "So&urces" #~ msgstr "Π&ÏοελεÏσεις" #~ msgid "&Output" #~ msgstr "Έ&ξοδος" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Για αναγνώÏιση συγκεκÏιμένων πεÏιοχών, σÏÏτε οÏθογώνια γÏÏω τους." #~ msgid "Rendering image..." #~ msgstr "Απόδοση εικόνας..." #~ msgid "en_US" #~ msgstr "en_US" gImageReader-3.4.0/po/eo.po000066400000000000000000002373231417507262200154330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-03-10 17:03+0000\n" "Last-Translator: phlostically \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.5.2-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Tekstlegilo" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Rediveni Lingvojn" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Administri Lingvojn" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferoj" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Helpo" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Pri" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Forlasi" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Akceptolisto / rifuzolisto de signoj" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Ne permesi rekonadon de la jenaj signoj (rifuzolisto):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Entajpu ĉenon de signoj…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Permesi rekonadon nur de la jenaj signoj (akceptolisto):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Bone" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "OrientiÄo de eligpanelo:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontala" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertikala" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Demando pri instalado de mankantaj literumvortaroj" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "AÅ­tomate kontroli novajn versiojn de la programaro" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "AntaÅ­difinitaj lingvodifinoj:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Pliaj lingvodifinoj:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Prefikso de la dosiero de lingvaj datenoj de tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefikso" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "La lingvokodo laÅ­ ISO 639-1 sekvita de la landokodo" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO-Kodo" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "La nomo de la lingvo" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nomo" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Nuligi" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Tiparo de eligpanelo:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Apriora" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Lokoj de lingva dateno:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Dosierindiko de lingvodifinoj:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Dosierindiko de literumvortaroj:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Tutsistemaj dosierindikoj" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Uzanto-agordiaj dosierindikoj" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "AÅ­tomate malfermi elportitajn dokumentojn per implicita aplikaĵo" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Refari retrospuron" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "La aplikaĵo kolapsis\n" "\n" "Pardonpeton pro la Äeno. Por helpi plibonigi la aplikaĵon, bonvolu raporti " "la problemon al manisandro@gmail.com. Bonvolu priskribi " "tion, kion vi estis faranta antaÅ­ ol la kolapso. Krome, inkluzivu la ĉi-" "subajn informojn. Dankon." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract kolapsis\n" "\n" "Tesseract (la tekstlegila modulo) kolapsis dum rekonado de teksto. Tio povas " "okazi se la trejnaj datenoj estas koruptitaj aÅ­ ne kongruaj kun la versio de " "tesseract, aÅ­ pro cimo en tesseract.\n" "\n" "La jena stakspuro eble donas pliajn informojn pri la kolapso.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Efektivigi" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Fermi" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Elektu dosierujon…" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Dosierformo:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Eligo:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Eliga reÄimo:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Neniu ĵusa dosiero" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Aliaj opcioj" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Baskuligi eligpanelon" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Turni aktualan paÄon" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Turni ĉiujn paÄojn" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Fontoj" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Aldoni bildojn" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Aldoni Bildojn" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Forigi bildon el listo" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "ForviÅi bildon" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Malplenigi liston" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturoj" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Dosieroj" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Aparato:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "ReÅargi" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Eligo:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "ReÄimo:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Koloro" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Grizoskalo" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Distingivo:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skani" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Fonto:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Akiri" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Helo" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrasto" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Distingivo" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inversigi kolorojn" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Enzomi" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Elzomi" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normala grando" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "AÅ­tomata adapto" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Turni paÄon" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Elekti reÄimon de turnado" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Elekti reÄimon de enmetado" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Elekti paÄon" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Bildoregiloj" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Plata teksto" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "AÅ­tomate diveni aranÄon" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Rekoni ĉion" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Elekti lingvon" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Elporti" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Grafika fasado por tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "AmasreÄimo" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En amasreÄimo, ĉiu eniga fonto estos traktata aparte, kaj la eligo estos " "konservita apud al la eniga dosiero." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Ekzistanta eligo:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "AntaÅ­meti paÄajn numerojn antaÅ­ eliga teksto" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "AÅ­tomate diveni paÄan aranÄon" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "PaÄa Intervalo" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "PaÄa intervalo:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Ekzemple: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Rekonota areo:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Tuta paÄo" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "AÅ­tomate trovi" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "AntaÅ­meti antaÅ­ aktuala teksto:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Fonta dosiernomo" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Fonta paÄo" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Protektata PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Aktuala PaÄo" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Pluraj PaÄoj…" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "AmasreÄimo…" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Aldoni Vorton" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Entajpu vorton:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Enmeti novan eligon post lasta paÄo" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Enmeti novan eligon antaÅ­ aktuala paÄo" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Elporti plattekste" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Elporti kiel PDF-dosieron" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Elporti kiel ODF-dosieron" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Enmeti dokumenton post lasta paÄo" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Enmeti dokumenton antaÅ­ aktuala paÄo" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Malfermi hOCR-dosieron" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Konservi eligon" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Elporti" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ForviÅi eligon" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Serĉi kaj anstataÅ­igi" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Montri konfidvalorojn" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "AntaÅ­rigardi" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Sekven (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "AntaÅ­en (Maj+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Etendi ĉion" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Maletendi ĉion" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Atributoj" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Fonto" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Postmeti post aktuala teksto" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Enmeti ĉe kursoro" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "AnstataÅ­igi aktualan tekston" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Konservi linifinon se…" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "AntaÅ­ita de fina interpunkcio (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "AntaÅ­ita aÅ­ sekvita de citilo" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Aliaj opcioj" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Kunigi vortojn dividitajn per streketoj" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Kunigi spacetojn" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Konservi alineojn" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Vidaj helpiloj" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Videbligi spacetojn" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Malfermi hOCR-dosieron" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Forigi linifinojn en elektita teksto" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Malfari" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refari" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Eliga reÄimo:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF kun nevidebla teksta surmeto" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Densigo:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Densiga kvalito:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "Punktoj en colo:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Punktiga algoritmo:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Bildaj agordoj:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Kongruigi interliniajn kaj intervortajn spacojn" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Devigi tiparfamilion:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Apriora tiparfamilio:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Devigi tiparan grandon:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Aligrandigo de tiparo:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Konservu spacetojn pli larÄajn ol:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "signojn" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Trakti streketojn antaÅ­ linifinoj" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Agordoj pri teksto:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Formato:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "LarÄo" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Alto" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Supozi, ke bildaj fontoj havas Äustan nombron de punktoj en colo:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Baza" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Versio de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Pasvorto:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Konfirmu pasvorton:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Ĉifrado (ne deviga):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "AÅ­toro:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titolo:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Temo:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Kreinto:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produktinto:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Ĉefvortoj:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Pliaj informoj (ne devigaj):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Enporti el aktuala fonto" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Altnivela" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Serĉi" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "AnstataÅ­igi" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "AnstataÅ­igi ĉiujn" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Trovi antaÅ­an" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Trovi postan" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Kongruigi usklecon" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "AnstataÅ­igoj" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "ForviÅi" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordo:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Rekoni" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Rekoni en tondujon" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Konservi kiel bildon" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Malfermi" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Konservi" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Malplenigi" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Aldoni" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Forigi" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Administrilo de datenoj de tesseract" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Administri instalitajn lingvojn:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "skano.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Bildoj" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Elektu Eligan Dosiernomon…" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Malsukcesis startigo de interna modulo por skanado." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Malsukcesis skanado" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Neniu skanilo trovita." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Ekskanante…" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Malfermante aparaton…" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Agordante…" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Akirante parametrojn…" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transigante datenojn…" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Ĉesigante skanon…" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefikso de dosiernomo" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kodo" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "IndiÄena nomo" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skribsistemo" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Kolapso-Traktilo" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Via laboro konserviÄis ĉe %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Ne ekzistis nekonservitan laboron." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Ne povis akiri retrospuron. Ĉu GDB estas instalita?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Malsukcesis Åargado de bildo" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "La dosiero estas eble nebilda aÅ­ koruptita:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "PaÄo %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG-Bildoj" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Konservi Elektitan Bildon" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "elekto.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Rekoni ĉion" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Rekoni elektitaĵon" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Analizante tekstan aranÄon" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Elektu dosierujon…" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Neniu sugesto" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Aldoni en vortaron" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignori vorton" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "PaÄo" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Teksta bloko" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Alineo" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Tekstlinio" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafikaĵo" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Malsukcesis elportado" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Malsukcesis elportado al ODT: ne povis skribi sur eligan dosieron." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Elportante al ODT…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Nuligis la operacion" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Malsukcesis bildigo de paÄo %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Elportante al PDF…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Elportado al PDF malsukcesis: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "La PDF-biblioteko ne povis Åargi la tiparon '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Unukolora" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Sojlo (plej proksima koloro)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difuza" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "ZIP (senperda)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grupo 4 (senperda)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "JPEG (perdema)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Same kiel fonto" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Alia" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "colo(j)" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "Malsulcesis elporto kiel teksodosiero: ne povis skribi sur eligan dosieron." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloko" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linio" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Vorto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Misliterumita vorto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Montri konfidvalorojn" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "La jenaj paÄoj ne estis trakteblaj:\n" "% 1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Eraroj pri rekonado" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Pluraj valoroj" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Kunfandi" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Disigi disde patro" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "InterÅanÄi" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Aldoni grafikan regionon" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Aldoni tekstan blokon" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Aldoni alineon" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Aldoni linion" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Aldoni vorton" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "HTML-dosieroj de hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Malfermi hOCR-Dosieron" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "La jenaj dosieroj ne estis malfermeblaj:\n" "% 1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "La jenaj dosieroj ne validas kiel hOCR-HTML-dosieroj:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Ne povis malfermi dosierojn" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "eligo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Konservi hOCR-Eligon…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Malsukcesis konservado de eligo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Kontrolu, ĉu vi havas skribajn permesojn en la elektita dosierujo." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Tekstaj dokumentoj de OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Konservi ODT-Eligon…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-Dosieroj" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Konservi PDF-Eligon…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Nevalida Eligo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Ne povas anstataÅ­igi dosieron, kiu estas fonta bildo de ĉi tiu dokumento." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Tekstaj Dosieroj" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Konservi Tekstan Eligon…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Eligo ne konservita" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ĉu konservi eligon antaÅ­ ol daÅ­rigado?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "AnstataÅ­igante…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "AnstataÅ­igante…" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Fulmoklavoj" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linioj antaÅ­:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linioj post:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Fulmoklavoj" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Konfidvaloro: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Uzado de tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Elektu bildon por komenci…" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Pluraj fontoj (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Preta" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nova versio" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 estas havebla" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "ElÅuti" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Listo de ÅanÄoj" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ne sciigi denove" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ne montri denove" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instali" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Mankas literumvortaro" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "La literumvortaro pri %1 ne estas instalita" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instalante literumvortaron pri '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Eraro" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Malsukcesis instalado de literumvortaro: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Malsukcesis kreo de dosierujo por literumvortaroj." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Ne povis legi %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "ElÅutante '%1'…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "La jenaj vortaroj ne estis elÅuteblaj:\n" "%1\n" "\n" "Kontrolu la konekton kaj dosierujajn permesojn.\n" "Konsilo: Se vi ne havas skribajn permesojn en sistemaj dosierujoj, vi povas " "ÅanÄi al dosierujoj de la uzanto per la agorda dialogo." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Vortaroj instalitaj" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "La jenaj vortaroj estis instalitaj:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Neniu literumvortaro trovita pri '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "PaÄo: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Algluis %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Eligo ne konservita" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Ĉu konservi eligon antaÅ­ ol daÅ­rigado?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Forigante linifinojn…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Kontroli literumadon" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Dosiero: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "PaÄo: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Malsukcesis rekonado de paÄo %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Elekti Dosierojn" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Konservi Eligon…" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Neniu lingvo estas havebla" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "Neniu lingvo estas havebla por tesseract. Rekonado ne funkcios." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Plurlingva" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "AÅ­tomata paÄosegmentigo" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "PaÄosegmentigo kun divenado de orientiÄo kaj skribsistemo" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Supozi unu kolumnon de teksto" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Supozi unu blokon de vertikale rektigita teksto" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Supozi unu homogenan tekstan blokon" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Supozi linion de teksto" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Supozi unu vorton" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Supozi unu vorton en cirklo" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Maldensa senorda teksto" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Maldensa ordo kun divenado de orientiÄo kaj skribsistemo" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "ReÄimo de paÄosegmentigo" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Akceptolisto / rifuzolisto de signoj…" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Administri lingvojn…" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "AnstataÅ­igi ekzistantan eligon" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Preterpasi traktadon de fonto" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Aktuala elekto" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Okazis eraroj pri rekonado" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Starto de tesseract malsukcesis" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Rekonante paÄon %1 (la %2-an el %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- PaÄo %1: malsukcesis bildigo de paÄo" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Rekonante…" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: malsukcesis bildigo de paÄo" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: eligo jam ekzistas, pretersaltante" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: malsukcesis kreo de eliga dosiero" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Okazis la jenaj eraroj:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Nuligis skanadon" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Neniu skanilo specifita" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Ne povas konekti al skanilo" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ne povas startigi skanon" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Eraro pri komunikado kun skanilo" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Malsukcesis konservado de bildo" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operacio nuliÄis." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "La aparato estas okupata." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "La kovrilo estas malfermita." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Paperenmetilo ÅtopiÄis." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Paperenmetilo estas sen dokumentoj." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Atingo al skanilo estas malpermesata." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Entajpu la pasvorton de la dosiero '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF kun teksto" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "La PDF-dosiero jam enhavas tekston:\n" "%1\n" "Ĉu malfermi Äin malgraÅ­ tio?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Bildoj kaj PDF-oj" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Eraro pri Tondujo" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Malsukcesis legado el tondujo." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Algluis %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Eraro pri Ekrankopio" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Malsukcesis ekrankopiado." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Ekrankopio %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Konservante bildon…" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ne Povas Skribi sur Dosieron" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Ne povis skribi sur la dosieron %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Ĉu ForviÅi Dosieron?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Ĉu forviÅi la jenajn dosierojn?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Malfermi eligon" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "TroviÄis kaj tekstan kaj hOCR-eligon. Kiun vi volas malfermi?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Mankanta Dosiero" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "La jena dosiero estis forigita aÅ­ movita:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Serĉi" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "AnstataÅ­igi per" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Listo de AnstataÅ­igoj" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Malfermi Liston de AnstataÅ­igoj" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Eraro pri Legado de Dosiero" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Ne povis legi la dosieron '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Okazis Eraroj dum Legado de Dosiero" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Kelkaj eroj de la listo de anstataÅ­igoj estis nelegeblaj." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Konservi Liston de AnstataÅ­igoj" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Eraro pri Konservado de Dosiero" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Ne povis skribi sur la dosieron '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Ĉu Konservi Liston?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Ĉu vi volas konservi la aktualan liston?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Necesas sed ne troviÄis sesia konekto al la interna modulo de PackageKit por " "administri tutsistemajn lingvopakojn de tesseract. Ĉi tiu servo kutime estas " "provizata de programaradministrilo kiel Gnome Software. Bonvolu instali tian " "programaron, kiu provizas la necesan PackageKit-interfacon; uzu alian " "sisteman programaradministrilon por rekte administri la lingvopakojn de " "tesseract; aÅ­ ÅanÄu al laÅ­menda dosierindiko de datendosieroj de tesseract " "per la agorda dialogo." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Akirante liston de haveblaj lingvoj" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Ne sukcesis akirado de listo de haveblaj lingvoj: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Sintaksa eraro: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Efektivigante ÅanÄojn…" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Malsukcesis kreo de dosierujo por datendosieroj de tesseract." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "ElÅutante %s…" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "La jenaj dosieroj ne povis esti elÅutitaj aÅ­ forigitaj:\n" "%1\n" "\n" "Kontrolu la konekton kaj dosierujajn permesojn.\n" "\n" "Konsilo: Se vi ne havas skribajn permesojn en sistemaj dosierujoj, vi povas " "ÅanÄi al dosierujoj de la uzanto per la agorda dialogo." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Jes" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Jesi pri ĉio" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ne" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nei pri ĉio" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Forĵeti" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Forĵeti" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Teksto" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Pri gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Grafika fasado por tesseract-ocr

Retejo

 " "

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Kontribuantoj" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Permesilo" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En amasreÄimo, ĉiu eniga fonto estos traktata aparte, kaj la eligo estos " "konservita apud al la eniga dosiero." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Sistema teksta enkodigo" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Teksta enkodigo de dosiero:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "La aplikaĵo kolapsis\n" "\n" "Pardonpeton pro la Äeno. Por helpi plibonigi la aplikaĵon, bonvolu raporti " "la problemon al manisandro@gmail.com. Bonvolu priskribi " "tion, kion vi estis faranta antaÅ­ ol la kolapso. Krome, inkluzivu la ĉi-" "subajn informojn. Dankon." #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "Tesseract kolapsis\n" "\n" "Tesseract (la tekstlegila modulo) kolapsis dum rekonado de teksto. Tio povas " "okazi se la trejnaj datenoj estas koruptitaj aÅ­ ne kongruaj kun la versio de " "tesseract, aÅ­ pro cimo en tesseract.\n" "\n" "La jena stakspuro eble donas pliajn informojn pri la kolapso.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Platlita presilo" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "AÅ­tomata Paperenmetilo AntaÅ­e" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "AÅ­tomata Paperenmetilo Reverse" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "AÅ­tomata Paperenmetilo AmbaÅ­flanke" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Enzomi" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Elzomi" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normala Grando" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "AÅ­tomata Adapto" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Turni Maldekstren" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Turni maldekstren" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Turni Dekstren" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Turni dekstren" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Bildoregiloj" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "AÅ­tomate diveni aranÄon" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Baskuligi Eligpanelon" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Elporti kiel PDF-dosieron" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Interna modulo:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Vertikala" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Horizontala" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Malsukcesis skribado sur dosiero" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: provizas pli da opcioj pri densigo de " "bildoj, sed ne subenas komplikajn skribsistemojn.
  • QPrinter: nur " "subtenas JPEG-densigon por konservi bildojn, sed subtenas komplikajn " "skribsistemojn.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Konservi kiel hOCR-tekston" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Serĉi kaj AnstataÅ­igi" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "AntaÅ­rigardi" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Jen la instalitaj vortaraj dosieroj:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Neniu ĵusa dosiero" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "ForviÅi Dosierojn" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "La jenaj dosieroj ne povis esti elÅutitaj aÅ­ forigitaj:\n" "%1\n" "\n" "Kontrolu la konekton kaj dosierujajn permesojn.\n" "Konsilo: Se vi ne havas skribajn permesojn en sistemaj dosierujoj, vi povas " "ÅanÄi al dosierujoj de la uzanto per la agorda dialogo." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Eligo" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "ReÄimo de optika signorekono:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Aldoni dosierujon" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Alglui" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Fari Ekrankopion" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Forigi Bildon" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "ForviÅi Bildon" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Malplenigi Liston" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Forigi Linifinojn" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Konservi Eligon" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ForviÅi Eligon" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Dosierformo:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Dosiero nomata \"% 1\" jam ekzistas. Ĉu vi certas, ke vi volas " #~ "anstataÅ­igi Äin?" #~ msgid "Overwrite File?" #~ msgstr "Ĉu AnstataÅ­igi Dosieron?" #~ msgid "Recent" #~ msgstr "Ä´usaĵoj" #~ msgid "Failed to create output" #~ msgstr "Malsukcesis kreo de eligo" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Malsukcesis kreo de eligo. Jen la eraro: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

La aplikaĵo " #~ "kolapsis

Pardonpeton pro la Äeno. Por helpi plibonigi la " #~ "aplikaĵon, bonvolu raporti la problemon al manisandro@gmail.com. Bonvolu priskribi tion, kion vi estis faranta antaÅ­ ol la kolapso. " #~ "Krome, inkluzivu la ĉi-subajn informojn. Dankon.

" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

Tesseract " #~ "kolapsis

Tesseract (la tekstlegila modulo) kolapsis dum " #~ "rekonado de teksto. Tio povas okazi se la trejnaj datenoj estas " #~ "koruptitaj aÅ­ ne kongruaj kun la versio de tesseract, aÅ­ pro cimo en " #~ "tesseract.

La jena stakspuro eble donas pliajn informojn pri la " #~ "kolapso.

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Ekzemple: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Plata teksto" #~ msgid "Multiple sources" #~ msgstr "Pluraj fontoj" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- PaÄo %1: malsukcesis bildigo de paÄo" #~ msgid "The following errors occurred:%1" #~ msgstr "La jenaj eraroj okazis: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Jen la forviÅotaj dosieroj:%1" gImageReader-3.4.0/po/es.po000066400000000000000000002551471417507262200154430ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Sandro Mani , 2014, 2015, 2016, 2017. # micrococo, 2018. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2021-12-19 17:37+0000\n" "Last-Translator: Toni Estévez \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.10\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Aplicación de OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Volver a detectar los idiomas" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gestionar los idiomas" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferencias" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Ayuda" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Acerca de" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Salir" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Lista blanca/negra de caracteres" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Excluir estos caracteres del reconocimiento (lista negra):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Escriba una cadena de caracteres…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Permitir solo el reconocimiento de estos caracteres (lista blanca):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Aceptar" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientación del panel de salida:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" "Solicitar la instalación de los diccionarios para autocorrección que falten" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Comprobar automáticamente nuevas versiones del programa" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Definiciones de idioma preconfiguradas:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Definiciones de idioma adicionales:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "El prefijo del archivo de datos de idioma de tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefijo" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Código de idioma ISO-639-1 seguido del código de país" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Código ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "El nombre del idioma" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nombre" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Cancelar" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Tipo de letra del panel de salida:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Predeterminado" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Ubicación de datos de idioma:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Ruta para definiciones de idioma:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Ruta para diccionarios:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Rutas del sistema" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Rutas de usuario" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" "Abrir automáticamente los documentos exportados con la aplicación " "predeterminada" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Regenerar traza inversa" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "La aplicación se cerró inesperadamente\n" "\n" "Disculpe las molestias. Para ayudar a mejorar la aplicación, considere " "informar sobre el problema en manisandro@gmail.com (en inglés). Trate " "de describir lo que estaba haciendo antes del fallo de la aplicación. " "Incluya también la información que aparece debajo. Gracias." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract se interrumpió\n" "\n" "Tesseract (el motor de OCR) se interrumpió mientras se reconocía el texto. " "Esto puede ocurrir si los datos de entrenamiento están dañados o son " "incompatibles con la versión utilizada de tesseract, o tal vez como " "resultado de un defecto en tesseract.\n" "\n" "Este seguimiento de pila puede brindar más información sobre la ubicación " "donde se produjo el fallo.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Exportación de lotes HOCR" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Aplicar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Cerrar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Seleccionar la carpeta de origen:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formato:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 #, fuzzy msgid "Group outputs of N lowest levels:" msgstr "Agrupar salidas al nivel:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Entrada:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Vista previa de la salida:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Archivos de entrada" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Opciones de exportación" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Mostrar/ocultar panel de salida" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Girar página actual" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Girar todas las páginas" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Orígenes" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Añadir imágenes" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Añadir imágenes" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Quitar imagen de la lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Eliminar imagen" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Borrar lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturas" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Archivos" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Dispositivo:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Actualizar" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Salida:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modo:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Color" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Escala de grises" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolución:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Escanear" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Origen:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Adquirir" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Brillo" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contraste" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolución" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Invertir los colores" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Acercar" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Alejar" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Tamaño normal" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ajustar" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Girar página" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Seleccionar el modo de giro" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Seleccionar el modo de inserción" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Seleccionar página" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controles de imagen" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Texto sin formato" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Detectar la disposición automáticamente" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Reconocer todo" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Seleccionar el idioma" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Exportación por lotes" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Interfaz gráfica para tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modo por lotes" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En el modo por lotes, cada fuente de entrada se procesa separadamente y " "la salida se guarda junto con el archivo de entrada." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Salida existente:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Anteponer números de página al texto de salida" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Detectar disposición de páginas automáticamente" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Intervalo de páginas" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervalo de páginas:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Ejemplo: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Ãrea de reconocimiento:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Página completa" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Detectar automáticamente" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Añadir antes del texto de salida:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nombre del archivo original" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Página del original" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protegido" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Página actual" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Varias páginas…" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modo por lotes…" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Añadir palabra" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Introducir palabra:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Agregar nueva salida después de la última página" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Insertar la nueva salida antes de la página actual" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportar a texto sin formato" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportar a PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportar a ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Agregar documento después de la última página" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Insertar documento antes de la página actual" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Abrir archivo hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Guardar la salida" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Limpiar la salida" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Buscar y sustituir" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Mostrar los valores de confianza" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Mostrar la vista previa" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Siguiente (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Anterior (Mayúsculas+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expandir todo" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Contraer todo" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Propiedades" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Origen" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Agregar al texto actual" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Insertar en la posición del cursor" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Sustituir el texto actual" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Mantener salto de renglón si..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Va precedido por un signo de fin de frase (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Va precedido o seguido por comillas" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Otras opciones" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Unir las palabras separadas por guion" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Contraer múltiples espacios en blanco a uno solo" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Preservar los párrafos" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Ayudas visuales" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Mostrar los espacios en blanco" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Abrir un archivo" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Quitar los saltos de renglón del texto seleccionado" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Deshacer" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Rehacer" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Pestaña nueva" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modo de salida:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF con capa de texto oculta" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compresión:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Calidad en la compresión:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "PPP:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritmo de difuminado:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Ajustes de imagen:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Igualar el espaciado de línea y palabra" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Cambiar la familia tipográfica:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Familia tipográfica alternativa:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Cambiar el tamaño de letra:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Tamaño de la tipografía:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Conservar los espacios mayores que:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "caracteres" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Reparar guiones antes de saltos de renglón" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Ajustes de texto:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Tamaño del papel:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Anchura" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altura" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Asumir que las fuentes de imágenes tienen PPP verdaderos:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Básico" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Versión de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Contraseña:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmar la contraseña:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Cifrado (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Título:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Asunto:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Creador:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Productor:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Palabras clave:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Información adicional (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importar del origen actual" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avanzado" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Buscar" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Sustituir" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Sustituir todo" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Buscar anterior" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Buscar siguiente" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Distinguir mayúsculas de minúsculas" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Sustituciones" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Eliminar" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Orden:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Reconocer" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Reconocer al portapapeles" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Guardar como imagen" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Abrir" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Guardar" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Limpiar" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Añadir" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Quitar" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gestor de Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gestionar idiomas instalados:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "digitalización.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Imágenes" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Escoja el nombre del archivo de salida…" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Fallo al iniciar el sistema de escaneo." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Fallo al escanear" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "No se ha detectado ningún escáner." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Comenzando escaneo..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Abriendo el dispositivo..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Ajustando las opciones..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Obteniendo los parámetros..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transfiriendo los datos..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Cancelando el escaneo..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefijo del nombre de archivo" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Código" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nombre nativo" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Sistema de escritura" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Gestor de fallos" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Su trabajo se ha guardado en %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "No hay trabajos sin guardar." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "No se pudo obtener el seguimiento regresivo. ¿Se ha instalado GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Fallo al cargar imagen" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Puede que el archivo no sea una imagen o esté dañado:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Página %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Imágenes PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Guardar imagen de la selección" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selección.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Reconocer todo" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Reconocer la selección" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Analizando la estructura" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Archivos temporales" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Seleccionar carpeta…" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Sin sugerencias" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Añadir al diccionario" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorar palabra" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Página" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloque de texto" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Párrafo" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Línea de texto" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Gráfico" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "La exportación ha fallado" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" "La exportación a ODT ha fallado: no se puede escribir el archivo de salida." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exportar a ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "La operación ha sido cancelada" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Fallo al representar la página %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exportando a PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "La exportación a PDF ha fallado: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "La biblioteca para PDF no puede cargar el tipo de letra «%1»." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monocromo" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Umbral (color más parecido)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difuso" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (sin pérdida)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grupo 4 (sin pérdida)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (con pérdida)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Igual que el original" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personalizado" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "La exportación a texto ha fallado: no se puede escribir el archivo de salida." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloque" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Línea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Palabra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Palabra mal escrita" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Mostrar los valores de confianza" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Las siguientes páginas no se han podido procesar:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Hubo errores durante el reconocimiento" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Varios valores" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Fusionar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Separar del elemento primario" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Intercambiar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Añadir zona gráfica" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Añadir un bloque de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Añadir párrafo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Añadir línea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Añadir una palabra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Archivos HTML de hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Abrir archivo hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "No se pudieron abrir los archivos siguientes:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Los archivos siguientes no contienen HTML de hOCR válido:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "No se puede abrir los archivos" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "salida" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Guardar salida hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Fallo al guardar salida" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" "Compruebe que tiene permiso de escritura en el directorio seleccionado." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documentos de texto OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Guardar salida ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Archivos PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Guardar salida PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Salida no válida" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "No se puede sobrescribir un archivo que sea una imagen original de este " "documento." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Archivos de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Guardar el texto de salida..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Salida no guardada" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "¿Quiere guardar antes de comenzar?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Sustituyendo..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Aplicando sustituciones..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Atajos de teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Renglones antes:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Renglones después:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabPostakampen
Maj+TabAntaÅ­akampen
SubPostalinien
SuprAntaÅ­alinien
Stir+SpacSugestoj pri literumado
Stir+EnigAldoni " "vorton en vortaron
Stir+BBaskuligi grasecon
Stir+IBaskuligi kursivecon
Stir+DDividi vorton ĉe kursoro
Stir+MKunigi kun " "antaÅ­a vorto
Stir+Maj+MKunigi kun posta vorto
Stir+ForigForigi vorton
Stir+{Dekstr,Maldekstr}AlÄustigi maldekstran randon de " "limiga kvarangulo
Stir+Maj+{Dekstr,Maldekstr}AlÄustigi dekstran randon de limiga kvarangulo
Stir+{Supr,Sub}AlÄustigi supran randon de limiga " "kvarangulo
Stir+Maj+{Supr,Sub}AlÄustigi malsupran " "randon de limiga kvarangulo
Stir++Pligrandigi " "tiparon
Stir+-Malpligrandigi tiparon
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "
TabCampo siguiente
Mayús+TabCampo anterior
AbajoRenglón siguiente
ArribaRenglón anterior
Ctrl+EspacioSugerencias de ortografía
Ctrl+IntroAñadir " "palabra a diccionario
Ctrl+BActivar o desactivar " "negrita
Ctrl+IActivar o desactivar itálica
Ctrl+DDividir palabra en la posición del cursor
Ctrl+MCombinar con la palabra anterior
Ctrl+Mayús+MCombinar con la palabra siguiente
Ctrl+SuprEliminar palabra
Ctrl+{Izquierda,Derecha}Ajustar borde superior de caja " "delimitadora
Ctrl+Mayús+{Izquierda,Derecha}Ajustar " "borde derecho de caja delimitadora
Ctrl+{Arriba,Abajo}Ajustar borde superior de caja delimitadora
Ctrl+Mayús+{Arriba,Abajo}Ajustar borde inferior de caja " "delimitadora
Ctrl++Aumentar tamaño de letra
Ctrl+-Reducir tamaño de letra
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confianza: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Utilizando tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Seleccione una imagen para comenzar..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Varios orígenes (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Listo" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nueva versión" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 está disponible" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Descargar" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Registro de cambios" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "No mostrar más avisos" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "No mostrar otra vez" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instalar" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Falta diccionario" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "El diccionario para %1 no está instalado" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instalando el diccionario para «%1»" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Error" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Fallo al instalar el diccionario: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Fallo al crear el directorio para los diccionarios." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "No se puede leer %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Descargando «%1»…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "No se han podido descargar los siguientes diccionarios:\n" "%1\n" "\n" "Compruebe la conexión y los permisos del directorio.\n" "Nota: si no tiene permiso de escritura en carpetas del sistema, puede " "cambiarla a rutas del usuario en el diálogo de configuración." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Diccionarios instalados" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Se han instalado los siguientes diccionarios:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "No se han encontrado diccionarios ortográficos para «%1»." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Página: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Cerrar el documento" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Pegado %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Salida no guardada" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "¿Quiere guardar antes de comenzar?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Quitando saltos de renglón…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 #, fuzzy msgid "Highlight mode" msgstr "Modo de resaltar la sintaxis:" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Comprobar ortografía" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 #, fuzzy msgid "%1 occurrences replaced" msgstr "Número de coincidencias reemplazadas: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Archivo: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Página: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Fallo al reconocer la página %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Seleccionar archivos" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Guardar salida…" #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Cerrar el documento" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "No hay ningún idioma disponible" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "No se han encontrado idiomas para tesseract. El reconocimiento no funcionará." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Plurilingüe" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentación automática de páginas" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" "Segmentación de página con detección de tipo de escritura y orientación" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Suponer una sola columna de texto" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Suponer un solo bloque de texto alineado verticalmente" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Suponer un solo bloque de texto uniforme" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Suponer una línea de texto" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Suponer una sola palabra" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Suponer una sola palabra en un círculo" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Texto disperso sin un orden en particular" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Texto disperso con detección de tipo de escritura y orientación" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modo de segmentación de página" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Lista blanca/negra de caracteres…" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gestionar idiomas..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Sobrescribir salida existente" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Omitir origen de procesamiento" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Selección actual" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Hubo errores durante el reconocimiento" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Fallo al iniciar tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Fuente ya reconocida" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Una o más fuentes seleccionadas ya han sido reconocidas. ¿Proceder de todos " "modos?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Reconociendo la página %1 (%2 de %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Página %1: fallo al representar la página" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Reconociendo..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: fallo al representar la página" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: la salida ya existe; se omite" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "-%1: fallo al guardar el archivo de salida" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Ocurrieron los siguientes errores:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Escaneo cancelado" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "No se ha indicado ningún escáner" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "No se puede conectar con el escáner" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "No se puede iniciar el escaneo" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Error al comunicarse con el escáner" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Fallo al guardar imagen" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "La operación se ha cancelado." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "El dispositivo está ocupado." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "La cubierta está abierta." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Alimentador de documentos atascado." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Alimentador de documentos vacío." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "No se puede acceder al escáner." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Introduzca la contraseña del archivo «%1»:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF con texto" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "El archivo PDF ya contiene texto:\n" "%1\n" "¿Quiere abrirlo de todos modos?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Imágenes y archivos PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Error del portapapeles" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Fallo al leer el portapapeles." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Pegado %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Error al captura la pantalla" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Fallo al tomar captura de pantalla." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Captura de pantalla %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Guardando imagen..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "No se puede escribir el archivo" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "No se puede escribir en %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "¿Quiere eliminar el archivo?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "¿Quiere eliminar los archivos siguientes?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Abrir salida" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Se encontraron tanto un texto como una salida hOCR. ¿Cuál quiere abrir?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Falta el archivo" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Se ha eliminado o desplazado el archivo siguiente:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Buscar" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Sustituir con" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista de sustituciones" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Abrir la lista de sustituciones" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Error al leer el archivo" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "No se puede leer «%1»." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Ocurrieron errores al leer el archivo" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Algunas entradas de la lista de sustituciones no se pueden leer." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Guardar la lista de sustituciones" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Error al guardar el archivo" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "No se puede escribir en «%1»." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "¿Quiere guardar la lista?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "¿Quiere guardar la lista actual?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Se necesita una conexión de sesión con el motor de PackageKit para gestionar " "los paquetes lingüísticos de Tesseract del sistema; no se encontró este " "motor. Normalmente encontrará este servicio en una aplicación de gestión de " "programas como GNOME Software. Instale los programas que proporcionen la " "interfaz de PackageKit necesaria, utilice otra herramienta de gestión de " "paquetes para manipular los paquetes lingüísticos directamente o cambie a la " "ruta de usuario de tessdata en el cuadro de diálogo Configuración." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Obteniendo los idiomas disponibles" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Fallo al obtener la lista de idiomas disponibles: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Analizando el error: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Aplicando cambios..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Fallo al crear directorio para los archivos tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Descargando %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Los archivos siguientes no pudieron descargarse o eliminarse:\n" "%1\n" "\n" "Compruebe la conexión y los permisos de directorio.\n" "\n" "Nota: si no tiene permiso de escritura en carpetas del sistema, puede " "cambiarla a rutas del usuario en el diálogo de configuración." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Sí" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Sí a todo" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "No" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "No a todo" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Descartar" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Descartar" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Texto" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Acerca de gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "<html><head/><body><p>&nbsp;</p><p>" "Una interfaz gráfica para tesseract-ocr</p><p><a href="" "https://github.com/manisandro/gImageReader/">Website</a></" "p><p>&nbsp;</p></body></html>" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Agradecimientos" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licencia" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En el modo por lotes, cada fuente de entrada se procesa separadamente y la " "salida se guarda junto con el archivo de entrada." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codificación del sistema" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codificación del archivo de texto:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

La aplicación ha " "fallado.

Disculpe las molestias. Para ayudar a mejorar la " "aplicación, considere informar sobre el problema en manisandro@gmail.com. Trate de describir lo que estaba haciendo antes del fallo de la " "aplicación. Incluya también la información que aparece debajo. Gracias.

" #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "Tesseract se interrumpió\n" "\n" "Tesseract (el motor de OCR) se interrumpió mientras se reconocía el texto. " "Esto puede ocurrir si los datos de entrenamiento están dañados o son " "incompatibles con la versión utilizada de tesseract, o tal vez como " "resultado de un defecto en tesseract.\n" "\n" "Este seguimiento de pila puede brindar más información sobre la ubicación " "donde se produjo el fallo.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Escáner plano" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF frontal" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF reverso" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF de doble cara" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Acercar" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Alejar" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Tamaño normal" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ajustar" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rotar a la izquierda" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rotar a la izquierda" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rotar a la derecha" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rotar a la derecha" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controles de imagen" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Autodetectar la disposición" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Mostrar/ocultar el panel de salida" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Exportar a PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Motor:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Vertical" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Horizontal" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Fallo al escribir al archivo" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: ofrece más opciones de compresión de " "imágenes, pero no maneja secuencias de órdenes complejas.
  • QPrinter: " "admite solo compresión JPEG para guardar imágenes, pero admite secuencias " "complejas.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Guardar como texto hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Buscar y reemplazar" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Mostrar la vista previa" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Se han instalado los diccionarios siguientes:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "No hay archivos recientes" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Eliminar archivos" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Los archivos siguientes no pudieron descargarse o eliminarse:\n" "%1\n" "\n" "Compruebe la conexión y los permisos de directorio.\n" "Nota: si no tiene permiso de escritura en carpetas del sistema, puede " "cambiarla a rutas del usuario en el diálogo de configuración." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Salida" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modo de OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Añadir carpeta" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Pegar" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Capturar pantalla" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Quitar imagen" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Eliminar imagen" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Borrar la lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Quitar los saltos de línea" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Guardar la salida" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Limpiar la salida" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #~ msgid "Form" #~ msgstr "Formato" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Número de coincidencias reemplazadas: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Ya existe un archivo llamado «%1». ¿Confirma que quiere sobrescribirlo?" #~ msgid "Overwrite File?" #~ msgstr "¿Quiere sobrescribir el archivo?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Hay %1 documentos con cambios sin guardar" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "¿Guardar los cambios antes de cerrar? Si no se guardan, todos los cambios " #~ "se perderán para siempre.\n" #~ "Seleccione los documentos que quiere guardar:" #~ msgid "New document %1" #~ msgstr "Documento nuevo %1" #~ msgid "Recent" #~ msgstr "Reciente" #~ msgid "Failed to create output" #~ msgstr "Fallo al guardar salida" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Error al crear la salida. El error devuelto es: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">La aplicación ha fallado</span></p><" #~ "p>Disculpas por las molestias. Para ayudar a mejorar la aplicación, " #~ "por favor, considere informar sobre el fallo a <a href="mailto:" #~ "manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Trate de describir lo que estaba haciendo " #~ "antes de que la aplicación fallara. También incluya la información de " #~ "debajo. Gracias.</p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Se ha interrumpido Tesseract</span></p>" #~ "<p>Tesseract (el motor de OCR) ha interrumpido el reconocimiento " #~ "del texto. Esto puede ocurrir si los datos usados están corruptos o son " #~ "incompatibles con la versión de tesseract en uso o a causa de un error en " #~ "tesseract.</p><p>El rastreo de la pila que se muestra a " #~ "continuación puede proporcionar información adicional sobre dónde se ha " #~ "producido el fall.</p></body></html>" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Ejemplo:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Texto sin formato" #~ msgid "Multiple sources" #~ msgstr "Múltiples orígenes" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "\tPágina %1: fallo al representar la página" #~ msgid "The following errors occurred:%1" #~ msgstr "Ocurrieron los siguientes errores: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Se eliminarán los archivos siguientes:%1" #~ msgid "Failed to open file" #~ msgstr "Error al abrir el fichero" #~ msgid "The file could not be opened: %1." #~ msgstr "No se puede abrir el fichero: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Fichero hOCR no válido" #~ msgid "The application has crashed" #~ msgstr "La aplicación ha fallado" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract ha fallado con el siguiente mensaje:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Esto normalmente ocurre por uno de los siguientes motivos:\n" #~ "- Se han usado ficheros traineddata desactualizados.\n" #~ "- No se encontraron ficheros auxiliares de idioma.\n" #~ "- Ficheros de idioma dañados.\n" #~ "\n" #~ "Asegúrese de que los ficheros de idioma son válidos y compatibles con " #~ "tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "No se puede leer %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #, fuzzy #~ msgid "90" #~ msgstr "0" #, fuzzy #~ msgid "300" #~ msgstr "200" #, fuzzy #~ msgid "100" #~ msgstr "200" #, fuzzy #~ msgid "10" #~ msgstr "0" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" #~ msgid "Document font:" #~ msgstr "Tipografía del documento:" #~ msgid "Scale:" #~ msgstr "Escala:" #~ msgid "Errors occurred" #~ msgstr "Se encontraron errores" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Las siguientes páginas no se pudieron generar:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "substitution_list.txt" #~ msgid "Detect script and orientation" #~ msgstr "Detectar sistema de escritura y dirección" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Se requiere PackageKit para gestionar los paquetes de idioma de " #~ "tesseract, pero no se encontró. Por favor, use el gestor de paquetes de " #~ "su sistema para gestionar los paquetes de idioma de tesseract" #~ msgid "System-wide" #~ msgstr "Rutas del sistema" #~ msgid "Image format:" #~ msgstr "Tipo de imagen" #~ msgid "Sistema" #~ msgstr "Todo el sistema" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tFallo al iniciar tesseract" #~ msgid "So&urces" #~ msgstr "&Orígenes" #~ msgid "&Output" #~ msgstr "&Salida" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "" #~ "Para reconocer zonas determinadas, dibuje un rectángulo sobre ellas." #~ msgid "Rendering image..." #~ msgstr "Dibujando imagen..." #~ msgid "en_US" #~ msgstr "es_ES" #~ msgid "So&urces" #~ msgstr "Orígenes" #~ msgid "&Output" #~ msgstr "Salida" #~ msgid "Configuration" #~ msgstr "Configuración" #~ msgid "Substitutions list" #~ msgstr "Lista de sustituciones" #~ msgid "Preceeded or succeeded by quote" #~ msgstr "Va precedido o le sigue una comilla" #~ msgid "Preceeded by dot" #~ msgstr "Va precedido por un punto" #~ msgid "0.0" #~ msgstr "0.0" #~ msgid "Pasting clipboard..." #~ msgstr "Pegando portapapeles..." #~ msgid "Taking screenshot..." #~ msgstr "Capturando pantalla..." #~ msgid "English (en_US)" #~ msgstr "Español (es_ES)" #~ msgid "Manage list" #~ msgstr "Gestionar lista" #~ msgid "Replacement list" #~ msgstr "Lista de reemplazao" #~ msgid "Select append mode" #~ msgstr "Seleccionar modo al agregar" #~ msgid "Options" #~ msgstr "Ajustes" gImageReader-3.4.0/po/eu.po000066400000000000000000002020051417507262200154260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2019-06-18 19:05+0000\n" "Last-Translator: beriain \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.7\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR aplikazioa" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Hizkuntzak berriz antzeman" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Hizkuntzak kudeatu" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Hobespenak" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Laguntza" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Honi buruz" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Irten" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Ados" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Irteera panelaren orientazioa:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontala" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Bertikala" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Galdetu falta diren ortografia zuzentzaile hiztegiak instalatzeko" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatikoki programaren bertsio berririk dagoen egiaztatu" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Aurrizkia" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Hizkuntzaren ISO 639-1 kodea eta jarraian herrialdearen kodea" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO kodea" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Hizkuntzaren izena" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Izena" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Utzi" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Irteera panelaren letra mota:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Lehenetsia" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Hizkuntza datuen kokapena:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Ortografia zuzentzaile hiztegien kokalekua:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" "Esportatutako dokumentuak lehenetsitako aplikazioarekin ireki automatikoki" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Sartze modua hautatu" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Irteera:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Irteera:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Jatorriaren fitxategi izena" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Beste aukera batzuk" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Irteera panela txandakatu" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Oraingo orria biratu" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Orri guztiak biratu" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Irudiak gehitu" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Irudiak gehitu" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Irudia zerrendatik kendu" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Irudia ezabatu" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Zerrenda garbitu" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Fitxategiak" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Gailua:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Freskatu" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Irteera:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modua:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Kolorea" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Gris eskala" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Bereizmena:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Eskaneatu" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Iturria:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Eskuratu" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Distira" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrastea" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Bereizmena" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Koloreak alderantzikatu" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Gerturatu zooma" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Urrundu zooma" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Neurri normala" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Egokitzapen onena" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 #, fuzzy msgid "Rotate page" msgstr "Orri guztiak biratu" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Biratze modua hautatu" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Sartze modua hautatu" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 #, fuzzy msgid "Select page" msgstr "Hizkuntza hautatu" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Irudi kontrolak" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Testu laua" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 #, fuzzy msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Antolaketa automatikoki antzeman" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Dena ikuskatu" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Hizkuntza hautatu" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Esportatu" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocrentzako frontend grafiko bat" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "Antolaketa automatikoki antzeman" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Orrialde tartea" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Orrialde tartea:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Adibidez: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Ikuskatze eremua:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Orrialde osoa" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatikoki antzeman" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Jatorriaren fitxategi izena" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Babestutako PDFa" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Oraingo orrialdea" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Hainbat orrialde..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Hitza gehitu" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Hitza sartu:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "Oraingo orria biratu" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Testu arrunt bezala esportatu" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "PDFra esportatu" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ODTra esportatu" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Esportatu" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Bilatu eta ordezkatu" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Aurrebista erakutsi" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Hurrengoa (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Aurrekoa (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Beste aukera batzuk" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "Testu laua" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "Irteera:" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCR, PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Aurrebista erakutsi" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "Jatorriaren fitxategi izena" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "Irudia ezabatu" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "Hitza gehitu" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Itsasi" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Pantailaren argazkia egin" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "Recent" #~ msgstr "Azkenak" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Adibidez: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Testu laua" #~ msgid "The application has crashed" #~ msgstr "Aplikazioa gelditu egin da" gImageReader-3.4.0/po/fa.po000066400000000000000000001751461417507262200154220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/fr.po000066400000000000000000002525231417507262200154360ustar00rootroot00000000000000# French translations for gImageReader package # Traductions françaises du paquet gImageReader. # Copyright (C) 2010-2016 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Sandro Mani , 2010-2011, 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:15+0100\n" "PO-Revision-Date: 2021-11-03 18:26+0000\n" "Last-Translator: The Cats \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.9-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Application OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Redétecter langues" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gérer les langues" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Préférences" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Aide" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "À propos" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Quitter" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Liste blanche / noire des caractères" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Exclure ces caractères de la reconnaissance (blacklist) :" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Entrez une chaîne de caractères…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Seuls les caractères suivants peuvent être reconnus (whitelist) :" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientation de la zone de reconnaissance :" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Proposer d'installer les dictionnaires manquants" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Vérifier si une nouvelle version est disponible" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Définitions par défaut des langues :" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Définitions de langues supplémentaires :" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Le préfixe du fichier de langue tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Préfixe" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Le code de langue ISO 639-1 suivi par le code du pays" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Code ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Le nom de la langue" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nom" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Annuler" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Police utilisée dans le panneau de reconnaissance :" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Prédéfini" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Positions de données de langue :" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Chemin du définitions des langues :" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Chemin du dictionnaires :" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Système" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Utilisateur" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" "Ouvrir automatiquement les documents exportés avec l'application par défaut" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Régénérer backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "L'application a cessé de fonctionner\n" "\n" "Désolé pour le désagrément. Pour aider à améliorer l'application, s'il vous " "plait, signalez le problème à manisandro@gmail.com . Essayez de " "décrire ce que vous faisiez avant le problème. Inclure aussi les " "informations ci-dessous. Merci." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract a avorté\n" "\n" "Tesseract (le moteur d'OCR) a avorté pendant la reconnaissance de texte. " "Cela peut se produire si les données traineddata utilisées sont corrompues " "ou incompatibles avec la version de tesseract utilisée, ou en raison d'un " "bug dans tesseract.\n" "\n" "Le stacktrace ci-dessous peut fournir des informations supplémentaires sur " "l'endroit où le crash s'est produit.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Appliquer" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Fermer" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Choisir le dossier…" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format :" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Reconnaissance :" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Mode de sortie :" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Aucun fichier récent" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Autres options" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Montrer / cacher le panneau de reconnaissance" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Pivoter page courante" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Pivoter toutes les pages" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Sources" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Ajouter des images" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Ajouter des images" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Supprimer l'image de la liste" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Supprimer image" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Vider liste" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniatures" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Fichiers" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Périphérique :" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Actualiser" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Reconnaissance :" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Mode :" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Couleur" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Niveaux de gris" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Résolution :" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Scanner" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Source :" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Acquérir" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Luminosité" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contraste" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Résolution" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Invertir couleurs" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Zoom avant" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Zoom arrière" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Taille normale" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ajuster à la page" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Pivoter la page" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Mode de rotation" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Sélectionner mode d'insertion" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Sélectionner page" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Régler les paramètres de l'image" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Texte" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Détecter la mise en page" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Tout reconnaître" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Sélectionner langue" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Exporter" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Une interface graphique pour tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Mode par lots" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En mode de traitement par lots, chaque source d'entrée est traitée " "séparément et la sortie enregistrée côte à côte dans le fichier d'entrée." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Sortie existante :" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Ajouter des numéros de page avant le texte de sortie" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Détection automatique de la mise en page" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Pages" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervalle de pages :" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Par exemple: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Zone de reconnaissance :" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Page complète" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Détecter automatiquement" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Ajouter reconnaissance :" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nom de fichier d'origine" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Page d'origine" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protégé" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Page courante" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Plusieurs pages..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Mode de traitement par lots…" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Ajouter un mot" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Entrer le mot :" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Ajouter une nouvelle sortie après la dernière page" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Insérer une nouvelle sortie avant la page actuelle" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exporter au format texte" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exporter au format PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exporter au format ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Ajouter un document après la dernière page" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Insérer un document avant la page actuelle" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Ouvrir fichier hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Enregistrer la reconnaissance" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exporter" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Supprimer la reconnaissance" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Trouver et remplacer" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Montrer les valeurs de confiance" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Montrer aperçu" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Suivant (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Précédent (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Déplier" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Replier" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Propriétés" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Sources" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Ajouter au texte existant" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Insérer au curseur" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Remplacer le texte existant" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Conserver les sauts de ligne si..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "...ils sont précédés par une marque de fin (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "...ils sont précédés ou suivis par un guillemet" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Autres options" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Lier les mots composés" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Réduire les espaces" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Préserver paragraphes" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Aides visuelles" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Dessiner les espaces" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Ouvrir fichier hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Supprimer sauts de ligne dans le texte sélectionné" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Annuler" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refaire" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Mode de sortie :" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF avec invisible superposition de texte" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compression :" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualité de compression :" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI :" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algorithme de tramage :" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Paramètres d'image :" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Homogénéiser interligne" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Remplacer la police :" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Police de remplacement :" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Écraser les tailles de police détectés :" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Échelle de police :" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Préserver les espaces plus larges que :" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "caractères" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Corriger les traits d'union avant les sauts de ligne" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Paramètres de texte :" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Taille du papier :" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Largeur" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Hauteur" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Traiter les sources d'images comme ayant un DPI :" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Basique" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Version PDF :" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Mot de passe :" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmer le mot de passe :" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Chiffrement (facultatif) :" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Auteur :" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titre :" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Sujet :" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Créateur :" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Producteur :" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Mots-clés :" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Informations supplémentaires (facultatif) :" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importer à partir de la source actuelle" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avancé" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Trouver" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Remplacer" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Remplacer tous" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Trouver précédente" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Trouver suivante" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Sensible aux majuscules et minuscules" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Substitutions" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Supprimer" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordre :" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Reconnaître" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Reconnaître et coller dans le passe-papiers" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Enregistrer image" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Ouvrir" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Enregistrer" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Vider" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Ajouter" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Supprimer" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gestionnaire tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gérer les langues installées :" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Images" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Choisir un nom pour le fichier de reconnaissance..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Impossible d'initialiser le scanner." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Erreur de scanner" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Aucun scanner n'a été détecté." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Démarrer le scan..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Ouverture du dispositif..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Régler les options..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Obtention des paramètres…" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transfert de données..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Annulation de scan..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Préfixe nom fichier" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Code" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nom natif" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Script" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Gestionnaire de crash" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Votre travail a été enregistré sous %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Il n'y avait pas de travail non enregistré." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Impossible d'obtenir le backtrace. GDB est-il installé ?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Échec à l'ouverture de l'image" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Le fichier pourrait ne pas être une image ou être corrompu:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Page %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Images PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Enregistrer sélection" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Reconnaître tout" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Reconnaître la sélection" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Exécution l'analyse de mise en page" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Choisir le dossier…" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Pas de suggestions" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Ajouter au dictionnaire" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorer mot" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Page" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloc de texte" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragraphe" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Ligne de texte" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Graphique" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Exportation a échoué" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "L'export ODT a échoué : impossible d'écrire le fichier de sortie." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exporter au format ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "L'opération a été annulée" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Impossible de rendre la page %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exporter au format PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "L'exportation PDF a échoué : %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "La bibliothèque PDF ne supporte pas la police sélectionnée '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monochrome" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Seuil (couleur la plus proche)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffus" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (sans perte)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (sans perte)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (perte)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Identique à la source" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personnalisé" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "dans" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "L'exportation de texte a échoué: impossible d'écrire le fichier de sortie." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloc" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Ligne" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Mot" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Mot mal orthographié" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Montrer les valeurs de confiance" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Les pages suivants n'ont pas pu être processées:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Erreurs de reconnaissance" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Plusieurs valeurs" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Fusionner" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Séparé du parent" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Échanger" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Ajouter région graphique" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Ajouter un bloc de texte" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Ajouter un paragraphe" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Ajouter une ligne" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Ajouter un mot" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Fichiers HTML hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Ouvrir fichier hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Les fichiers suivants n'ont pas pu être ouvert :\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Le fichier ne semble pas contenir de code HTML hOCR valide :\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Impossible d'ouvrir les fichiers" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "Reconnaissance" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Enregistrer output hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Échec de l'enregistrement de la reconnaissance" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" "Vérifiez que vous avez l'autorisation d'écriture dans le dossier sélectionné." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documents de texte OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Enregistrer output ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Fichiers PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Enregistrer output PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Fichier export invalide" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Impossible d'écraser un fichier qui est une image source de ce document." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Fichiers texte" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Enregistrer la sortie de texte..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Reconnaissance non enregistrée" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Enregistrer la reconnaissance avant de continuer ?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Remplacement en cours..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Application les substitutions..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Lignes avant :" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Lignes après :" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "[X18 3X]Ctrl+Espace
TabChamp suivant
Maj+TabChamp précédent
DownLigne suivante
UpLigne précédente
Suggestions d’orthographe
Ctrl+EntréeAjouter un mot au dictionnaire
Ctrl+BGras
Ctrl+IItalique
Ctrl+DDiviser le mot à la position du curseur
Ctrl+MFusionner avec le mot précédent
Ctrl+Maj+MFusionner avec le mot suivant
Ctrl+SupprSupprimer le mot
Ctrl+{Gauche,Droite}Ajuster le bord du cadre de sélection gauche
Ctrl+Maj+{Gauche, Droite}Ajuster le bord du cadre de " "sélection droit
Ctrl+{Haut,Bas}Ajuster le bord du " "cadre de sélection supérieur
Ctrl+Maj+{Haut,Bas}Ajuster le bord du cadre de sélection inférieur
Ctrl+" "+Augmenter la taille de la police
Ctrl+-Diminuer la taille de la police
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confiance : %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Compilé avec tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Ouvrir une image pour commencer..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Plusieurs sources (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Prêt" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nouvelle version" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 est disponible" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Télécharger" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Nouvelles" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ne plus demander" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ne plus demander" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installer" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Dictionnaire manquant" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" "Le dictionnaire de vérification orthographique pour '%1' n'est pas installé" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Installation de dictionnaire de vérification orthographique pour '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Erreur" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" "Impossible d'installer le dictionnaire de vérification orthographique: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" "Impossible de créer le répertoire pour les dictionnaires d'orthographe." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Impossible lire %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Téléchargement de '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Les fichiers suivants ne peuvent pas être téléchargés ou supprimés:\n" "%1\n" "\n" "Vérifiez la connexion et les autorisations de dossier.\n" "\n" "Remarque: Si vous n'avez pas les droits d'écriture dans les dossiers " "système, vous pouvez passer aux chemins du utilisateur dans le dialogue des " "préférences." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dictionnaires orthographiques installés" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Les dictionnaires suivants ont été installés:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Pas de dictionnaires orthographiques trouvés pour '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Page : %1\n" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "Document" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Collée %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Reconnaissance non enregistrée" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Enregistrer la reconnaissance avant de continuer ?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Suppression des sauts de ligne…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Vérifier l'orthographe" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Fichier: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Page: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Echec de reconnaissance page %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Choisir fichiers" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Enregistrer la reconnaissance..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Document" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Aucune langue disponible" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Aucun fichier langue n'étant disponible pour Tesseract, la reconnaissance ne " "fonctionnera pas." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Multilingue" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentation automatique des pages" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentation des pages avec détection de orientation et de script" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Supposer une seule colonne de texte" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Supposer un seul bloc de texte aligné verticalement" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Supposer un seul bloc de texte uniforme" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Supposer une ligne de texte" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Supposer un seul mot" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Supposer un seul mot dans un cercle" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Texte distribué sans ordre particulier" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Texte distribué avec détection de orientation et de script" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Mode de segmentation des pages" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Whitelist / blacklist des caractères..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gérer langues..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Écraser la sortie existante" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Ignorer la source de traitement" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Sélection courante" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Des erreurs de reconnaissances sont apparues" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Échec de démarrage de tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Reconnaissance page %1 (%2 de %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Page %1 : erreur de rendu" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Reconnaissance en cours..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Page %1 : erreur de rendu" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "-% 1 : la sortie existe déjà, source ignorée" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1 : échec de la création de sortie" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Les erreurs suivantes sont survenues :" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Scan annulé" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Aucun scanner spécifié" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Impossible de se connecter au scanner" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Impossible de commencer le scan" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Impossible de communiquer avec le scanner" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Impossible d'enregistrer l'image" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "L'opération est annulée." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "L'appareil est occupé." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Le capot est ouvert." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Le chargeur de documents est bloqué." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Il n'y a plus de documents dans le chargeur de documents." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "L'accès au scanner est refusé." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Entrer le mot de passe pour le fichier « %1 » :" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF avec texte" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Ces fichiers PDF contiennent déjà du texte :\n" "%1\n" "L'ouvrir quand même ?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Images et PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Erreur de presse-papiers" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Impossible de lire le presse-papiers." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Collée %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Échec de la capture d'écran" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Échec de la capture d'écran." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Capture d'écran %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Enregistrement de l'image..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Impossible écrire fichier" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Impossible écrire à %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Supprimer fichier ?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Supprimer les fichiers suivants ?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Ouvrir le résultat" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Un texte et une sortie hOCR ont été trouvés. Lequel voulez-vous ouvrir ?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Fichier manquant" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Le fichier suivant a été supprimé ou déplacé:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Rechercher" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Remplacer par" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Liste substitutions" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Ouvrir liste de substitutions" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Impossible lire le fichier" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Impossible de lire '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Des erreurs sont survenues" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" "Certaines entrées de la liste des substitutions ne peuvent pas être lues." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Enregistrer liste de substitutions" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Impossible d'enregistrer le fichier" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Impossible d'enregistrer '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Enregistrer la liste ?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Voulez-vous enregistrer la liste actuelle ?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Une connexion de session au backend PackageKit est nécessaire pour gérer les " "packs linguistiques tesseract à l'échelle du système, mais elle n'a pas été " "trouvée. Ce service est généralement fourni par une application de gestion " "de logiciels telle que Gnome Software. Veuillez installer un logiciel qui " "fournit l'interface PackageKit nécessaire, utiliser un autre logiciel de " "gestion des paquets système pour gérer directement les paquets de langue " "tesseract, ou passer à l'utilisation du chemin d'accès aux données d'essai " "de l'utilisateur dans la boîte de dialogue de configuration." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Téléchargement de la liste des langues disponibles" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Impossible de télécharger la liste des langues disponibles: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Erreur syntaxique: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Application des modifications..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Impossible de créer le répertoire pour les fichiers tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Téléchargement de %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Les fichiers suivants ne peuvent pas être téléchargés ou supprimés:\n" "%1\n" "\n" "Vérifiez la connexion et les autorisations de dossier.\n" "\n" "Remarque: Si vous n'avez pas les droits d'écriture dans les dossiers " "système, vous pouvez passer aux chemins du utilisateur dans le dialogue des " "préférences." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Oui" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Oui à tout" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Non" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Non à tout" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Jeter" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Jeter" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Texte" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "À propos de gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Une interface graphique pour tesseract-" "ocr

Website

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Crédits" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licence" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "En mode de traitement par lots, chaque source d'entrée est traitée " "séparément et la sortie enregistrée côte à côte dans le fichier d'entrée." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codage du système" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Encodage du fichier texte :" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

L'application a " "cessé de fonctionner

Désolé pour le désagrément. Pour aider à " "améliorer l'application, s'il vous plait signalez le problème à " "manisandro@gmail.com . Essayez de décrire ce que vous faisiez avant le " "problème. Inclure aussi les informations ci-dessous. Merci.

" #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "Tesseract a avorté\n" "\n" "Tesseract (le moteur d'OCR) a avorté pendant la reconnaissance de texte. " "Cela peut se produire si les données traineddata utilisées sont corrompues " "ou incompatibles avec la version de tesseract utilisée, ou en raison d'un " "bug dans tesseract.\n" "\n" "Le stacktrace ci-dessous peut fournir des informations supplémentaires sur " "l'endroit où le crash s'est produit.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Scanner à plat" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF face avant" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF partie arrière" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF duplex" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Zoom Avant" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Zoom Arrière" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Taille Normale" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ajuster à la page" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Tourner à dans le sens anti-horaire" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Tourner à dans le sens anti-horaire" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Tourner dans le sens horaire" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Tourner dans le sens horaire" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Régler les paramètres de l'image" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Détecter la mise en page" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Montrer / cacher le panneau de reconnaissance" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Exportation PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Arrière-plan :" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Portrait" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Paysage" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Impossible écrire le fichier" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo : offre plus d'options de compression " "d'image mais ne gère pas les scripts complexes.
  • QPrinter : prend " "uniquement en charge la compression JPEG pour le stockage d'images mais " "prend en charge scripts complexes.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Enregistrer sous forme de texte hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Trouver et remplacer" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Montrer aperçu" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Les dictionnaires suivants ont été installés:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Aucun fichier récent" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Supprimer les fichiers" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Les fichiers suivants ne peuvent pas être téléchargés ou supprimés :\n" "%1\n" "\n" "Vérifiez la connexion et les autorisations de dossier.\n" "Note : si vous n'avez pas les droits d'écriture dans les dossiers système, " "vous pouvez passer aux chemins d'accès utilisateur dans la boîte de dialogue " "des paramètres." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Reconnaissance" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Mode OCR :" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Ajouter un dossier" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Coller" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Capture d'écran" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Supprimer l'image de la liste" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Supprimer image" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Vider liste" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Supprimer sauts de ligne" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Enregistrer la reconnaissance" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Supprimer la reconnaissance" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Format :" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Un fichier nommé \"% 1\" existe déjà. Êtes-vous sûr de vouloir le " #~ "remplacer ?" #~ msgid "Overwrite File?" #~ msgstr "Remplacer fichier ?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Document" #~ msgid "Recent" #~ msgstr "Fichiers Récents" #~ msgid "Failed to create output" #~ msgstr "Échec de la création de sortie" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Échec de la création de sortie. L'erreur retournée était : %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">L'application a cessé de fonctionner</span> " #~ "</p><p>Désolé pour le désagrément. Pour aider à améliorer " #~ "l'application, s'il vous plait signalez le problème à <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Essayez de décrire ce que vous faisiez " #~ "avant le problème. Inclure aussi les informations ci-dessous. Merci.</" #~ "p></body></html> " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

Tesseract a " #~ "avorté

Tesseract (le moteur d'OCR) a avorté pendant la " #~ "reconnaissance de texte. Cela peut se produire si les données traineddata " #~ "utilisées sont corrompues ou incompatibles avec la version de tesseract " #~ "utilisée, ou en raison d'un bug dans tesseract.

Le stacktrace ci-" #~ "dessous peut fournir des informations supplémentaires sur l'endroit où le " #~ "crash s'est produit.

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Par exemple: 1-10, 13, 14-18" #~ msgid "Multiple sources" #~ msgstr "Plusieurs sources" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Page %1: erreur de rendering" #~ msgid "The following errors occurred:%1" #~ msgstr "Les erreurs suivantes sont survenues:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Les fichiers suivant seront supprimés:%1" #~ msgid "Failed to open file" #~ msgstr "Impossible ouvrir le fichier" #~ msgid "The file could not be opened: %1." #~ msgstr "Le fichier n'a pas pu être ouvert: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Fichier hOCR invalide" #~ msgid "The application has crashed" #~ msgstr "L'application a cessé de fonctionner" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract écrasé avec le message suivant: \n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Cela se produit généralement pour une des raisons suivantes:\n" #~ "- Des fichiers traineddata obsolètes sont utilisés.\n" #~ "- Les fichiers de données linguistiques auxiliaires manquent.\n" #~ "- Des fichiers de données linguistiques sont corrompus.\n" #~ "\n" #~ "Assurez-vous que vos fichiers de données linguistiques sont valides et " #~ "compatibles avec tesseract2%." #~ msgid "Could not read %1: %2" #~ msgstr "Impossible lire %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Police:" #~ msgid "Scale:" #~ msgstr "Echelle:" #~ msgid "Errors occurred" #~ msgstr "Des erreurs sont apparues" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Les pages suivantes n'ont pas pu être lues:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "liste_substitutions.txt" #~ msgid "Detect script and orientation" #~ msgstr "Détecter script et orientation" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "PackageKit est nécessaire pour gérer les packs linguistiques de " #~ "tesseract, mais il n'a pas été trouvé. S'il vous plaît utilisez " #~ "l'application de gestion des paquets du système pour gérer les packs " #~ "linguistiques tesseract." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tImpossible d'initialiser tesseract" #~ msgid "So&urces" #~ msgstr "Sources" #~ msgid "&Output" #~ msgstr "Reconnaissance" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "" #~ "Pour reconnaître des régions spécifiques, tracer des rectangles par " #~ "glisser-déplacer." #~ msgid "Rendering image..." #~ msgstr "Restitution de l'image..." #~ msgid "en_US" #~ msgstr "fr_FR" #, fuzzy #~ msgid "So&urces" #~ msgstr "Sources" #, fuzzy #~ msgid "&Output" #~ msgstr "reconnaissance" #~ msgid "Configuration" #~ msgstr "Configuration" gImageReader-3.4.0/po/gimagereader.pot000066400000000000000000001752011417507262200176240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/gu.po000066400000000000000000001751461417507262200154470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: gu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/he.po000066400000000000000000002513071417507262200154220ustar00rootroot00000000000000# Hebrew translation of gImageReader. # Copyright (C) 2021 # This file is distributed under the same license as the PACKAGE package. # Binyamin Pekar , 2021. # Zeev , 2021. # msgid "" msgstr "" "Project-Id-Version: gImageReader 3.3.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-18 02:54+0000\n" "Last-Translator: aharon don \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "×פליקציית זיהוי ×ª×•×•×™× ×ופטי" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "×תר שפות מחדש" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "נהל שפות" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "העדפות" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "עזרה" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "×ודות" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "יצי××”" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "תווי רשימה לבנה / שחורה" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "×ל תכלול זיהוי של ×ª×•×•×™× ×לה (רשימה שחורה):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "הזן מחרוזת תווי×..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "×פשר לזהות רק ×ת ×”×ª×•×•×™× ×”×‘××™× (רשימת היתרי×):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "×ישור" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "כיוון חלונית הפלט:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "×ופקי" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "×× ×›×™" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "חפש מילוני ×יות ×—×¡×¨×™× ×œ×”×ª×§× ×”" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "בדוק ×וטומטית ×× ×§×™×™×ž×•×ª גרס×ות תוכנה חדשות" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "הגדרות שפה מוגדרות מר×ש:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "הגדרות שפה נוספות:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "הקידומת של קובץ נתוני השפה של tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "קידומת" # Notes: # Add Note #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "הקוד של שפת ×”- ISO 639-1 ו×חריו קוד המדינה" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "קוד ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "×©× ×”×©×¤×”" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "ש×" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "ביטול" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "הגופן של חלונית הפלט:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "ברירת מחדל" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "נתוני מיקומי שפה:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "נתיב הגדרות שפה:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "נתיב מילוני ×יות:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "× ×ª×™×‘×™× ×œ×›×œ×œ המערכת" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "נתיבי משתמש" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "פתח ×וטומטית ×ž×¡×ž×›×™× ×”×ž×™×•×¦××™× ×‘×מצעות ×™×™×©×•× ×‘×¨×™×¨×ª מחדל" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "יצירת backtrace מחדש" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "×”×™×™×©×•× ×§×¨×¡\n" "\n" "×נו ×ž×¦×˜×¢×¨×™× ×¢×œ ××™ הנוחות. כדי לעזור בשיפור ×”×פליקציה, ×× × ×©×§×•×œ לדווח על " "הבעיה ל- manisandro@gmail.com. נסה לת×ר מה עשית " "לפני שה×פליקציה קרסה. כמו כן, כלול ×ת המידע להלן. תודה." # Notes: # Add Note #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "פעולת ×”- Tesseract הופסקה\n" "\n" "פעולה ×”- Tesseract (מנוע ×”- OCR) הופסקה בתהליך זיהוי הטקסט. הדבר עלול להתרחש " "×× ×§×‘×¦×™ ×”×ª×¨×’×•× ×¤×’×•×ž×™× ×ו ש××™× × ×ª×•×× ×¢× ×’×™×¨×¡×ª ×”- tesseract שבשימוש, ×ו בגלל " "שגי××” ב- tesseract.\n" "\n" "דוח ×¨×™×©×•× ×•×ž×¢×§×‘ ×”×ª×”×œ×™×›×™× ×©×œ×ž×˜×” עשוי לספק מידע ×ודות ×’×•×¨× ×”×§×¨×™×¡×”.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "×™×™×¦×•× HOCR מרובה" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "החל" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "סגור" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "בחר תיקיית מקור:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "תבנית:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "קבץ קבצי הפלט ברמות הנמוכות מ:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "קלט:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "תצוגה מקדימה של הפלט:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "קבצי קלט" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "×פשרויות ייצו×" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "מתג חלונית פלט" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "סובב ×ת העמוד הנוכחי" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "סובב ×ת כל העמודי×" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "מקורות" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "הוסף תמונות" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "הוסף תמונות" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "הסר תמונה מהרשימה" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "מחק תמונה" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "× ×§×” רשימה" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "תמונות ממוזערות" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "קבצי×" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "התקן:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "רענן" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "פלט:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "מצב:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "צבע" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "גווני ×פור" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "רזולוציה:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "סריקה" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "מקור:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "סריקה" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "בהירות" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "ניגודיות" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "רזולוציה" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "הפוך צבעי×" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "התקרבות" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "התרחקות" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "גודל רגיל" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "ההת×מה הטובה ביותר" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "סובב עמוד" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "בחר מצב סיבוב" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "בחר מצב הוספה" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "בחר עמוד" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "בקרות תמונה" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "טקסט פשוט" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "זיהוי פריסה ×וטומטי" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "זיהוי הכל" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "בחר שפה" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "×™×™×¦× ×ž×¨×•×‘×”" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "ממשק גרפי ל- tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "מצב קבוצה" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "במצב ×צווה, כל מקור קלט מעובד בנפרד, והפלט נשמר ×–×” לצד ×–×” בקובץ הקלט." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "פלט ×§×™×™×:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "הכן מספרי ×¢×ž×•×“×™× ×œ×”×¤×§×ª הטקסט" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "זיהוי פריסת עמוד ×וטומטית" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "טווח עמודי×" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "טווח עמודי×:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "דוגמ×: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "×זור זיהוי:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "עמוד של×" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "זיהוי ×וטומטי" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "הדבק לפני טקסט הפלט:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "×©× ×§×•×‘×¥ המקור" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "דף המקור" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "מסמך PDF מוגן" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "העמוד הנוכחי" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "×“×¤×™× ×ž×¨×•×‘×™×..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "מצב ×צווה..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "הוסף מילה" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "הזן מילה:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "צרף פלט חדש לפני העמוד ×”×חרון" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "הוסף פלט חדש לפני העמוד הנוכחי" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "×™×™×¦× ×œ×˜×§×¡×˜ פשוט" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "×™×™×¦× ×œ×ž×¡×ž×š PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "×™×™×¦× ×œ×ž×¡×ž×š ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "צרף מסמך לעמוד ×”×חרון" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "צרף מסמך לפני העמוד הנוכחי" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "פתח קובץ hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "שמור פלט" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "ייצ×" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "× ×§×” פלט" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "חיפוש והחלפה" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "הצג ערכי ×מינות" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "תצוגה מקדימה" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "×”×‘× (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "×”×§×•×“× (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "הרחב הכל" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "כווץ הכל" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "מ×פייני×" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "מקור" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "צרף לטקסט הנוכחי" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "הכנס בסמן" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "החלף ×ת הטקסט הנוכחי" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "שמור על שבירת שורות ××..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "×”×•×§×“× ×¢×œ ידי סימון סוף (!?.)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "מירכ×ות לפני ×ו ×חרי" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "×פשרויות ×חרות" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "צרף ×ž×™×œ×™× ×ž×ž×•×§×¤×•×ª" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "×¦×ž×¦× ×¨×•×•×—×™×" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "שמור על פסק×ות" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "×¢×–×¨×™× ×•×™×–×•×ליי×" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "צייר רווח" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "פתח קובץ" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "הסר מעברי שורות מהטקסט הנבחר" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "בטל" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "בצע שוב" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "כרטיסייה חדשה" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "מצב פלט:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF ×¢× ×©×›×‘×” של טקסט בלתי נר××”" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "דחיסה:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "×יכות דחיסה:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "××œ×’×•×¨×™×ª× ×œ×ž×™×–×•×’ צבעי×:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "הגדרות תמונה:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "ל×חד ×ת רווחי השורות והמילי×" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "דרוס גופן משפחתי:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "משפחת ×’×•×¤× ×™× ×—×œ×•×¤×™×ª:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "×”×ª×¢×œ× ×ž×’×•×“×œ הגופן:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "×§× ×” מידה של גופני×:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "שמור על ×¨×•×•×—×™× ×¨×—×‘×™× ×ž:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "תווי×" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "× ×§×” ×ž×§×¤×™× ×œ×¤× ×™ מעבר שורה" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "הגדרות טקסט:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "גודל דף:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "רוחב" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "גובה" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "התייחס למקורות התמונה ×›×ל בעלי DPI ×מיתי:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "בסיסי" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "גרסת PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "סיסמ×:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "×שר סיסמ×:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "הצפנה (×œ× ×—×•×‘×”):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "מחבר:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "כותרת:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "נוש×:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "יוצר:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "מפיק:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "מילות מפתח:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "מידע נוסף (×œ× ×—×•×‘×”):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "×™×™×‘× ×ž×ž×§×•×¨ נוכחי" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "מתקד×" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "חיפוש" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "החלף" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "החלף הכל" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "חפש ×ת הקוד×" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "חפש ×ת הב×" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "מקרה הת×מה" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "החלפות" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "מחק" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "סדר:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "זיהוי" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "העתק זיהוי ללוח" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "שמור כתמונה" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "פתח" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "שמור" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "× ×§×”" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "הוסף" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "הסר" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "מנהל Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "נהל שפות מותקנות:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "תמונות" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "בחר ×©× ×§×•×‘×¥ פלט..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "×תחול של backend סריקה נכשל." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "הסריקה נכשלה" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "×œ× ×ותרו סורקי×." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "מתחיל סריקה..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "פותח התקן..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "מגדיר ×פשרויות..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "מקבל פרמטרי×..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "מעביר נתוני×..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "מבטל סריקה..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "קידומת ×©× ×§×•×‘×¥" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "קוד" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "×©× ×ž×§×•×¨×™" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "כתב" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "טיפול בקריסות" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "העבודה שלך נשמרה תחת %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "×œ× ×”×™×™×ª×” עבודה ×©×œ× × ×©×ž×¨×”." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "השגת מעקב ל×חור נכשלה. ×”×× GDB מותקן?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "טעינת התמונה נכשלה" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "ייתכן שהקובץ ×ינו תמונה ×ו פגו×:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "עמוד %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "תמונות PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "שמור תמונת בחירה" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "זיהוי הכל" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "זיהוי בחירה" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "בצע ניתוח פריסה" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "×§×‘×¦×™× ×–×ž× ×™×™×" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "בחר תיקייה..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "×ין הצעות" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "הוסף למילון" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "×”×ª×¢×œ× ×ž×ž×™×œ×”" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "עמוד" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "בלוק טקסט" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "פסקה" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "שורת טקסט" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "גרפי" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "×”×™×™×¦×•× × ×›×©×œ" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "×™×™×¦×•× ×”- ODT נכשל: ×œ× × ×™×ª×Ÿ לכתוב קובץ פלט." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "×ž×™×™×¦× ×œ×ž×¡×ž×š ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "הפעולה בוטלה" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "נכשל בעיבוד עמוד %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "×ž×™×™×¦× ×œ- PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "×™×™×¦×•× ×”- PDF נכשל: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "ספריית ×”- PDF ×œ× ×”×¦×œ×™×—×” לטעון ×ת הגופן '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "מונוכרו×" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "גבול (הצבע ×”×›×™ קרוב)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "מפוזר" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (×œ×œ× ×”×¤×¡×“)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT קבוצה 4 (×œ×œ× ×”×¤×¡×“)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (×ובדן)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "×–×”×” למקור" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "הת×מה ×ישית" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "ס\"מ" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "בתוך" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "×™×™×¦×•× ×”×˜×§×¡×˜ נכשל: ×œ× × ×™×ª×Ÿ לכתוב קובץ פלט." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "בלוק" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "שורה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "מילה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "מילה שגויה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "הצג ערכי ×מינות" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "×œ× × ×™×ª×Ÿ ×”×™×” לעבד ×ת ×”×“×¤×™× ×”×‘××™×:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "שגי×ות זיהוי" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "×¢×¨×›×™× ×ž×¨×•×‘×™×" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "מזג" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "פיצול מהמקור" # Notes: # Add Note # # Extracted comments: # Swapping allowed # #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "החלף" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "הוסף ×זור גרפי" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "הוסף בלוק טקסט" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "הוסף פסקה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "הוסף שורה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "הוסף מילה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "קבצי hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "פתח קובץ hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "×œ× × ×™×ª×Ÿ ×”×™×” לפתוח ×ת ×”×§×‘×¦×™× ×”×‘××™×:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "×”×§×‘×¦×™× ×”×‘××™× ××™× × ×—×•×§×™×™× ×‘- hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "×œ× × ×™×ª×Ÿ לפתוח קבצי×" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "פלט" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "שומר פלט hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "שמירת הפלט נכשלה" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "בדוק שיש לך הרש×ות כתיבה בתיקייה שבחרה." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "מסמכי טקסט של OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "שמור פלט ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "קבצי PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "שומר פלט PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "פלט ×œ× ×—×•×§×™" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "×œ× × ×™×ª×Ÿ להחליף קובץ המהווה תמונת מקור למסמך ×–×”." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "קבצי טקסט" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "שמור פלט טקסט..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "הפלט ×œ× × ×©×ž×¨" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "לשמור ×ת הפלט לפני שתמשיך?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "מחליף..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "מחיל החלפות..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "קיצורי מקשי×" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "שורות לפני:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "שורות ×חרי:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "
Tabשדה הב×
Shift+Tabשדה " "הקוד×
Downשורה הב××”
Upשורה הקודמת
Ctrl+Spaceהצעות ×יות
Ctrl+Enterהוסף מילה למילון
Ctrl+Bהחלף מודגש
Ctrl+Iהחלף נטוי
Ctrl+Dחלק ×ת המילה ×‘×ž×™×§×•× ×”×¡×ž×Ÿ
Ctrl+Mמזג ×¢× ×”×ž×™×œ×” הקודמת
Ctrl+Shift+Mמזג ×¢× " "המילה הקודמת
Ctrl+Deleteמחק מילה
Ctrl+{Left,Right}הת×× ×ת קצה התיבה התוחמת השמ×לית
Ctrl+Shift+{Left,Right}הת×× ×ת קצה התיבה התוחמת הימנית
Ctrl+{Up,Down}הת×× ×ת קצה התיבה העליונה
Ctrl+Shift+{Up,Down}הת×× ×ת קצה התיבה התוחמת
Ctrl++הגדל ×ת הגופן
Ctrl+-הקטן " "×ת הגופן
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "קיצורי מקשי×" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "ביטחון: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "משתמש ב- tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "בחר תמונה כדי להתחיל..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "מקורות ×ž×¨×•×‘×™× (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "מוכן" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "גרסה חדשה" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 זמין" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "הורד" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "יומן שינויי×" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "×ל תודיע שוב" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "×ל תציג שוב" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "התקן" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "חסר מילון ×יות" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "מילון בדיקת ×”×יות של %1 ×ינו מותקן" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "מתקין מילון ×יות עבור '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "שגי××”" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "התקנת מילון ×”×יות נכשלה: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "יצירת התיקייה למילוני ×”×יות נכשלה." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "×œ× × ×™×ª×Ÿ ×”×™×” ×œ×§×¨×•× ×ת %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "מוריד ×ת '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "×œ× × ×™×ª×Ÿ ×”×™×” להוריד ×ת ×”×ž×™×œ×•× ×™× ×”×‘××™×:\n" "%1\n" "\n" "בדוק ×ת הרש×ות הקישוריות והתיקיות.\n" "רמז: ×× ×ין לך הרש×ות כתיבה בקבצי מערכת, תוכל לעבור לנתיבי משתמש בתיבת " "הדו-שיח של ההגדרות." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "×ž×™×œ×•× ×™× ×”×•×§× ×•" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "×”×ž×™×œ×•× ×™× ×”×‘××™× ×”×•×ª×§× ×•:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "×œ× × ×ž×¦×ו מילוני ×יות עבור '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "עמוד: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "סגור מסמך" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "×œ×œ× ×›×•×ª×¨×ª %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "המסמך ×œ× × ×©×ž×¨" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "לשמור ×ת המסמך לפני שתמשיך?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "חושף שורות שבורות..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "×œ×œ× ×”×“×’×©×”" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "מצב הדגשת תחביר" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "בדוק ×יות" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "מספר ×”×ž×•×¤×¢×™× ×”×ª×•××ž×™× ×©×”×•×—×œ×¤×•: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "קובץ: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "עמוד: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[נכשל בזיהוי עמוד %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "בחר קבצי×" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "שומר פלט..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "×ž×¡×ž×›×™× ×©×œ× × ×©×ž×¨×•" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "×‘×ž×¡×ž×›×™× ×”×‘××™× ×™×© ×©×™× ×•×™×™× ×©×œ× × ×©×ž×¨×•. ×ילו ×ž×¡×ž×›×™× ×‘×¨×¦×•× ×š לשמור לפני שתמשיך?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "×ין שפות זמינות" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "×ין שפות teeseract זמינות לשימוש. הזיהוי ×œ× ×™×¢×‘×•×“." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "רב לשוני" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "חלוקת ×¢×ž×•×“×™× ×וטומטית" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "חלוקת ×¢×ž×•×“×™× ×¢× ×›×™×•×•×Ÿ וזיהוי כתב" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "×”× ×— שמדובר בעמודת טקסט ×חת" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "×”× ×— שמדובר בבלוק יחיד של טקסט מיושר ×נכית" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "×”× ×— שמדובר בבלוק טקסט יחיד" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "×”× ×— שמדובר בשורת טקסט" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "×”× ×— שמדובר במילה בודדת" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "×”× ×— שמדור במילה בודדת בעיגול" # Notes: # Add Note #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "טקסט קלוש ×œ×œ× ×¡×“×¨ מסויי×" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "טקסט קלוש ×¢× ×›×™×•×•×Ÿ וזיהוי כתב" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "מצב חלוקת עמוד" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "×ª×•×•×™× ×‘×¨×©×™×ž×” לבנה / שחורה..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "נהל שפות..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "החלף ×ת הפלט ×”×§×™×™×" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "דלג על מקור העיבוד" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "בחירה נוכחית" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "×ירעו שגי×ות בזיהוי" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "×”×תחול של tesseract נכשל" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "המקור כבר זוהה" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "מקור ×חד ×ו יותר שנבחרו כבר זוהו. להמשיך בכל ×–×ת?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "זיהוי דף %1 (%2 מתוך %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- עמוד %1: עיבוד העמוד נכשל" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "מזהה..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: עיבוד העמוד נכשל" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: הפלט כבר ×§×™×™×, מדלג" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: יצירת קובץ הפלט נכשלה" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "השגי×ות הב×ות התרחשו:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "הסריקה בוטלה" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "×œ× ×¦×•×™×™×Ÿ סורק" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "×œ× × ×™×ª×Ÿ להתחבר לסורק" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "×œ× × ×™×ª×Ÿ להתחיל בסריקה" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "שגי××” בתקשורת ×¢× ×”×¡×•×¨×§" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "שמירת התמונה נכשלה" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "הפעולה בוטלה." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "ההתקן עסוק." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "המכסה פתוח." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "מזין ×”×ž×¡×ž×›×™× × ×ª×§×¢." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "×ין ×ž×¡×ž×›×™× ×‘×ž×–×™×Ÿ המסמכי×." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "הגישה לסורק נדחתה." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "הזן ×¡×™×¡×ž× ×œ×§×•×‘×¥ '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "מסמך PDF ×¢× ×˜×§×¡×˜" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "קובץ ×”- PDF מכיל טקסט:\n" "%1\n" "לפתוח ×ותו בלי קשר?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "תמונות ומסמכי PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "שגי×ת לוח גזירי×" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "נכשל בקרי×ת לוח הגזירי×." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "%1 הודבק" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "שגי×ת ×¦×™×œ×•× ×ž×¡×š" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "×¦×™×œ×•× ×”×ž×¡×š נכשל." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "×¦×™×œ×•× ×ž×¡×š %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "שומר תמונה..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "×œ× × ×™×ª×Ÿ ×”×™×” לכתוב ל- %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "למחוק קובץ?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "למחוק ×ת ×”×§×‘×¦×™× ×”×‘××™×?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "פתח פלט" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "נמצ×ו ×’× ×˜×§×¡×˜ ×•×’× ×¤×œ×˜ hOCR. ××™×–×” ×ž×”× ×תה רוצה לפתוח?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "קובץ חסר" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "הקובץ נמחק ×ו הועבר:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "חפש ×חר" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "החלף ב" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "רשימת החלפות" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "פתח רשימת החלפות" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "שגי××” בקרי×ת הקובץ" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ת '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "×ירעו שגי×ות בקרי×ת הקובץ" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "×œ× × ×™×ª×Ÿ ×”×™×” ×œ×§×¨×•× ×›×ž×” ×¢×¨×›×™× ×‘×¨×©×™×ž×ª ההחלפות." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "שמור ×ת רשימת ההחלפות" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "שגי××” בשמירת קובץ" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ל '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "לשמור רשימה?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "×”×× ×‘×¨×¦×•× ×š לשמור ×ת הרשימה הנוכחית?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "נדרשת הרש×ת לניהול חבילות מערכת בכדי לנהל חבילות שפת ×”- tesseract עבור כל " "משמשי המערכת, ×ך ×œ× × ×ž×¦×. השירות ×”×–×” מסופק בדרך כלל ב×מצעות ×”×™×™×©×•× ×œ× ×™×”×•×œ " "חבילות, כגון ניהול ×”×™×™×©×•×ž×™× ×©×œ Gnome. ×× × ×”×ª×§×Ÿ תוכנה המספקת ×ת הממשק לניהול " "חבילת התקנה הדרוש, השתמש ישירות ×‘×™×™×©×•× ×חר לניהול חבילות מערכת כדי לנהל ×ת " "חבילות השפה של tesseract ב×ופן ישיר, ×ו לחילופין הגדר בתיבת הדו-שיח של " "התצורה ×ת נתיב ×”-tessdata בתיקיית המשתמש." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "מ×חזר שפות זמינות" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "×חזור הרשימה של השפות הזמינות נכשל: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "שגי×ת ניתוח: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "מחיל שינויי×..." # Notes: # Add Note #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "יצירת התיקייה לקבצי tessdata נכשלה." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "מוריד ×ת %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "×œ× × ×™×ª×Ÿ ×”×™×” להוריד ×ו להסיר ×ת ×”×§×‘×¦×™× ×”×‘××™×:\n" "%1\n" "\n" "בדוק ×ת הרש×ות הקישוריות והתיקיות.\n" "\n" "רמז: ×× ×ין לך הרש×ות כתיבה בתיקיות מערכת, ×תה יכול לעבור בנתיבי המשתמש " "בדו-שיח ההגדרות." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "כן" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "כן על הכל" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "ל×" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "×œ× ×¢×œ הכל" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "מחק" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "בטל טעינת הכל" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "טקסט" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "×ודות gImageReder" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

ממשק גרפי ל- tesseract-ocr

×תר ×ינטרנט

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "קרדיטי×" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "רשיון" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "במצב ×צווה, כל מקור קלט מעובד בנפרד, והפלט נשמר ×–×” לצד ×–×” בקובץ הקלט." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "קידוד מערכת" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "קידוד קובץ טקסט:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

×”×™×™×©×•× ×§×¨×¡

×נו ×ž×¦×˜×¢×¨×™× ×¢×œ ××™ הנוחות. כדי לעזור בשיפור ×”×פליקציה, ×× × ×©×§×•×œ לדווח על " "הבעיה ל- manisandro@gmail.com. נסה לת×ר מה עשית " "לפני שה×פליקציה קרסה. כמו כן, כלול ×ת המידע להלן. תודה.

" # Notes: # Add Note #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "

פעולת ה- Tesseract " "הופסקה

פעולה ×”- Tesseract (מנוע ×”- OCR) הופסקה בתהליך זיהוי " "הטקסט. הדבר עלול להתרחש ×× ×§×‘×¦×™ ×”×ª×¨×’×•× ×¤×’×•×ž×™× ×ו ש××™× × ×ª×•×× ×¢× ×’×™×¨×¡×ª ×”- " "tesseract שבשימוש, ×ו בגלל שגי××” ב- tesseract.

דוח ×¨×™×©×•× ×•×ž×¢×§×‘ " "×”×ª×”×œ×™×›×™× ×©×œ×ž×˜×” עשוי לספק מידע ×ודות ×’×•×¨× ×”×§×¨×™×¡×”.

" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "משטח סריקה" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "חזית ×”-ADF" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "×חוריי ×”-ADF" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF דו קומתי" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "התקרבות" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "התרחקות" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "גודל רגיל" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "ההת×מה הטובה ביותר" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "סובב שמ×לה" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "סובב שמ×לה" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "סובב ימינה" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "סובב ימינה" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "בקרות תמונה" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "×יתור פריסה ×וטומטי" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "החלף חלונית פלט" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "×™×™×¦×•× PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "×חורי:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "דיוקן" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "נוף" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "כתיבת קובץ נכשלה" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: מציע ×פשרויות דחיסת תמונות רבות יותר, ×ך " "×ינו מטפל ×‘×›×ª×‘×™× ×ž×•×¨×›×‘×™×.
  • QPrinter: תומך רק בדחיסת JPEG ל×חסון " "תמונות, ×ך מטפל ×‘×›×ª×‘×™× ×ž×•×¨×›×‘×™×.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "שמור כטקסט hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "חיפוש והחלפה" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "הצג ווידג'ט צף להגהה" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "קבצי המילון הב××™× ×”×•×§× ×•:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "×ין ×§×‘×¦×™× ×חרוני×" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "מחק קבצי×" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "×œ× × ×™×ª×Ÿ ×”×™×” להוריד ×ו להסיר ×ת ×”×§×‘×¦×™× ×”×‘××™×:\n" "%1\n" "בדוק ×ת הרש×ות הקישוריות והתיקיות.\n" "רמז: ×× ×ין לך הרש×ות כתיבה בתיקיות מערכת, תוכל\n" "לעבור לנתיבי משתמש בתיבת הדו-שיח של ההגדרות." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "פלט" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "מצב זיהוי ×ª×•×•×™× ×ופטי:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "הוסף תיקייה" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "הדבק" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "×§×— ×¦×™×œ×•× ×ž×¡×š" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "הסר תמונה" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "מחק תמונה" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "× ×§×” רשימה" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "הפסקות רצועת שורה" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "שמור פלט" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "× ×§×” פלט" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "הוסף לשונית" #~ msgid "actionBatchExport" #~ msgstr "פעולת ×™×™×¦×•× ×צווה" #~ msgid "Form" #~ msgstr "טופס" #~ msgid "One or more selected sources were aready recognized. Proceed anyway?" #~ msgstr "מקור ×חד ×ו יותר שנבחרו כבר זוהו. להמשיך בכל ×–×ת?" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "כמות ההחלפות שהתרחשו: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "קובץ ×‘×©× \"%1\" כבר ×§×™×™×. ×”×× ×תה בטוח שברצונך להחליף ×ותו?" #~ msgid "Overwrite File?" #~ msgstr "להחליף קובץ?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "יש %1 ×ž×¡×ž×›×™× ×¢× ×©×™× ×•×™×™× ×œ× ×©×ž×•×¨×™×" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "לשמור ×©×™× ×•×™×™× ×œ×¤× ×™ הסגירה? ×× ×œ× ×ª×©×ž×•×¨, כל ×”×©×™× ×•×™×™× ×™×בדו לצמיתות.\n" #~ "בחר ×ת ×”×ž×¡×ž×›×™× ×©×‘×¨×¦×•× ×š לשמור:" #~ msgid "New document %1" #~ msgstr "מסמך חדש %1" #~ msgid "Recent" #~ msgstr "ל×חרונה" #~ msgid "Failed to create output" #~ msgstr "יצירת הפלט נכשלה" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "יצירת הפלט נכשלה. השגי××” שהתרחשה ×”×™×: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

×”×פליקצייה קרסה

×נו ×ž×ª× ×¦×œ×™× ×¢×œ ××™ הנוחות. כדי לעזור בשיפור ×”×פליקצייה, שקול " #~ "לדווח על הבעיה ל manisandro@gmail.com. נסה לת×ר מה עשית " #~ "לפני שה×פליקצייה קרסה. כלול ×’× ×ת המידע להלן. תודה.

" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

ה Tesseract בוטל

×” Tesseract (המנוע של OCR) בוטל בזמן זיהוי טקסט. ×–×” עלול " #~ "להתרחש ×× ×”× ×ª×•× ×™× ×”×•×©×—×ª×• ×ו ש××™× × ×ª×•××ž×™× ×œ×’×™×¨×¡×ª ×” tesseract הנמצ×ת " #~ "בשימוש, ×ו עקב ב××’ ב tesseract.

×” Stacktrace למטה עשוי לספק מידע על " #~ "×ž×§×•× ×”×§×¨×™×¡×”.

" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "דוגמ×: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "טקסט פשוט" #~ msgid "Multiple sources" #~ msgstr "מקורות מרובי×" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- עמוד %1: עיבוד העמוד נכשל" #~ msgid "The following errors occurred:%1" #~ msgstr "השגי×ות הב×ות התרחשו: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "×”×§×‘×¦×™× ×”×‘××™× ×™×™×ž×—×§×•:%1" gImageReader-3.4.0/po/hi.po000066400000000000000000003073321417507262200154260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-02-07 16:38+0000\n" "Last-Translator: Shreeshrii \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.5-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "ओसीआर à¤à¤ªà¥à¤²à¤¿à¤•ेशन" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "भाषाओं का फिर से पता लगाà¤à¤" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "भाषाओं का पà¥à¤°à¤¬à¤‚धन करें" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•ताà¤à¤" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "मदद" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "बारे में" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "छोड़ें" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "अकà¥à¤·à¤° शà¥à¤µà¥‡à¤¤ सूची / काली सूची" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "इन अकà¥à¤·à¤°à¥‹à¤‚ को पहचाने जाने से बाहर रखें (काली सूची):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "अकà¥à¤·à¤°à¥‹à¤‚ की à¤à¤• लड़ी दरà¥à¤œ करें ..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "केवल निमà¥à¤¨à¤²à¤¿à¤–ित अकà¥à¤·à¤°à¥‹à¤‚ को पहचानने की अनà¥à¤®à¤¤à¤¿ दें (शà¥à¤µà¥‡à¤¤ सूची):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "ठीक है" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "आउटपà¥à¤Ÿ फलक दिशा:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "आड़ा" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "खड़ा" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "अनà¥à¤ªà¤²à¤¬à¥à¤§ वरà¥à¤¤à¤¨à¥€ जाà¤à¤š शबà¥à¤¦à¤•ोश सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करने के लिठकà¥à¤µà¥‡à¤°à¥€" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "नठपà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® संसà¥à¤•रणों के लिठसà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से जाà¤à¤š करें" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ भाषा परिभाषाà¤à¤:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "अनà¥à¤¯ भाषा परिभाषाà¤à¤:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "टेसेरेकà¥à¤Ÿ भाषा डेटा फ़ाइल का पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 भाषा कोड के बाद देश कोड" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "आईà¤à¤¸à¤“ कोड" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "भाषा का नाम" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "नाम" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "रदà¥à¤¦ करें" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "आउटपà¥à¤Ÿ फलक फ़ॉनà¥à¤Ÿ:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "डिफ़ॉलà¥à¤Ÿ" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "भाषा डेटा सà¥à¤¥à¤¾à¤¨:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "भाषा परिभाषा पथ:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश पथ:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "सिसà¥à¤Ÿà¤®-वाइड पथ" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "उपयोगकरà¥à¤¤à¤¾ पथ" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "निरà¥à¤¯à¤¾à¤¤ किठगठदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ को डिफ़ॉलà¥à¤Ÿ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— दà¥à¤µà¤¾à¤°à¤¾ अपने आप खोलें" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "बैकटà¥à¤°à¥‡à¤¸ फिर से बनाà¤à¤" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हो गया है\n" "\n" "असà¥à¤µà¤¿à¤§à¤¾ के लिठकà¥à¤·à¤®à¤¾ चाहते हैं. इस à¤à¤ªà¥à¤²à¤¿à¤•ेशन में सà¥à¤§à¤¾à¤° के लिà¤, समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ यहाठकरें - " "manisandro@gmail.com. कृपया बताà¤à¤ कि जब " "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हà¥à¤† तो उस समय आप सिसà¥à¤Ÿà¤® पर कà¥à¤¯à¤¾ काम कर रहे थे. साथ ही नीचे दी गई " "जानकारी भी शामिल करें. धनà¥à¤¯à¤µà¤¾à¤¦." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "टेसरैकà¥à¤Ÿ निरसà¥à¤¤ हो गया है\n" "\n" "पाठ को पहचानते समय टेसरैकà¥à¤Ÿ (OCR इंजन) निरसà¥à¤¤ हो गया है। यह तब हो सकता है जब उपयोग " "किठगठटà¥à¤°à¥‡à¤¨à¥à¤¡à¤¡à¥‡à¤Ÿà¤¾ भà¥à¤°à¤·à¥à¤Ÿ अथवा उपयोग किये टेसरैकà¥à¤Ÿ संसà¥à¤•रण से बेमेल हों, या टेसेरैकà¥à¤Ÿ में बग हो।\n" "\n" "नीचे दिठगठसà¥à¤Ÿà¥ˆà¤•टà¥à¤°à¥‡à¤¸ अतिरिकà¥à¤¤ जानकारी पà¥à¤°à¤¦à¤¾à¤¨ कर सकते हैं कि कà¥à¤°à¥ˆà¤¶ कहाठहà¥à¤†à¥¤\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "लागू करें" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "बंद करें" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "फोलà¥à¤¡à¤° का चयन करें..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "फॉरà¥à¤®à¥‡à¤Ÿ:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "आउटपà¥à¤Ÿ:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "आउटपà¥à¤Ÿ मोड:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "हाल की कोई फाइल नहीं" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "अनà¥à¤¯ विकलà¥à¤ª" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "आउटपà¥à¤Ÿ पैन टॉगल करें" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ पृषà¥à¤  घà¥à¤®à¤¾à¤à¤" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "सभी पृषà¥à¤ à¥‹à¤‚ को घà¥à¤®à¤¾à¤à¤" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "सà¥à¤°à¥‹à¤¤" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "चितà¥à¤° जोड़ें" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "चितà¥à¤° जोड़ें" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "सूची से चितà¥à¤° निकालें" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "चितà¥à¤° हटाà¤à¤" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "सूची साफ़ करें" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "थमà¥à¤¬à¤¨à¥‡à¤²à¥à¤¸" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "फ़ाइलें" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "उपकरण:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "रिफ़à¥à¤°à¥‡à¤¶" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "आउटपà¥à¤Ÿ:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "मोड:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "रंगीन" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "धूसर" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "रिसॉलà¥à¤¯à¥à¤¶à¤¨:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "सà¥à¤•ैन" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "सà¥à¤°à¥‹à¤¤:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤ करें" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "चमक" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "कंटà¥à¤°à¤¾à¤¸à¥à¤Ÿ" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "रिसॉलà¥à¤¯à¥à¤¶à¤¨" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "रंग उलटें" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "बड़ा करें" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "छोटा करें" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "सामानà¥à¤¯ आकार" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "सबसे अचà¥à¤›à¤¾ फिट" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "पृषà¥à¤ à¥‹à¤‚ को घà¥à¤®à¤¾à¤à¤" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "घà¥à¤®à¤¾à¤µ मोड चà¥à¤¨à¥‡à¤‚" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿ मोड चà¥à¤¨à¥‡à¤‚" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "पृषà¥à¤  चà¥à¤¨à¥‡à¤‚" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "चितà¥à¤° नियंतà¥à¤°à¤£" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "सादा टेकà¥à¤¸à¥à¤Ÿ" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "à¤à¤šà¤“सीआर, पीडीà¤à¤«" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "आकार का अपने आप पता लगाà¤à¤" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "सभी पहचानें" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "भाषा चà¥à¤¨à¥‡à¤‚" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "निरà¥à¤¯à¤¾à¤¤ करें" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "टेसेरेकà¥à¤Ÿ-ओसीआर के लिठà¤à¤• गà¥à¤°à¤¾à¤«à¤¿à¤•ल फà¥à¤°à¤‚टà¤à¤‚ड" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "बैच मोड" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "बैच मोड में, पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• इनपà¥à¤Ÿ सà¥à¤°à¥‹à¤¤ को अलग से संसाधित किया जाता है और आउटपà¥à¤Ÿ इनपà¥à¤Ÿ फ़ाइल में " "साइड-बाय-साइड सेव होता है।" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "मौजूदा आउटपà¥à¤Ÿ:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "पेज नंबर को टेकà¥à¤¸à¥à¤Ÿ आउटपà¥à¤Ÿ के पहले लगायें" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "पेज लेआउट को सà¥à¤µà¤¤à¤ƒ पहचाने" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "पृषà¥à¤  सीमा" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "पृषà¥à¤  सीमा:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "उदाहरण: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "पहचान कà¥à¤·à¥‡à¤¤à¥à¤°:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "संपूरà¥à¤£ पृषà¥à¤ " #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "अपने आप पता लगाà¤à¤" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "आउटपà¥à¤Ÿ पाठ से पहले लगाà¤à¤:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "सà¥à¤°à¥‹à¤¤ फ़ाइलनाम" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "सà¥à¤°à¥‹à¤¤ पृषà¥à¤ " #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ पीडीà¤à¤«à¤¼" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ पृषà¥à¤ " #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "à¤à¤• से अघिक पृषà¥à¤ ..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "बैच मोड..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "शबà¥à¤¦ जोड़ें" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "शबà¥à¤¦ डालें:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "नई आउटपà¥à¤Ÿ अंतिम पृषà¥à¤  के बाद डालें" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "नई आउटपà¥à¤Ÿ वरà¥à¤¤à¤®à¤¾à¤¨ पृषà¥à¤  के पहले डालें" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "सादा पाठ में निरà¥à¤¯à¤¾à¤¤ करें" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "पीडीà¤à¤« में निरà¥à¤¯à¤¾à¤¤ करें" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ओडीटी में निरà¥à¤¯à¤¾à¤¤ करें" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "दसà¥à¤¤à¤¾à¤µà¥‡à¤œ अंतिम पृषà¥à¤  के बाद जोड़ें" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "दसà¥à¤¤à¤¾à¤µà¥‡à¤œ वरà¥à¤¤à¤®à¤¾à¤¨ पृषà¥à¤  के पहले डालें" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR फ़ाइल खोलें" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "आउटपà¥à¤Ÿ सहेजें" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "निरà¥à¤¯à¤¾à¤¤ करें" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "आउटपà¥à¤Ÿ साफ करें" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "ढूंढें तथा बदलें" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "कॉनà¥à¤«à¤¿à¤¡à¥‡à¤‚स मूलà¥à¤¯ दिखाà¤à¤" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न दिखाà¤à¤" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "अगला (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "पिछला (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "सभी फैलाà¤à¤" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "सभी समेंटें" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "गà¥à¤£" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "सà¥à¤°à¥‹à¤¤" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ पाठ से आगे जोड़ें" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "संकेतक सà¥à¤¥à¤¿à¤¤à¤¿ में पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ करें" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ पाठ को बदलें" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "लाइन बà¥à¤°à¥‡à¤• बनाठरखें यदि..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "अंत चिहà¥à¤¨ (.?!) से पहले" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "उदà¥à¤§à¤°à¤£ चिहà¥à¤¨ से पहले या बाद में" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "अनà¥à¤¯ विकलà¥à¤ª" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "हायफ़न चिहà¥à¤¨ से अलग किठशबà¥à¤¦ जोड़ें" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "वà¥à¤¹à¤¾à¤‡à¤Ÿ-सà¥à¤ªà¥‡à¤¸ खतà¥à¤® करें" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "पैरागà¥à¤°à¤¾à¤« बनाठरखें" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "दृशà¥à¤¯ में सहायक" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "वà¥à¤¹à¤¾à¤‡à¤Ÿ-सà¥à¤ªà¥‡à¤¸ बनाà¤à¤" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "hOCR फ़ाइल खोलें" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "चयनित पाठ के लाइन बà¥à¤°à¥‡à¤• को हटाà¤à¤" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "पहले जैसा" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "दोहराà¤à¤" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "आउटपà¥à¤Ÿ मोड:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "पीडीà¤à¤«à¤¼" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "अदृशà¥à¤¯ पाठ ओवरले सहित पीडीà¤à¤«à¤¼" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "संपीडन:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "संपीडन गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "डीपीआई:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "डिथरिंग à¤à¤²à¥à¤—ोरिदम:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "इमेज सेटिंग:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "पंकà¥à¤¤à¤¿ तथा शबà¥à¤¦ के बीच की दूरी à¤à¤• समान करें" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "फ़ॉनà¥à¤Ÿ परिवार को ओवरराइड करें:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "फ़ॉनà¥à¤Ÿ परिवार में वापस लौटें:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "फ़ॉनà¥à¤Ÿ आकार को ओवरराइड करें:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "फॉनà¥à¤Ÿ सà¥à¤•ेलिंग:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "पाइंट" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "इससे अधिक चौड़े रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨ को बनाठरखें:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "अकà¥à¤·à¤°" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "लाइन बà¥à¤°à¥‡à¤• से पहले हाइफन चिहà¥à¤¨ हटाà¤à¤" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "पाठ सेटिंगà¥à¤¸:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "कागज आकार:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "चौड़ाई" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "ऊंचाई" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "छवि सà¥à¤°à¥‹à¤¤à¥‹à¤‚ को सही डीपीआई यà¥à¤•à¥à¤¤ मानें:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "मूल" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "पीडीà¤à¤«à¤¼ संसà¥à¤•रण:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "पासवरà¥à¤¡:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "पासवरà¥à¤¡ पà¥à¤·à¥à¤Ÿà¤¿ करें:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ (वैकलà¥à¤ªà¤¿à¤•):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "लेखक:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "शीरà¥à¤·à¤•:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "विषय:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "सृजक:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "निरà¥à¤®à¤¾à¤¤à¤¾:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "की-वरà¥à¤¡à¤¸:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "अतिरिकà¥à¤¤ जानकारी (वैकलà¥à¤ªà¤¿à¤•):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ सà¥à¤°à¥‹à¤¤ से आयात करें" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "उनà¥à¤¨à¤¤" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "ढूंढें" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "बदलें" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "सभी बदलें" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "पिछला ढूंढें" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "अगला ढूंढें" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "छोटे-बड़े अकà¥à¤·à¤° का मिलान करें" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "सबà¥à¤¸à¤Ÿà¥€à¤Ÿà¥à¤¯à¥‚शनà¥à¤¸" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "मिटाà¤à¤" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "अनà¥à¤•à¥à¤°à¤®:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "पहचानें" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "पहचानें और कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ में ले जाà¤à¤" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "चितà¥à¤° के रूप में सहेजें" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "खोलें" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "सहेजें" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "साफ करें" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "जोड़ें" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "हटाà¤à¤" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "टेसडाटा पà¥à¤°à¤¬à¤‚धक" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ भाषाओं का पà¥à¤°à¤¬à¤‚धन करें:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "चितà¥à¤°" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "आउटपà¥à¤Ÿ फ़ाइल-नाम चà¥à¤¨à¥‡à¤‚..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "सà¥à¤•ैनिंग बैकà¤à¤‚ड चालू नहीं कर सका." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "सà¥à¤•ैन नहीं हà¥à¤†" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "सà¥à¤•ैनर का पता नहीं चला." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "सà¥à¤•ैन पà¥à¤°à¤¾à¤°à¤‚भ किया जा रहा है..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "उपकरण खोल रहा है..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "विकलà¥à¤ªà¥‹à¤‚ को सेट किया जा रहा है..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "पैरामीटर लाठजा रहे हैं..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "डेटा हसà¥à¤¤à¤¾à¤‚तरित किया जा रहा है..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "सà¥à¤•ैन रदà¥à¤¦ किया जा रहा है..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "फ़ाइलनाम पà¥à¤°à¤¥à¤®à¤¾à¤•à¥à¤·à¤°" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "कोड" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "मूल नाम" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "कà¥à¤°à¥ˆà¤¶ हैंडलर" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "आपका काम %1के तहत सहेजा गया है." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "कोई बिना सहेजा काम नहीं था." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "बैकटà¥à¤°à¥‡à¤¸ पाने में अकà¥à¤·à¤®. कà¥à¤¯à¤¾ जीडीबी इनà¥à¤¸à¥à¤Ÿà¤¾à¤²à¥à¤¡ है?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "चितà¥à¤° लोड करने में असफल" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "हो सकता है कि फ़ाइल à¤à¤• चितà¥à¤° की न हो या खराब हो:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "पृषà¥à¤  %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "पीà¤à¤¨à¤œà¥€ चितà¥à¤°" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "चयनित चितà¥à¤° सहेजें" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "चयन.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "सभी को पहचानें" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "चयन को पहचानें" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "आकार पà¥à¤°à¤•ार का पता लगा रहा है" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "फोलà¥à¤¡à¤° का चयन करें..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "कोई सà¥à¤à¤¾à¤µ नहीं" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "शबà¥à¤¦à¤•ोश में जोड़ें" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "शबà¥à¤¦ नजरअंदाज करें" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "पृषà¥à¤ " #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "पाठ बà¥à¤²à¥‰à¤•" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "पैरागà¥à¤°à¤¾à¤«" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "पाठ-लाइन" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "गà¥à¤°à¤¾à¤«à¤¼à¤¿à¤•" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "निरà¥à¤¯à¤¾à¤¤ असफल" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ODT निरà¥à¤¯à¤¾à¤¤ विफल: आउटपà¥à¤Ÿ फ़ाइल लिखने में असमरà¥à¤¥." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ODT को निरà¥à¤¯à¤¾à¤¤ कर रहा है..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "कारà¥à¤°à¤µà¤¾à¤ˆ रदà¥à¤¦ कर दी गई" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "पेज %1 रेंडर करने में विफल रहा" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "पीडीà¤à¤«à¤¼ के रूप में निरà¥à¤¯à¤¾à¤¤ कर रहा है..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "पीडीà¤à¤«à¤¼ निरà¥à¤¯à¤¾à¤¤ विफल: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "पीडीà¤à¤« लाइबà¥à¤°à¥‡à¤°à¥€ फ़ॉनà¥à¤Ÿ '%1' लोड नहीं कर सका." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "à¤à¤•वरà¥à¤£" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "दहलीज (निकटतम रंग)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "विसृत" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "ज़िप (लॉसलेस)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "सीसीआईटीटी समूह 4 (लॉसलेस)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "जेपीईजी (लॉसी)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "सà¥à¤°à¥‹à¤¤ जैसे ही" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "मनपसंद" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "से.मी." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "इंच" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "पाठ निरà¥à¤¯à¤¾à¤¤ विफल: आउटपà¥à¤Ÿ फ़ाइल लिखने में असमरà¥à¤¥." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "खंड" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "पंकà¥à¤¤à¤¿" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "शबà¥à¤¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "गलत वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "कॉनà¥à¤«à¤¿à¤¡à¥‡à¤‚स मूलà¥à¤¯ दिखाà¤à¤" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "निमà¥à¤¨à¤²à¤¿à¤–ित पृषà¥à¤ à¥‹à¤‚ पर कारà¥à¤°à¤µà¤¾à¤ˆ नहीं की जा सकी:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "पहचानने में तà¥à¤°à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "à¤à¤• से अधिक मान" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "मिलाà¤à¤‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "पैरेंट से विभाजन" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "अदला - बदली" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "गà¥à¤°à¤¾à¤«à¤¿à¤• कà¥à¤·à¥‡à¤¤à¥à¤° जोड़ें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "पाठ बà¥à¤²à¥‰à¤• जोड़ें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "अनà¥à¤šà¥à¤›à¥‡à¤¦ जोड़ें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "पंकà¥à¤¤à¤¿ जोड़ें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "शबà¥à¤¦ जोड़ें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR à¤à¤šà¤Ÿà¥€à¤à¤®à¤à¤² फ़ाइलें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "hOCR फ़ाइलें खोलें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "निमà¥à¤¨à¤²à¤¿à¤–ित फाइलें नहीं खà¥à¤²à¥€à¤‚:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "निमà¥à¤¨à¤²à¤¿à¤–ित फाइलें सही à¤à¤šà¤“सीआर à¤à¤šà¤Ÿà¥€à¤à¤®à¤à¤² नहीं हैं:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "फ़ाइल खोलने में अकà¥à¤·à¤®" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "आउटपà¥à¤Ÿ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "hOCR आउटपà¥à¤Ÿ सहेजें..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "आउटपà¥à¤Ÿ सहेजने में विफल रहा" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "जांच कर लें कि चयनित फ़ोलà¥à¤¡à¤° में आपके पास लिखने की अनà¥à¤®à¤¤à¤¿ है." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "ओपनडॉकà¥à¤¯à¥à¤®à¥‡à¤‚ट पाठ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT आउटपà¥à¤Ÿ सहेजें..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "पीडीà¤à¤«à¤¼ फाइलें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "पीडीà¤à¤«à¤¼ आउटपà¥à¤Ÿ सहेजें..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "अमानà¥à¤¯ आउटपà¥à¤Ÿ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "किसी फाइल को मिटाकर नहीं लिख सकते जो इस दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ का सà¥à¤°à¥‹à¤¤ चितà¥à¤° है." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "पाठ फ़ाइलें" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "पाठ आउटपà¥à¤Ÿ सहेजें..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "आउटपà¥à¤Ÿ सहेजा नहीं गया" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "आगे बढ़ने से पहले आउटपà¥à¤Ÿ सहेजें?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "बदल रहा है..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤¨ लागू कर रहा है..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "कीबोरà¥à¤¡ शॉरà¥à¤Ÿà¤•ट" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "इससे पहले की लाइनें:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "इसके बाद की लाइनें:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "
टैब अगला कà¥à¤·à¥‡à¤¤à¥à¤°
शिफà¥à¤Ÿ+टैब पिछला " "कà¥à¤·à¥‡à¤¤à¥à¤°
नीचे अगली पंकà¥à¤¤à¤¿
ऊपर पिछली पंकà¥à¤¤à¤¿
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+सà¥à¤ªà¥‡à¤¸à¤µà¤°à¥à¤¤à¤¨à¥€ सà¥à¤à¤¾à¤µ
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+à¤à¤¨à¥à¤Ÿà¤°à¤¶à¤¬à¥à¤¦à¤•ोश में शबà¥à¤¦ जोड़ें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+Bटॉगल बोलà¥à¤¡
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+Iटॉगल आइटालिक
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+Dकरà¥à¤¸à¤° सà¥à¤¥à¤¿à¤¤à¤¿ पर शबà¥à¤¦ विभाजित करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+Mपिछले शबà¥à¤¦ के साथ विलय
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+शिफà¥à¤Ÿ+Mअगले शबà¥à¤¦ के साथ विलय
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+डिलीटशबà¥à¤¦ डिलीट करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+{बाà¤à¤‚," "दाà¤à¤‚}बाउंडिंग बॉकà¥à¤¸ का बायां सिरा à¤à¤¡à¤œà¤¸à¥à¤Ÿ करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+शिफà¥à¤Ÿ+{बाà¤à¤‚,दाà¤à¤‚}बाउंडिंग बॉकà¥à¤¸ का दाहिना सिरा à¤à¤¡à¤œà¤¸à¥à¤Ÿ " "करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+{ऊपर,नीचे}बाउंडिंग बॉकà¥à¤¸ का ऊपरी सिरा à¤à¤¡à¤œà¤¸à¥à¤Ÿ " "करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+शिफà¥à¤Ÿ+{ऊपर,नीचे}बाउंडिंग बॉकà¥à¤¸ का निचला सिरा " "à¤à¤¡à¤œà¤¸à¥à¤Ÿ करें
कनà¥à¤Ÿà¥à¤°à¥‹à¤²++फ़ॉनà¥à¤Ÿ आकार बढ़ाà¤à¤‚
कनà¥à¤Ÿà¥à¤°à¥‹à¤²+-फ़ॉनà¥à¤Ÿ आकार कम करें
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "कीबोरà¥à¤¡ शॉरà¥à¤Ÿà¤•ट" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "विशà¥à¤µà¤¾à¤¸: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "टेसेरेकà¥à¤Ÿ उपयोग में" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "पà¥à¤°à¤¾à¤°à¤‚भ करने के लिठकोई चितà¥à¤° चà¥à¤¨à¥‡à¤‚..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "कई सà¥à¤°à¥‹à¤¤ (% 1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "तैयार" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "नया संसà¥à¤•रण" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "जी-इमेज-रीडर %1 उपलबà¥à¤§ है" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "डाउनलोड" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "बदलाव-सूची" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "फिर से सूचित नहीं करें" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "फिर से न दिखाà¤à¤" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश उपलबà¥à¤§ नहीं है" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "%1 के लिठवरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहीं है" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "'%1' के लिठवरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ किया जा रहा है" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "तà¥à¤°à¥à¤Ÿà¤¿" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करने में विफल: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश के लिठडिरेकà¥à¤Ÿà¥à¤°à¥€ बनाने में विफल रहा." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "पढ़ नहीं सका %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "'%1' को डाउनलोड किया जा रहा है..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "निमà¥à¤¨ शबà¥à¤¦à¤•ोश डाउनलोड नहीं किया जा सका:\n" "%1\n" "\n" "कनेकà¥à¤¶à¤¨ सà¥à¤¥à¤¿à¤¤à¤¿ और डिरेकà¥à¤Ÿà¥à¤°à¥€ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤ जाà¤à¤š लें.\n" "संकेत: यदि आपके पास सिसà¥à¤Ÿà¤® फ़ोलà¥à¤¡à¤° में लिखने की अनà¥à¤®à¤¤à¤¿ नहीं है तो सेटिंग संवाद में बदल कर आप " "उपयोगकरà¥à¤¤à¤¾ पथ चà¥à¤¨ सकते हैं." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "शबà¥à¤¦à¤•ोश संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ हैं" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "निमà¥à¤¨ शबà¥à¤¦à¤•ोश संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ हैं:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "'%1' के लिठकोई वरà¥à¤¤à¤¨à¥€ शबà¥à¤¦à¤•ोश नहीं मिला." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "पृषà¥à¤  : %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "चिपकाया %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "आउटपà¥à¤Ÿ सहेजा नहीं गया" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "आगे बढ़ने से पहले आउटपà¥à¤Ÿ सहेजें?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "लाइन बà¥à¤°à¥‡à¤• को हटाया जा रहा है..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "वरà¥à¤¤à¤¨à¥€ जांचें" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "फ़ाइलः %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "पृषà¥à¤ : %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[पृषà¥à¤  %1 पहचानने में विफल]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "फ़ाइल चà¥à¤¨à¥‡à¤‚" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "आउटपà¥à¤Ÿ सहेजें..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "कोई भाषा उपलबà¥à¤§ नहीं" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "उपयोग के लिठकोई टेसरेकà¥à¤Ÿ भाषा उपलबà¥à¤§ नहीं है. अकà¥à¤·à¤° पहचान काम नहीं करेगा." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "बहà¥à¤­à¤¾à¤·à¥€" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "पृषà¥à¤  विभाजन अपने आप" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "दिशा और लिपि पहचान के साथ पृषà¥à¤  विभाजन" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "मानें कि पाठ à¤à¤• कॉलम में है" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "मानें कि पाठ खड़े आकार में पंकà¥à¤¤à¤¿à¤¬à¤¦à¥à¤§ à¤à¤• खंड में है" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "मानें कि पाठ à¤à¤• समान à¤à¤• खंड में है" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "मानें कि पाठ à¤à¤• पंकà¥à¤¤à¤¿ में है" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "मानें कि पाठ à¤à¤• शबà¥à¤¦ है" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "मानें कि पाठ वृतà¥à¤¤ रूप में à¤à¤• शबà¥à¤¦ है" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "पाठ किसी विशेष अनà¥à¤•à¥à¤°à¤® में नहीं है, बलà¥à¤•ि यतà¥à¤° ततà¥à¤° बिखऱा है" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "दिशा और लिपि पहचान के साथ यतà¥à¤° ततà¥à¤° बिखरा पाठ" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "पृषà¥à¤  विभाजन मोड" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "अकà¥à¤·à¤° शà¥à¤µà¥‡à¤¤ सूची / काली सूची..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "भाषाओं का पà¥à¤°à¤¬à¤‚धन करें..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "मौजूदा आउटपà¥à¤Ÿ को अधिलेखित करें" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग सोरà¥à¤¸ छोड़ें" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ चयन" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "पहचानने में तà¥à¤°à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚ हà¥à¤ˆà¤‚" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "टेसेरेकà¥à¤Ÿ आरंभ करने में विफल रहा" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "पृषà¥à¤  %1 पहचान रहा है (%3 में से %2)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- पेज % 1: पेज पà¥à¤°à¤¸à¥à¤¤à¥à¤¤ करने में विफल रहा" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "पहचान रहा है..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: पृषà¥à¤  पà¥à¤°à¤¸à¥à¤¤à¥à¤¤ करने में विफल रहा" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: आउटपà¥à¤Ÿ पहले से मौजूद है, छोड़ दें" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: आउटपà¥à¤Ÿ फ़ाइल बनाने में विफल रहा" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "निमà¥à¤¨à¤²à¤¿à¤–ित तà¥à¤°à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚ हà¥à¤ˆà¤‚:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "सà¥à¤•ैन रदà¥à¤¦ किया गया" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "कोई सà¥à¤•ैनर निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं है" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "सà¥à¤•ैनर से जà¥à¤¡à¤¼à¤¨à¥‡ में असमरà¥à¤¥" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "सà¥à¤•ैन पà¥à¤°à¤¾à¤°à¤‚भ करने में अकà¥à¤·à¤®" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "सà¥à¤•ैनर के साथ संचार में तà¥à¤°à¥à¤Ÿà¤¿" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "चितà¥à¤° सहेजने में असफल" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "कारà¥à¤°à¤µà¤¾à¤ˆ रदà¥à¤¦ कर दी गई." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "उपकरण वà¥à¤¯à¤¸à¥à¤¤ है." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "कवर खà¥à¤²à¤¾ है." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ फ़ीडर जाम हो गया है." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ फ़ीडर में दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ खतà¥à¤® हो गया है." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "सà¥à¤•ैनर पर पंहà¥à¤š असà¥à¤µà¥€à¤•ृत." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "फ़ाइल '%1' के लिठपासवरà¥à¤¡ भरें:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "टेकà¥à¤¸à¥à¤Ÿ सहित पीडीà¤à¤«" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "पीडीà¤à¤«à¤¼ फाइल में पहले से ही टेकà¥à¤¸à¥à¤Ÿ है:\n" "%1\n" "फिर भी उसे खोलें?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "चितà¥à¤° तथा पीडीà¤à¤«à¤¼" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ तà¥à¤°à¥à¤Ÿà¤¿" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ को पढ़ने में असफ़ल." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "चिपकाया %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ तà¥à¤°à¥à¤Ÿà¤¿" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ लेने में विफल." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "चितà¥à¤° सहेज रहा है..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "फ़ाइल लिख नहीं सकता" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "%1 पर लिख नहीं सका." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "फ़ाइल मिटाà¤à¤?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "निमà¥à¤¨ फ़ाइलें हटाà¤à¤‚?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "आउटपà¥à¤Ÿ खोलें" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "टेकà¥à¤¸à¥à¤Ÿ और à¤à¤šà¤“सीआर आउटपà¥à¤Ÿ दोनों पाठगठ। आप किसे खोलना चाहते हैं?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "फ़ाइल नहीं है" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "निमà¥à¤¨ फ़ाइलें मिटा दी गई हैं या अनà¥à¤¯à¤¤à¥à¤° ले जाई गई हैं:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "के लिठढूंढें" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "से बदलें" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "अदला-बदली की सूची" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "अदला-बदली की सूची खोलें" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "फ़ाइल से पढ़ने में तà¥à¤°à¥à¤Ÿà¤¿" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "'%1' को पढ़ने में अकà¥à¤·à¤®." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "फ़ाइल पढ़ने के दौरान तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "अदला बदली सूची की कà¥à¤› पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¥‹à¤‚ को पढ़ नहीं सका." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "अदला-बदली की सूची सहेजें" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "फ़ाइल सहेजने में तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "'%1' पर लिखने में असमरà¥à¤¥." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "सूची सहेजें?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "कà¥à¤¯à¤¾ आप वरà¥à¤¤à¤®à¤¾à¤¨ सूची को सहेजना चाहते हैं?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "सिसà¥à¤Ÿà¤®-वाइड टेसेरेकà¥à¤Ÿ भाषाई पैक के पà¥à¤°à¤¬à¤‚धन के लिठपैकेजकिट बैकà¤à¤‚ड पर सेसन कनेकà¥à¤¶à¤¨ आवशà¥à¤¯à¤• है, " "परंतॠयह नहीं मिला. यह सेवा आमतौर पर सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° पà¥à¤°à¤¬à¤‚धन à¤à¤ªà¥à¤²à¤¿à¤•ेशन जैसे कि गà¥à¤¨à¥‹à¤® सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° " "दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¦à¤¾à¤¨ किया जाता है. कृपया आवशà¥à¤¯à¤• सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें जो आवशà¥à¤¯à¤• पैकेजकिट इंटरफ़ेस " "पà¥à¤°à¤¦à¤¾à¤¨ करे, सीधे ही टेसेरेकà¥à¤Ÿ भाषाई पैक का पà¥à¤°à¤¬à¤‚धन करने के लिठअनà¥à¤¯ सिसà¥à¤Ÿà¤® पैकेज पà¥à¤°à¤¬à¤‚धक " "सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° उपयोग में लें अथवा कॉनà¥à¤«à¤¼à¤¿à¤—à¥à¤°à¥‡à¤¶à¤¨ संवाद में बदल कर उपयोगकरà¥à¤¤à¤¾ टेसडेटा पथ का उपयोग " "करें." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "उपलबà¥à¤§ भाषाओं की जानकारी पà¥à¤°à¤¾à¤ªà¥à¤¤ की जा रही है" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "उपलबà¥à¤§ भाषाओं की सूची लाने में विफल:%1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "पारसिंग तà¥à¤°à¥à¤Ÿà¤¿: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "परिवरà¥à¤¤à¤¨ लागू कर रहा है ..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Tessdata फ़ाइलों के लिठनिरà¥à¤¦à¥‡à¤¶à¤¿à¤•ा बनाने में विफल." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "%1 को डाउनलोड किया जा रहा है..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "निमà¥à¤¨ फ़ाइलों को डाउनलोड अथवा हटाया नहीं जा सका:\n" "%1\n" "\n" "कनेकà¥à¤¶à¤¨ सà¥à¤¥à¤¿à¤¤à¤¿ और डायरेकà¥à¤Ÿà¤°à¥€à¤…नà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤ जाà¤à¤š लें.\n" "\n" "संकेत: यदि आपके पास सिसà¥à¤Ÿà¤® फ़ोलà¥à¤¡à¤° में लिखने की अनà¥à¤®à¤¤à¤¿ नहीं है, तो सेटिंग संवाद में इसे बदल कर " "आप उपयोगकरà¥à¤¤à¤¾ पथ चà¥à¤¨ सकते हैं." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "हां" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "सभी को हाà¤" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "नहीं" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "सभी को नहीं" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "खारिज करें" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "खारिज करें" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "टेकà¥à¤¸à¥à¤Ÿ" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "à¤à¤šà¤“सीआर" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "जी-इमेज-रीडर का परिचय" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

tesseract-ocr का उपयोग में आसान पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤®

वेबसाइट

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "शà¥à¤°à¥‡à¤¯" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "लाइसेंस" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "बैच मोड में, पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• इनपà¥à¤Ÿ सà¥à¤°à¥‹à¤¤ को अलग से संसाधित किया जाता है और आउटपà¥à¤Ÿ इनपà¥à¤Ÿ फ़ाइल में " "साइड-बाय-साइड सेव होता है।" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "सिसà¥à¤Ÿà¤® à¤à¤¨à¥à¤•ोडिंग" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "यूटीà¤à¤«-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "पाठ फ़ाइल à¤à¤¨à¥à¤•ोडिंग:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हो गया है\n" "\n" "असà¥à¤µà¤¿à¤§à¤¾ के लिठकà¥à¤·à¤®à¤¾ चाहते हैं. इस à¤à¤ªà¥à¤²à¤¿à¤•ेशन में सà¥à¤§à¤¾à¤° के लिà¤, समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ यहाठकरें - " "manisandro@gmail.com. कृपया बताà¤à¤ कि जब " "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हà¥à¤† तो उस समय आप सिसà¥à¤Ÿà¤® पर कà¥à¤¯à¤¾ काम कर रहे थे. साथ ही नीचे दी गई " "जानकारी भी शामिल करें. धनà¥à¤¯à¤µà¤¾à¤¦." #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "टेसरैकà¥à¤Ÿ निरसà¥à¤¤ हो गया है\n" "\n" "पाठ को पहचानते समय टेसरैकà¥à¤Ÿ (OCR इंजन) निरसà¥à¤¤ हो गया है। यह तब हो सकता है जब उपयोग " "किठगठटà¥à¤°à¥‡à¤¨à¥à¤¡à¤¡à¥‡à¤Ÿà¤¾ भà¥à¤°à¤·à¥à¤Ÿ अथवा उपयोग किये टेसरैकà¥à¤Ÿ संसà¥à¤•रण से बेमेल हों, या टेसेरैकà¥à¤Ÿ में बग हो।\n" "\n" "नीचे दिठगठसà¥à¤Ÿà¥ˆà¤•टà¥à¤°à¥‡à¤¸ अतिरिकà¥à¤¤ जानकारी पà¥à¤°à¤¦à¤¾à¤¨ कर सकते हैं कि कà¥à¤°à¥ˆà¤¶ कहाठहà¥à¤†à¥¤\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "फà¥à¤²à¥ˆà¤Ÿà¤¬à¥‡à¤¡" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF फà¥à¤°à¤¨à¥à¤Ÿ" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF बैक" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF डà¥à¤ªà¥à¤²à¥‡à¤•à¥à¤¸" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "ज़ूम इन" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "ज़ूम आउट" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "सामानà¥à¤¯ आकार" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "उतà¥à¤¤à¤® फिट" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "बाà¤à¤ घà¥à¤®à¤¾à¤à¤" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "बाà¤à¤ घà¥à¤®à¤¾à¤à¤" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "दाà¤à¤ घà¥à¤®à¤¾à¤à¤" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "दाà¤à¤ घà¥à¤®à¤¾à¤à¤" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "चितà¥à¤° नियंतà¥à¤°à¤£" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "आकार-पà¥à¤°à¤•ार का अपने आप पता लगाà¤à¤" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "आउटपà¥à¤Ÿ पैन टॉगल करें" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "पीडीà¤à¤«à¤¼ में निरà¥à¤¯à¤¾à¤¤ करें" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "बैकà¤à¤‚ड:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "खड़ा" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "लैंडसà¥à¤•ेप" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "फ़ाइल में लिखने में असफल" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: छवि कमà¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ के लिये अधिक विकलà¥à¤ª पà¥à¤°à¤¦à¤¾à¤¨ " "करता है, लेकिन कोमà¥à¤ªà¥à¤²à¥‡à¤•à¥à¤¸ सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ को संभाल नहीं करता है।
  • QPrinter: छवियों के " "भंडारण के लिठकेवल JPEG कमà¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ का समरà¥à¤¥à¤¨ करता है, लेकिन कोमà¥à¤ªà¥à¤²à¥‡à¤•à¥à¤¸ सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¤¸ का समरà¥à¤¥à¤¨ " "करता है।
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "hOCR पाठ के रूप में सहेजें" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "ढूंढें तथा बदलें" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न दिखाà¤à¤" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "निमà¥à¤¨ शबà¥à¤¦à¤•ोश फ़ाइलें संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ हैं:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "हाल की कोई फाइल नहीं" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "फ़ाइलें हटाà¤à¤" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "निमà¥à¤¨ फ़ाइलों को डाउनलोड अथवा हटाया नहीं जा सका:\n" "%1\n" "\n" "कनेकà¥à¤¶à¤¨ सà¥à¤¥à¤¿à¤¤à¤¿ और डिरेकà¥à¤Ÿà¥à¤°à¥€ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤ जाà¤à¤š लें.\n" "संकेत: यदि आपके पास सिसà¥à¤Ÿà¤® फ़ोलà¥à¤¡à¤° में लिखने की अनà¥à¤®à¤¤à¤¿ नहीं है, तो सेटिंग संवाद में इसे बदल कर " "आप उपयोगकरà¥à¤¤à¤¾ पथ चà¥à¤¨ सकते हैं." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "आउटपà¥à¤Ÿ" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "ओसीआर मोड:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "फ़ोलà¥à¤¡à¤° जोड़ें" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "चिपकाà¤à¤" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ लें" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "चितà¥à¤° हटाà¤à¤" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "चितà¥à¤° मिटाà¤à¤" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "सूची साफ करें" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "लाइन बà¥à¤°à¥‡à¤• को हटाà¤à¤" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "आउटपà¥à¤Ÿ सहेजें" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "आउटपà¥à¤Ÿ साफ करें" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "फॉरà¥à¤®à¥‡à¤Ÿ:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "फ़ाइल नाम \"%1\" पहले से ही मौजूद है. कà¥à¤¯à¤¾ आप इसके ऊपर मिटाकर लिखना चाहेंगे?" #~ msgid "Overwrite File?" #~ msgstr "फ़ाइल को मिटाकर लिखें?" #~ msgid "Recent" #~ msgstr "हाल में" #~ msgid "Failed to create output" #~ msgstr "आउटपà¥à¤Ÿ बनाने में विफल रहा" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "आउटपà¥à¤Ÿ बनाने में विफल रहा. लौटाई गई तà¥à¤°à¥à¤Ÿà¤¿ थी: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हो " #~ "गया है

असà¥à¤µà¤¿à¤§à¤¾ के लिठकà¥à¤·à¤®à¤¾ चाहते हैं. इस à¤à¤ªà¥à¤²à¤¿à¤•ेशन में सà¥à¤§à¤¾à¤° के लिà¤, " #~ "समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ यहाठकरें - manisandro@gmail.com. कृपया बताà¤à¤ कि जब " #~ "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हà¥à¤† तो उस समय आप सिसà¥à¤Ÿà¤® पर कà¥à¤¯à¤¾ काम कर रहे थे. साथ ही नीचे दी गई " #~ "जानकारी भी शामिल करें. धनà¥à¤¯à¤µà¤¾à¤¦.

" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

Tesseract " #~ "à¤à¤¬à¥‹à¤°à¥à¤Ÿ हो गया है

Tesseract (ओसीआर इंजन) पाठ को पहचानने के दौरान " #~ "à¤à¤¬à¥‹à¤°à¥à¤Ÿ हो गया है । यह तब हो सकता है जब उपयोग किठगठटà¥à¤°à¥‡à¤¨à¥à¤¡à¤¡à¥‡à¤Ÿà¤¾ भà¥à¤°à¤·à¥à¤Ÿ या उपयोग " #~ "किये टेसेरेकà¥à¤Ÿ संसà¥à¤•रण से असंगत हों या टेसेरेकà¥à¤Ÿ में बग हो ।

नीचे दिठगठसà¥à¤Ÿà¥ˆà¤• टà¥à¤°à¥‡à¤¸ " #~ "इस बारे में अतिरिकà¥à¤¤ जानकारी पà¥à¤°à¤¦à¤¾à¤¨ कर सकते हैं कि कà¥à¤°à¥ˆà¤¶ कहाठहà¥à¤† ।

" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "उदाहरण: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "सादा टेकà¥à¤¸à¥à¤Ÿ" #~ msgid "Multiple sources" #~ msgstr "à¤à¤• से अधिक सà¥à¤°à¥‹à¤¤" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- पेज %1: रेंडर करने में विफल रहा" #~ msgid "The following errors occurred:%1" #~ msgstr "निमà¥à¤¨ तà¥à¤°à¥à¤Ÿà¤¿à¤¯à¤¾à¤ हà¥à¤ˆà¤‚:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "निमà¥à¤¨ फ़ाइलें मिटा दी जाà¤à¤à¤—ी:%1" #~ msgid "The application has crashed" #~ msgstr "à¤à¤ªà¥à¤²à¤¿à¤•ेशन कà¥à¤°à¥ˆà¤¶ हो गयी" gImageReader-3.4.0/po/hr.po000066400000000000000000002421701417507262200154350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-18 02:54+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR-program" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ponovi prepoznavanje jezika" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Upravljaj jezicima" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Osobne postavke" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Pomoć" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Informacije" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Zatvori program" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Popis poželjnih/nepoželjnih znakova" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "IskljuÄi prepoznavanje ovih znakova (popis nepoželjnih):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "UpiÅ¡i jedan niz znakova …" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Dozvoli prepoznavanje samo ovih znakova (popis poželjnih):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "U redu" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Položaj ploÄe rezultata:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Polegnuto" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Uspravno" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Zatraži instaliranje nedostajuÄih pravopisnih rjeÄnika" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatski traži nove verzije programa" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "PredodreÄ‘ene definicije jezika:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Dodatne definicije jezika:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Prefiks tesseract dototeke s podacima jezika" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefiks" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Oznaka jezika po ISO 639-1, nakon Äega slijedi oznaka države" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO kÈd" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Ime jezika" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Ime" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Odustani" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Font u ploÄi rezultata:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Zadan" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Mjesta podataka jezika:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Staza definicija jezika:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Staza za pravopisne rjeÄnike:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Sustavske staze" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "KorisniÄke staze" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Automatski otvori izvezene datoteke sa standarndim programom" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Ponovo generiraj praćenje" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Program se uruÅ¡io\n" "\n" "Žao nam ne. Pomogni poboljÅ¡ati program. Prijavi problem na manisandro@gmail.com. OpiÅ¡i radnje prije nego Å¡to se program uruÅ¡io. TakoÄ‘er ukljuÄi donje " "podatke. Hvala." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract je prekinuo rad\n" "\n" "Tesseract (OCR mehanizam) je prekinuo prepoznavanje teksta. To se može " "dogoditi, ako su koriÅ¡teni nauÄeni podaci oÅ¡tećeni ili nespojivi s " "koriÅ¡tenom verzijom Tesseracta ili zbog greÅ¡ke u Tesseractu.\n" "\n" "Slijedeći podaci mogu pružiti dodatne informacije o mjestu ruÅ¡enja.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Grupni HOCR izvoz" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Primijeni" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Zatvori" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Odaberi mapu izvora:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "Grupiraj rezultate najniže N-razine:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Unos:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Pregled rezultata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Datoteke unosa" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Opcije izvoza" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Uklj/Isklj ploÄu rezultata" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Okreni trenutaÄnu stranicu" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Okreni sve stranice" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Izvori" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Dodaj slike" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Dodaj slike" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Ukloni sliku iz popisa" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "IzbriÅ¡i sliku" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Isprazni popis" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Minijature" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Datoteke" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "UreÄ‘aj:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Aktualiziraj" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Rezultat:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modus:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Boja" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Sive nijanse" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Rezolucija:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skeniranje" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Izvor:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Skeniranje" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Svjetlost" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "RazluÄivost" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Invertiraj boje" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Uvećaj prikaz" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Umanji prikaz" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normalna veliÄina" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Optimalni prikaz" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Okreni stranicu" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Odaberi naÄin okretanja" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Odaberi naÄin umetanja" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Odaberi stranicu" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Upravljanje slikama" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "ObiÄan tekst" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Automatsko prepoznavanje rasporeda" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Prepoznaj sve" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Odaberi jezik" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Grupni izvoz" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "GrafiÄko suÄjelje za tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Grupni modus" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "U grupnom modusu, svaki se izvor unosa obraÄ‘uje zasebno, a rezultat se " "sprema jedan do drugog u datoteku unosa." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Postojeći rezultat:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Dodaj broj stranice ispred teksta rezultata" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Automatsko prepoznavanje rasporeda stranice" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Raspon stranica" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Raspon stranica:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Primjer: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "PodruÄje prepoznavanja:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Cijela stranica" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatsko prepoznavanje" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Dodaj ispred teksta rezultata:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Ime datoteke izvora" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Stranica izvora" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "ZaÅ¡tiÅ¡eni PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "TrenutaÄna stranica" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "ViÅ¡ebrojne stranice …" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Grupni modus …" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Dodaj rijeÄ" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "UpiÅ¡i rijeÄ:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Dodaj novi rezultat nakon zadnje stranice" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Umetni novi rezultat ispred trenutaÄne stranice" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Izvezi u obiÄan tekst" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Izvezi u PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Izvezi u ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Dodaj dokument nakon zadnje stranice" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Umetni dokumkent ispred trenutaÄne stranice" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Otvori hOCR datoteku" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Spremi rezultat" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Izvezi" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Isprazni rezultat" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "NaÄ‘i i zamijeni" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Prikaži vrijednosti pouzdanosti" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Prikaži pretprikaz" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Sljedeće (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Prethodno (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Rasklopi sve" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Sklopi sve" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Svojstva" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Izvor" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Dodaj trenutaÄnom tekstu" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Umetni na mjestu pokazivaÄa" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Zamijeni trenutaÄni tekst" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Zadrži prekide redaka, ako …" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "PoÄinje sa zavrÅ¡nim znakom (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "PoÄinje ili zavrÅ¡ava s navodnikom" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Ostale opcije" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Spoji rastavljene rijeÄi" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Sklopi razmake" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "SaÄuvaj odlomke" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Vizualna pomoć" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Iscrtaj razmake" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Otvori datoteku" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Ukloni prekide radaka u odabranom tekstu" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "PoniÅ¡ti" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Ponovi" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nova kartica" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Rezultat:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF s nevidljivim tekstualnim slojem" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Komprimiranje:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Kvaliteta komprimiranja:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritam toÄkanja:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Postavke slike:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "IzjednaÄi razmake izmeÄ‘u redaka kao i razmake izmeÄ‘u rijeÄi" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Zamijeni obitelj fontova:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Rezervna obitelj fontova:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Zamijeni veliÄinu fonta:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "VeliÄina fonta:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Zadrži razmake koji su Å¡iri od:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "znakova" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Ispravi rastavljena rijeÄi prije prekida redaka" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Postavke teksta:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "VeliÄina papira:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Å irina" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Visina" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Postupaj s izvorim slika kao da imaju pravi DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Osnovno" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF verzija:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Lozinka:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Potvrdi lozinku:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Å ifriranje (opcionalno):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Naslov:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Predmet:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Stvaratelj:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Redatelj:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "KljuÄne rijeÄi:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Dodatni podaci (opcionalno):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Uvezi iz trenutaÄnog izvora" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Napredno" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "NaÄ‘i" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Zamijeni" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Zamijeni sve" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "NaÄ‘i prethodno" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "NaÄ‘i sljedeće" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Usporedi velika/mala slova" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Zamjene" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "IzbriÅ¡i" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Redoslijed:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Prepoznaj" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Prepoznato u meÄ‘uspremnik" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Spremi kao sliku" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Otvori" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Spremi" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Isprazni" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Dodaj" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Ukloni" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Upravljanje Tess-podacima" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Upravljaj instaliranim jezicima:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "slika.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Slike" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Odaberi ime datoteke rezultata …" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Neuspjelo inicijaliziranje pozadinskog sustava skeniranja." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skeniranje neuspjelo" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nije pronaÄ‘en niti jedan skener." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Pokretanje skeniranja …" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Otvaranje ureÄ‘aja …" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Opcije postavke …" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Nabavljanje parametara …" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Prijenos podataka …" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Prekidanje skeniranja …" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefiks imena datoteke" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Oznaka" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Izvorno ime" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Pismo" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Baratanje uruÅ¡avanjem" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Tvoj rad je spremljen pod %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Nema nespremljenog rada." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Neuspjelo dobivanje praćenja. Je li GDB instaliran?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Neuspjelo uÄitavanje slike" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Datotekas možda nije slika ili je neispravna:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Stranica %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG slike" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Spremi odabrano podruÄje u slici" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "odabir.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Prepoznaj sve" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Prepoznaj odabir" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "IzvrÅ¡avanje analiziranja rasporeda" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Privremene datoteke" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Odaberi mapu …" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Nema prijedloga" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Dodaj u rjeÄnik" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Zanemari rijeÄ" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Stranica" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Tekstualni blok" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Odlomak" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Redak" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafika" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Izvoz neuspio" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Izvoz u ODT format nije uspio: datoteka rezultata se ne može zapisati." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Izvoz u ODT …" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operacija je prekinuta" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Neuspjelo iscrtavanje stranice %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Izvoz u PDF …" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Izvoz u PDF format nije uspio: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF biblioteka nije uspjela uÄitati font „%1â€." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Jednobojno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Prag (najbliža boja)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difuzno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (bez gubitka)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 ((bez gubitka))" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (s gubitkom)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Isto kao i izvor" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "PrilagoÄ‘eno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Izvoz u tekst nije uspio: datoteka rezultata se ne može zapisati." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Redak" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "RijeÄ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "PogreÅ¡no napisana rijeÄ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Prikaži vrijednosti pouzdanosti" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Nije bilo moguće obraditi sljedeće stranice:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "GreÅ¡ke prepoznavanja" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "ViÅ¡ebrojne vrijednosti" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Sjedini" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Odvoji od nadreÄ‘enog elementa" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Virtualna memorija" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Dodaj podruÄje za grafiÄki element" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Dodaj tekstualni blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Dodaj odlomak" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Dodaj redak" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Dodaj rijeÄ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML datoteke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Otvori hOCR datoteku" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Nije bilo moguće otvoriti sljedeće stranice:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Sljedeće datoteke nisu ispravne hOCR HTML datoteke:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Nije moguće otvoriti datoteke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "rezultat" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Spremi rezultat kao hOCR …" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Neuspjelo spremanje rezultata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Provjeri, imaÅ¡ li dozvole za pisanje u odabranoj mapi." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Text dokumenti" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Spremi rezultat kao ODT …" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF datoteke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Spremi rezultat kao PDF …" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Neispravan rezultat" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Nije moguće prepisati datoteku koja je izvorna slika ovog dokumenta." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Tekstualne datoteke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Spremi rezultat kao tekst …" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Rezultat nije spremljen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Spremiti rezultat prije nastavljanja?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Zamjenjivanje …" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Primjenjuju se zamjene …" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "PreÄaci tipkovnice" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Broj redaka ispred:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Broj redaka nakon:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "
TabulatorSljedeće polje
Shift+TabPrethodno polje
DoljeSljedeći redak
GorePrethodni redak
Ctrl+RazmaknicaPravopisni prijedlozi
Ctrl+EnterDodaj rijeÄ " "u rjeÄnik
Ctrl+BUklj/Isklj podebljano
Ctrl+IUklj/Isklj kurziv
Ctrl+DRastavi rijeÄ na mjestu pokazivaÄa
Ctrl+MSjedini s prethodnom rijeÄi
Ctrl+Shift+MSjedini s sljedećom rijeÄi
Ctrl+DeleteIzbriÅ¡i rijeÄ
Ctrl+{Lijevo,Desno}Prilagodi " "lijevi rub
Ctrl+Shift+{Lijevo,Desno}Prilagodi " "desni rub
Ctrl+{Gore,Dolje}Prilagodi gornji rub
Ctrl+Shift+{Gore,Dolje}Prilagodi donji rub
Ctrl++Povećaj veliÄinu fonta
Ctrl+-Smanji veliÄinu fonta
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "PreÄaci tipkovnice" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Pouzdanost: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Koristi Tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Za poÄetak odaberi sliku …" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "ViÅ¡ebrojni izvori (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Spremno" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nova inaÄica" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "Dostupan je gImageReader %1" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Preuzimanje" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Zapis promjena" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Nemoj viÅ¡e upozoravati" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Nemoj viÅ¡e prikazivati" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instaliraj" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Nedostaje pravopisni rjeÄnik" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Pravopisni rjeÄnik za %1 nije intaliran" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instaliranje pravopisnog rjeÄnika za „%1â€" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "GreÅ¡ka" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Neuspjelo instaliranje pravopisnog rjeÄnika: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Neuspjelo stvaranje mapa za pravopisne rjeÄnike." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Nije bilo moguće Äitati %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Preuzima se „%1†…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Nije bilo moguće preuzeti sljedeće rjeÄnike:\n" "%1\n" "\n" "Provjeri vezu i dozvole mape.\n" "Savjet: Ako nemaÅ¡ dozvole za pisanje u sustavskim mapama, u dijaloÅ¡kom " "okviru postavki možeÅ¡ prebaciti na korisniÄke staze." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "RjeÄnici su instalirani" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Instalirani su sljedeći rjeÄnici:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Nema pravopisnih rjeÄnika za „%1â€." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Stranica: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Zatvori dokument" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Bez naslova %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Dokument nije spremljen" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Spremiti dokument prije nastavljanja?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Uklanjanje prekida redaka …" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Bez isticanja" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Modus isticanja" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Provjeri pravopis" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "Broj zamijenjenih pojavljivanja: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Datoteka: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Stranica: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Neuspjelo prepoznavanje stranice %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Odaberi datoteke" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Spremi rezultat …" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Nespremljeni dokumenti" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "Sljedeći dokumenti imaju nespremljene promjene. Koje dokumente želiÅ¡ " "spremiti prije nego Å¡to nastaviÅ¡?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nema jezika" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "Nema Tesseract jezika. Prepoznavanje neće raditi." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "ViÅ¡ejeziÄno" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatsko segmentiranje na stranice" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentiranje na stranice s prepoznavanjem položaja i vrste pisma" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Pretpostavi jedan stupac teksta" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Pretpostavi jedan blok okomito poravnatog teksta" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Pretpostavi jedan blok teksta" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Pretpostavi jedan redak teksta" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Pretpostavi jednu rijeÄ" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Pretpostavi jednu rijeÄ u krugu" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Razbacani tekst bez odreÄ‘enog redoslijeda" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Razbacani tekst s prepoznavanjem položaja i vrste pisma" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modus automatskog segmentiranja" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Popis poželjnih/nepoželjnih znakova …" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Upravljaj jezicima …" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "PrepiÅ¡i postojeći razultat" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "PreskoÄi obraÄ‘ivanje izvora" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "TrenutaÄni odabir" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Dogodile su se greÅ¡ke tijekom prepoznavanja" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Neuspjelo inicijaliziranje Tesseracta" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Izvor je već prepoznat" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "Jedan ili viÅ¡e odabranih izvora već su prepoznati. Svejedno nastaviti?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Prepoznavanje stranice %1 (%2 od %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Stranica %1: neuspjelo iscrtavanje stranice" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Prepoznavanje …" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: neuspjelo iscrtavanje stranice" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: rezultat već postoji, preskaće se" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: neuspjela izrada datoteke rezultata" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Dogodile su se sljedeće greÅ¡ke:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skeniranje prekinuto" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Skener nije odreÄ‘en" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Neuspjelo povezivanje sa skenerom" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Neuspjelo pokretanje skenera" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "GreÅ¡ka u komunikaciji sa skenerom" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Neuspjelo spremanje slike" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operacija je prekinuta." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "UreÄ‘aj je zauzet." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Poklopac je otvoren." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Zastoj u ladici za ulaganje dokumenata." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Ladica za ulaganje dokumenata je prazna." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Pristup skeneru je odbijen." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "UpiÅ¡i lozinku za datoteku „%1â€:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF s tekstom" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF datoteka već sadrži tekst:\n" "%1\n" "Svejedno otvoriti?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Slike i PDF-ovi" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "GreÅ¡ka meÄ‘uspremnika" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Neuspjelo Äitanje meÄ‘uspremnika." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Umetnuto %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "GreÅ¡ka snimke ekrana" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Neuspjelo snimanje ekrana." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Snimka ekrana %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Spremanje slike …" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Nije moguće zapisati datoteku" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Neuspjelo zapisivanje u %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Izbrisati datoteku?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Izbrisati sljedeće datoteke?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Otvori rezultat" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "PronaÄ‘en je tekst i hOCR rezultat. Koji želiÅ¡ otvoriti?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Datoteka nedostaje" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Sljedeća datoteka je izbrisana ili premjeÅ¡tena:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Traži" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Zamijeni s" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Popis zamjena" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Otvori popis zamjena" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "GreÅ¡ka Äitanja datoteke" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Nije moguće Äitati „%1â€." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Dogodile su se greÅ¡ke tijekom Äitanja datoteke" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Neki se unosi u popisu zamjena ne mogu Äitati." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Spremi popis zamjena" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "GreÅ¡ka spremanja datoteke" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Nije moguće pisati u „%1â€." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Spremiti popis?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "ŽeliÅ¡ li spremiti trenutaÄni popis?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Za upravljanje jeziÄnim paketima Tesseracta na razini sustava, potrebno je " "uspostaviti vezu s pozadinskim programom PackageKit, ali nije pronaÄ‘en. Ovu " "uslugu obiÄno pruža program za upravljanje softverom kao Å¡to je Gnome " "Software. Instaliraj softver koji pruža potrebno PackageKit suÄelje. Koristi " "drugi softver za upravljanje sustavskim paketima za izravno upravljanje " "tesseract paketima jezika ili koristi korisniÄku stazu za tess-podatke u " "dijaloÅ¡kom okviru konfiguriracije." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Dohvaćanje dostupnih jezika" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Neuspjelo dohvaćanje dostupnih jezika: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "GreÅ¡ka obrade: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Primjenjuju se promjene …" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Neuspjelo stvaranje mape za datoteke tess-podataka." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Preuzima se %1 …" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Nije bilo moguće preuzeti niti ukloniti sljedeće datoteke:\n" "%1\n" "\n" "Provjeri vezu i dozvole mape.\n" "\n" "Savjet: Ako nemaÅ¡ dozvole za pisanje u sustavskim mapama, u dijaloÅ¡kom " "okviru postavki možeÅ¡ prebaciti na korisniÄke staze." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Da" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Da za sve" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ne" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Ne za sve" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Odbaci" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Odbaci sve" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Tekst" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Informacije o gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

GrafiÄko suÄelje za tesseract-ocr

web-stranicu

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Zasluge" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licenca" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "U grupnom modusu, svaki se izvor unosa obrađuje zasebno, a rezultat se " "sprema jedan do drugog u datoteku unosa." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Kodiranje sustava" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Kodiranje tekstualne datoteke:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "

Program se urušio

Žao nam ne. Pomogni poboljÅ¡ati program. Prijavi problem na manisandro@gmail.com. OpiÅ¡i radnje prije " "nego Å¡to se program uruÅ¡io. TakoÄ‘er ukljuÄi donje podatke. Hvala.

" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" "

Tesseract je " "prekinuo rad

Tesseract (OCR mehanizam) je prekinuo " "prepoznavanje teksta. To se može dogoditi, ako su koriÅ¡teni nauÄeni podaci " "oÅ¡tećeni ili nespojivi s koriÅ¡tenom verzijom Tesseracta ili zbog greÅ¡ke u " "Tesseractu.

Slijedeći donji podaci mogu pružiti dodatne informacije o " "mjestu rušenja.

" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Flatbed" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF prednja strana" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF stražnja strana" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF dupleks" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Uvećaj prikaz" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Umanji prikaz" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normalna veliÄina" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Optimalni prikaz" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Okreni lijevo" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Okreni lijevo" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Okreni desno" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Okreni desno" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Upravljanje slikama" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Automatsko prepoznavanje rasporeda" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Uklj/Isklj ploÄu rezultata" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF izvoz" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Pozadinski sustav:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Uspravno" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Polegnuto" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Neuspjelo pisanje u datoteku" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: nudi viÅ¡e opcija za komprimiranje slika, " "ali ne obraÄ‘uje složene skripte.
  • QPrinter: podržava samo JPEG " "kompresiju za spremanje slika, ali podržava složene skripte.
" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Spremi kao hOCR tekst" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "NaÄ‘i i zamijeni" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Prikaži Äarobnjaka za lektoriranje" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Instalirani su sljedeće datoteke rjeÄnika:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Nema nedavnih datoteka" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "IzbriÅ¡i datoteke" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Nije bilo moguće preuzeti niti ukloniti sljedeće datoteke:\n" "%1\n" "\n" "Provjeri vezu i dozvole mape.\n" "Savjet: Ako nemaÅ¡ dozvole za pisanje u sustavskim mapama, u dijaloÅ¡kom " "okviru postavki možeÅ¡ prebaciti na korisniÄke staze." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Rezultat" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR-modus:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Dodaj mapu" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Umetni" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Uslikaj ekran" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Ukloni sliku" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "IzbriÅ¡i sliku" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Isprazni popis" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Ukloni prekide radaka" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Spremi rezultat" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Isprazni rezultat" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Dodaj karticu" #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #~ msgid "Form" #~ msgstr "Oblik" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Broj zamijenjenih pojavljivanja: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Datoteka „%s“ već postoji. Stvarno je želiÅ¡ prepisati?" #~ msgid "Overwrite File?" #~ msgstr "Prepisati datoteku?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Postoji %1 dokumenata s nespremljenim promjenama" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Spremiti promjene prije zatvaranja? Ako ne spremiÅ¡, sve promjene će se " #~ "trajno izgubiti.\n" #~ "Odaberi dokumente koje želiÅ¡ spremiti:" #~ msgid "New document %1" #~ msgstr "Novi dokument %1" #~ msgid "Recent" #~ msgstr "Nedavne" #~ msgid "Failed to create output" #~ msgstr "Neuspjela izrada rezultata" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Neuspjela izrada rezultata. GreÅ¡ka: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Program je prekinuo raditi</span></p><" #~ "p>IspriÄavamo se zbog neugodnosti. Za poboljÅ¡avanje programa, prijavi " #~ "problem na <a href="mailto:manisandro@gmail.com?" #~ "subject=gImageReader%20Crash">manisandro@gmail.com</a>. " #~ "OpiÅ¡i radnju prije prekida rada programa. TakoÄ‘er, dolje ukljuÄi " #~ "informacije. Hvala!</p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract je prekinuo raditi</span></p>" #~ "<p>Tesseract (OCR ureÄ‘aj) je prekinuo rad tijekom prepoznavanja " #~ "teksta. To se može dogoditi ako su koriÅ¡teni nauÄeni podaci oÅ¡tećeni ili " #~ "nekompatibilni s koriÅ¡tenom verzijom Tesseracta ili zbog greÅ¡ke u " #~ "Tesseractu.</p><p>Donji podaci mogu pružiti dodatne " #~ "informacije o tome gdje se dogodio prekid programa.</p></body>" #~ "</html>" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Primjer:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "ObiÄan tekst" #~ msgid "Multiple sources" #~ msgstr "ViÅ¡ebrojni izvori" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Stranica %1: neuspjelo iscrtavanje stranice" #~ msgid "The following errors occurred:%1" #~ msgstr "Dogodile su se sljedeće greÅ¡ke: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Izbrisat će se sljedeće datoteke: %1" gImageReader-3.4.0/po/hu.po000066400000000000000000002025261417507262200154410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-02-08 07:50+0000\n" "Last-Translator: Gábor, Sándor \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR alkalmazás" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Nyelvek újraellenÅ‘rzése" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Nyelvek kezelése" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Beállítások" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Súgó" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Névjegy" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Kilépés" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Vízszintes" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "FüggÅ‘leges" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Új verziók automatikus ellenÅ‘rzése" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ElÅ‘re definiált nyelvi definíciók:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "További nyelvi definíciók:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "A tesseract nyelvi adatfájl elÅ‘tagja" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ElÅ‘tag" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Az ISO 639-1 nyelvi kód után az ország kódja" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO Kód" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "A nyelv neve" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Név" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Mégsem" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Kimeneti tábla betűtípusa:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Alapértelmezett" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Nyelvi adatok elérhetÅ‘sége:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Nyelv-definíciók útvonala:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Helyesírási szótárak útvonala:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Rendszerszintű útvonalak" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Felhasználói útvonalak" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" "Exportált dokumentumok automatikus megnyitása az alapértelmezett " "alkalmazással" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Az alkalmazás összeomlott\n" "\n" "Elnézést a kényelmetlenségért. Az alkalmazás fejlesztésének segítéséhez " "légyszíves jelezd a problémát a manisandro@gmail.com email címre. Kérlek, " "hogy próbáld meg leírni, hogy melyik lépésnél történt a probléma. Kérlek, " "hogy csatold a lenti információt is.\n" "Köszönöm." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Kimeneti tábla betűtípusa:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" "Az alkalmazás összeomlott\n" "\n" "Elnézést a kényelmetlenségért. Az alkalmazás fejlesztésének segítéséhez " "légyszíves jelezd a problémát a manisandro@gmail.com email címre. Kérlek, " "hogy próbáld meg leírni, hogy melyik lépésnél történt a probléma. Kérlek, " "hogy csatold a lenti információt is.\n" "Köszönöm." #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "Az alkalmazás összeomlott\n" #~ "\n" #~ "Elnézést a kényelmetlenségért. Az alkalmazás fejlesztésének segítéséhez " #~ "légyszíves jelezd a problémát a manisandro@gmail.com email címre. " #~ "Kérlek, hogy próbáld meg leírni, hogy melyik lépésnél történt a probléma. " #~ "Kérlek, hogy csatold a lenti információt is.\n" #~ "Köszönöm." gImageReader-3.4.0/po/ia.po000066400000000000000000002063521417507262200154170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-07-25 07:42+0000\n" "Last-Translator: OIS \n" "Language-Team: Interlingua \n" "Language: ia\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Application de OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Redeteger le linguas" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gerer le linguas" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferentias" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Adjuta" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "A proposito" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Quitar" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Le definitiones lingual predefinite:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Le additional definitiones lingual:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefixo" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Codice ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Le nomine del lingua" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nomine" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Cancellar" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Typo de characteres del output:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Predefinite" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Applicar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Clauder" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Seliger un plica..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formato:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Output:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Modo de output:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Altere optiones" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Rotar le pagina actual" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rotar tote le paginas" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Fontes" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Adder imagines" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Adder imagines" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Deler le imagine" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Rader le lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturas" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Files" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Dispositivo:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Refrescar" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Output:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modo:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Color" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Scala de gris" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolution:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Fonte:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Acquirer" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Brillantia" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contrasto" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolution" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverter le colores" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Ampliar" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Reducer" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Dimension normal" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Dimension optime" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Rotar le pagina" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Eliger le modo de rotation" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Eliger le modo de insertion" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Seliger le pagina" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controlos de imagine" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Texto simple" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Recognoscer toto" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Seliger un lingua" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Exportar" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modo de lotes" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Intervallo de paginas" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervallo de paginas:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Exemplo: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Area de recognition:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Integre pagina" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Prepender al texto de output:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nomine del file fontal" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Pagina fontal" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protegite" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Pagina actual" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Plure paginas..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modo de lotes..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Adder un parola" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportar a un texto simple" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportar a PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportar a ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Aperir un file de hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Salvar le output" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Rader le output" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Trovar e reimplaciar" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Monstrar le valores de confidentie" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Monstrar le previsualisation" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Sequente (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Previe (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expander le tote" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Contraher le tote" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Proprietates" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Fonte" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Appender al texto actual" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Inserer al position del cursor" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Replaciar le texto actual" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Altere optiones" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Preservar paragraphos" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Adjutas visual" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Monstrar le spatio blanc" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Aperir un file de hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Disfacer" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refacer" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modo de output:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compression:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualitate de compression:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algorithmo de dithering:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "characteres" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Dimension de papiro:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Largessa" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altessa" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Basic" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Version de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Contrasigno:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmar le contrasigno:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titulo:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Subjecto:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Creator:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Productor:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Parolas clave:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avantiate" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Trovar" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Reimplaciar" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Reimplaciar toto" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Substitutiones" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Deler" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordine:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Recognoscer" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Recognoscer al area de transferentia" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Aperir" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Salvar" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Nettar" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Adder" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Remover" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gerente de Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Imagines" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Apertura del dispositivo..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Codice" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nomine native" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Graphia" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Pagina %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Imagines PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Recognoscer toto" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Recognoscer le selection" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Seliger un plica..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Nulle suggestiones" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Adder al dictionario" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorar le parola" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Pagina" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloco de texto" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragrapho" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Linea de texto" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Graphic" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Fallite exportation" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exportante a ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exportante a PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Fallite exportation a PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monochrome" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Limine (le color proxime)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffusion" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Proprie" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloco" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Parola" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Monstrar le valores de confidentie" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Errores de recognition" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Valores multiple" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Funder" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Intercambiar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Adder un region graphic" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Adder un bloco de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Adder un paragrapho" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Adder un linea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Adder un parola" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Aperir un file de hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Incapace a aperir files" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "output" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documentos de texto OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Salvar le output ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Files PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Salvar le output PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Output incorrecte" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Files de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Salvar le texto del output..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Claves acceleratori" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Vias breve del claviero" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confidentia: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Usante tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Preste" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nove version" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 es disponibile" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Discargar" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Registro del cambios" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Non monstrar plus" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installar" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Error" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Discargante «%1»..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dictionarios installate" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Pagina: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Collation %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Controlar le orthographia" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "File: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Pagina: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Fallite a recognoscer le pagina %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Seliger files" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Salvar le output..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Nulle linguas de tesseract es disponibile. Recognition non functionara." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Multilingual" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gerer le linguas..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Selection actual" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Recognition..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Scannator non specificate" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Impossibile de connecter al scannator" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Dispositivo es occupate." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Le coperculo es aperte." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Le contrasigno pro file «%1»:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF con texto" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Imagines e PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Falta a leger le area de transferentia." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Collation %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Instantanea %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Salvante le imagine..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Deler le file?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Deler le files sequente?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Aperir le output" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Error al analysar: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Application del cambios..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Discargante %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Si" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Si a omne" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "No" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Discarta" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Discarta" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Texto" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "A proposito de gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Creditos" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licentia" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codification del systema" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codification del texto:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Dimension normal" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Dimension optime" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controlos de imagine" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Exportar a PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Back-end:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Vertical" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Horizontal" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Trovar e reimplaciar" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Monstrar le previsualisation" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Deler le files" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Output" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modo de OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Adder un plica" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Collar" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Prender un instantanea de schermo" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Remover le imagine" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Deler le imagine" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Rader le lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Formato:" #~ msgid "Recent" #~ msgstr "Recente" #~ msgid "Failed to create output" #~ msgstr "Fallite a crear le output" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Exemplo: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Texto simple" #~ msgid "Multiple sources" #~ msgstr "Plure fontes" gImageReader-3.4.0/po/ie.po000066400000000000000000002227631417507262200154270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-07-22 11:19+0000\n" "Last-Translator: OIS \n" "Language-Team: Occidental \n" "Language: ie\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Application OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Redetecter lingues" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Redacter li lingues" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferenties" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Auxilie" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Pri" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Salir" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Listes de caracteres" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Ne reconosser li sequent caracteres:" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Reconosser solmen li sequent caracteres:" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Proposir installar mancant ortografic dictionariums" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automaticmen controlar nov versiones del programma" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Predefinit definitiones de lingues:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Extra definitiones de lingues:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Li prefix del file de data de tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefix" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Li code ISO 639-1 de lingue e li code de lande" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Code ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Li nómine del lingue" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nómine" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Anullar" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Fonde del production:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Predefinit" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Localisation del data de lingues:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Fólder de definitiones de lingues:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Fólder de ortografic dictionariums:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Rutes del sistema" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Rutes de usator" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Automaticmen aperter li exportat documentes" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Applicar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Clúder" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Selecter un fólder..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formate:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Production:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Mode de production:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Null recent files" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Altri optiones" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Panel de production" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Rotar li actual págine" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rotar omni págines" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Orígines" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Adjunter images" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Adjunter images" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Remover li image ex li liste" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Remover li image" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Vacuar li liste" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturas" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Files" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Aparate:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Refriscar" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Production:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Mode:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Color" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Gris" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolution:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Scannar" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Orígine:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Aquisiter" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Luciditá" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contraste" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolution" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverter colores" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Agrandar" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Diminuer" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normal dimension" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Adjustar dimension" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Rotar li págine" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Mode de rotation" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Mode de insertion" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Selecter un págine" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controles de image" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Simplic textu" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Auto-detecter li arangeament" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Reconosser omni" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Selecter un lingue" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Exportar" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Un grafical interfacie por tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Mode de serie" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Existent resultates:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Prepender li numerós de págine al textu" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Auto-detecter li arangeament de págine" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Diapason de págines" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Diapason de págines:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Exemple: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Area de reconosser:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Li tot págine" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Detecter automaticmen" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Prepender al textu:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Fil-nómine original" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Págine oríginal" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Protectet PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Págine actual" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Multiplic págines..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Mode de serie..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Adjunter un parol" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Parol:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Appender pos li ultim págine" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Inserter ante li actual págine" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportar quam simplic textu" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportar a PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportar a ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Appender li document pos li ultim págine" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Inserter li document ante li actual págine" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Aperter un file hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Gardar li resultates" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Vacuar li production" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Trovar e substituer" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Monstrar valores de confidentie" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Previder" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Sequent (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Precedent (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expander omni" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Contraer omni" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Proprietás" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Orígine" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Apender al actual textu" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Inserter in li position del cursore" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Remplazzar li actual textu" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Ne unir lineas si..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Pos un final punctuation (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Apu un signe de citation" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Altri optiones" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Unir separat paroles" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Reducter spacies" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Preservar paragrafes" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Visual assistentie" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Monstrar spacies" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Aperter un file hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Unir ruptet lineas in li selectet textu" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Defar" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refar" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Mode de production:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF con ínvisibil strate de textu" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compression:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualitá de compression:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritme:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Parametres de image:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Unificar li interspacie de lineas e paroles" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Assignar li fonde:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Dimension del fonde:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Scale de fondes:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Conservar spacies, plu quam:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "caracteres" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Parametres de textu:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Dim. de papere:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Largore" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altore" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Basic" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Version de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Contrasigne:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmar li contrasigne:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Ciffration (facultativ):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titul:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Tema:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Creator:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Productor:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Clav-paroles:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Extra information (facultativ):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avansat" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Trovar" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Substituer" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Substituer omni" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Trovar precedent" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Trovar sequent" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Correspondentie exact" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Substitutiones" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Deleter" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Órdine:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Reconosser" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Reconosser al Paperiere" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Gardar quam un image" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Aperter" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Salvar" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Vacuar" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Adjunter" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Remover" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gerente de Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gerer li installat lingues:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Images" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Ne successat inicialisar li infrastructura de scannation." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Scannation ne successat" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Null scannatores detectet." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Iniciante li scannation..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Apertente li aparate..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Obtenente parametres..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transfertente li data..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Anullante li scannation..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefix de fil-nómine" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Code" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nativ nómine" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Scripte" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Ne successat cargar li image" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Li file possibilmen ne es un image o es corupt:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Págine %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Images PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Reconosser omni" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Reconosser li selection" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Analisante li arangeament de págine" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Selecter un fólder..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Null suggestiones" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Adjunter al dictionarium" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorar li parol" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Págine" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloc de textu" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragraf" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Linea de textu" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Pictura" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Export ne successat" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Li exportation ODT ne successat: ne posse scrir a un file." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exportante a ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Li operation esset anullat" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exportante a PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Li exportation a PDF ne successat: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Li biblioteca PDF ne successat cargar li fonde «%1»." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monocrom" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Límite (li proxim color)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difusion" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Sam quam li orígine" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personalisat" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Li exportation de textu ne successat: ne posse scrir a un file." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloc" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Parol" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Parol misespelat" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Monstrar valores de confidentie" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Li sequent págines ne posse esser processat:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Errores de recognition" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Multiplic valores" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Unir" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Separar del genitor" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Intercambiar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Adjunter un zone de image" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Adjunter un bloc de textu" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Adjunter un paragraf" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Adjunter un linea" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Adjunter un parol" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Files HTML hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Aperter un file hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Li sequent files ne posset esser apertet:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Li sequent lineas ne es un valid HTML hOCR:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Ne successat aperter files" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "production" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Gardar li hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Ne successat gardar li resultates" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documentes textual OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Gardar li resultate ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Files PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Gardar li resultate quam PDF…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Files textual" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Gardar li textu…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Gardar li resultates ante que iniciar?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Substitution..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Applicante substitutiones..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Rapid-tastes" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Lineas ante:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Lineas pos:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
TabNext field
Shift+TabPrevious field
DownNext line
UpPrevious line
Ctrl+SpaceSpelling suggestions
Ctrl+EnterAdd word to " "dictionary
Ctrl+BToggle bold
Ctrl+IToggle italic
Ctrl+DDivide word at cursor position
Ctrl+MMerge " "with previous word
Ctrl+Shift+MMerge with next " "word
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" msgstr "" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "
TabSequent camp
Shift+TabPrecedent camp
A-bassSequent linea
Ad-upPrecedent linea
Ctrl+SpacieSuggestiones
Ctrl+EnterAdjunter al dictionarium
Ctrl+BGrass
Ctrl+IItalic
Ctrl+DPartir li parole in li position del cursore
Ctrl+MUnir con li precedent parol
Ctrl+Shift+MUnir con li sequent parol
Ctrl+DeleteDelete word
Ctrl+{Left,Right}Adjust left bounding box edge
Ctrl+Shift+{Left,Right}Adjust right bounding box edge
Ctrl+{Up,Down}Adjust top bounding box edge
Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
Ctrl++Increase font size
Ctrl+-Decrease font size
" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Rapid-tastes" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confidentie: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Usante tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Selecte un image por comensar..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Multiplic orígines (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Finit" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nov version" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 es disponibil" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Descargar" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Diarium de modification" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ne informar denov" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ne monstrar denov" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installar" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Ortografic dictionarium mancant" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Li dictionarium ortografic por %1 ne es installat" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Installante un dictionarium ortografic por «%1»" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Errore" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Ne successat installar un dictionarium ortografic: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ne successat crear un fólder por dictionariums ortografic." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Ne successat leer %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Descargante «%1»..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dictionariums installat" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Li sequent dictionariums esset installat:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Null ortografic dictionariums trovat por «%1»." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Págine: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Collat %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Li alimentator serrat se." #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Gardar li resultates ante que iniciar?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Correctente ruptet lineas..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Controlar ortografie" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "File: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Págine: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Ne successat reconosser págine %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Selecter files" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Gardar li resultate…" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Null lingues es disponibil" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Null lingues de tesseract es disponibil. Li reconossentie ne va functionar." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Multilingual" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatic segmentation de págine" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentation con detection del orientation e li scritura" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Suposir un singul columne" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Suposir ún linea de textu" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Suposir un singul parol" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Suposir un singul circulformi parol" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Mode de segmentation de págine" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Listes de caracteres..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gerer lingues..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Substituer li existent resultates" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Omisser li orígine" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Actual selection" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Errores de reconossentie evenit" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Ne successat inicialisar tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Reconossente págine %1 (%2 de %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Reconossente..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: resultate ja existe, omisse" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: ne successat crear li file de production" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Li sequent errores evenit:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Scannation anullat" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Null scannator selectet" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ne successat iniciar li scannation" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Ne successat gardar un image" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operation anullat." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Aparate es ocupat." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Covriment es apertet." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Li alimentator serrat se." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Li alimentator es vacui." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Provide li contrasigne por li file «%1»:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF con textu" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Li file PDF ja contene textu:\n" "%1\n" "Aperter it sin egard?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Images e PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Errore del Paperiere" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Ne successat leer li Paperiere." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Collat %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Errore del captura" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Ne successat capturar li ecran." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Captura %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Gardande un image..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ne successat scrir a un file" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Ne successat scrir a %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Deleter li file?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Deleter li sequent files?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Aperter li resultates" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "File mancant" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Li sequent file esset removet o movet:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Serchar por" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Substituer per" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Liste de substitutiones" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Aperter li substitutiones" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Un errore evenit leente un file" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Ne successat leer «%1»." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Errores de evenit leente un file" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Gardar li liste de substitutiones" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Un errore evenit gardante li file" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Ne successat scrir a «%1»." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Gardar li liste?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Esque vu vole gardar li actual liste?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Obtenente disponibil lingues" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Ne successat obtener li liste de disponibil lingues: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Errore de analise: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Applicante modificationes..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ne successat crear un fólder por files de tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Descargante %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Yes" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Yes por omni" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "No" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "No por omni" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Rejecter" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Rejecter" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Textu" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Pri gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

 

A graphical frontend to tesseract-ocr

Website

 

" msgstr "" "

 

Un grafical interfacie por tesseract-ocr

Website

 

" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Aconossenties" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licentie" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codification del sistema" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codification del file:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

The application has " "crashed

Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

" msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

Tesseract has " "aborted

Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

The stacktrace below may provide additional information " "about where the crash occurred.

" msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Plat-panel" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Frontal alimentator" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Posteriori alimentator" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Duplex alimentator" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Agrandar" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Diminuer" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normal dimension" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Adjustar dimension" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rotar a levul" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rotar a levul" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rotar a dextri" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rotar a dextri" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controles de image" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Auto-detecter li arangeament" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Panel de production" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Export de PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Infrastructura:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Portrete" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Paisage" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Ne successat scrir a un file" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
  • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
  • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
" msgstr "" "
  • PoDoFo: oferta plu optiones de compression de " "images, ma ne supporte li complex scrituras.
  • QPrinter: supporte " "solmen compression JPEG por images, ma supporte li complex scrituras.
  • " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Gardar quam hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Serchar e substituer" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Previder" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Li sequent dictionarium esset installat:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Null recent files" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Deleter files" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Production" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Mode de OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Adjunter un fólder" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Collar" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Capturar li ecran" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Remover li image" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Remover li image" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Vacuar li liste" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Unir ruptet lineas" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Gardar li resultate" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Vacuar li resultate" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Formate:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Un file «%1» ja existe. Esque vu vole substituer it?" #~ msgid "Overwrite File?" #~ msgstr "Substituer li existent file?" #~ msgid "Recent" #~ msgstr "Recent" #~ msgid "Failed to create output" #~ msgstr "Ne successat crear li production" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Exemple: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Simplic textu" #~ msgid "Multiple sources" #~ msgstr "Multiplic orígines" #~ msgid "The following errors occurred:%1" #~ msgstr "Li sequent errores evenit:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Li sequent files va esser removet:%1" gImageReader-3.4.0/po/it.po000066400000000000000000002525621417507262200154460ustar00rootroot00000000000000# Italian translations for gImageReader package # Italian messages for gImageReader. # Copyright (C) 2010-2016 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Sandro Mani , 2010-2011, 2013, 2014, 2015, 2016, 2017, 2022. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-24 23:19+0100\n" "Last-Translator: Sandro Mani \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Lokalize 21.12.1\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Applicazione OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ri-rileva lingue" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gestione lingue" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferenze" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Aiuto" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Info" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Termina" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Blacklist / whitelist di caratteri" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Escludere questi caratteri dal OCR (blacklist):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Inserire una stringa di caratteri..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Permettere solo i seguenti caratteri per l'OCR (whitelist):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientamento riquadro output:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Orizzontale" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Verticale" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Chiedi di installare dizionari ortografici mancanti" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Verifica la disponibilità di nuove versioni" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Definizioni di lingua predefinite:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Ulteriori definizioni di lingue:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Il prefisso dei file lingua tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefisso" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Il codice lingua ISO 639-1, seguito dal codice del paese" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Codice ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Il nome della lingua" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nome" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Interrompi" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Carattere per riquadro output:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Predefinito" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Percorsi dati di lingua:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Percorso definizioni di lingua:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Percorso dizionari ortografici:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Percorsi di sistema" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Percorsi utente" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Apri i documenti esportati con l'applicazione predefinita" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Rigenera backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
    manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "L'applicazione ha smesso di funzionare\n" "\n" "Per aiutare a migliorare l'applicazione, per favore segnalare il problema a " "manisandro@gmail.com, se possibile " "descrivendo cosa si stava facendo prima che l'applicazione smettesse di " "funzionare, e includendo l'informazione sottostante. Grazie." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract si è arrestato\n" "\n" "Tesseract (la libreria OCR) si è arrestato durante la ricognizione del " "testo. Questo può succedere se i file traineddata sono corrotti oppure " "incompatibilit con la versione di tesseract in uso, oppure a causa di un " "errore in tesseract.\n" "\n" "Il stacktrace sotto potrebbe fornire ulteriori informazioni concernenti la " "causa dell'errore.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Esportazione batch HOCR" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Applica" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Chiudi" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Seleziona cartella d'entrata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formato:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "Raggruppa i N livelli più bassi:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Entrata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Anteprima uscita:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "File d'entrata" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Opzioni d'esportazione" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Mostra/nascondi riquadro output" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Ruota pagina corrente" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Ruota tutte le pagine" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Sorgenti" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Aggiungi immagini" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Aggiungi immagini" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Rimuovi immagine dalla lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Elimina immagine" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Svuota lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Anteprima" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "File" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Dispositivo:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Aggiorna" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Output:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modalità:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Colore" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Scala di grigi" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Risoluzione:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Scansione" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Fonte:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Acquisci" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Luminosità" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contrasto" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Risoluzione" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverti colori" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Ingrandisci" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Rimpicciolisci" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Dimensioni normali" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Dimensioni ideali" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Ruota pagina" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Seleziona modalità di rotazione" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Seleziona modalità di inserimento" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Seleziona pagina" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controlli immagine" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Testo" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Rileva impaginazione" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Riconosci tutto" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Seleziona lingua" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Esportazione batch" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Un'interfaccia grafica per tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modalità batch" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Nella modalità batch, le sorgenti sono processate separatamente e " "l'output salvato accanto ai file di sorgente." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Output esistente:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Anteporre i numeri di pagina al testo di output" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Rileva impaginazione" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Intervallo pagine" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervallo pagine:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Esempio: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Area di ricognizione:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Pagina intera" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Rileva automaticamente" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Anteporre al testo di output:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nome del file di origine" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Pagina di origine" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protetto" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Pagina corrente" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Più pagine..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modalità batch..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Aggiungi parola" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Aggiungi parola:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Aggiungi output dopo l'ultima pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Inserisci output prima della pagina corrente" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Esporta come testo" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Esporta come PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Esporta come ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Aggiungi documento dopo l'ultima pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Inserisci documento prima della pagina corrente" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Apri file hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Salva output" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Esporta" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Cancella output" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Cerca e sostituisci" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Mostra valori di confidenza" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Mostra anteprima" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Successivo (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Precedente (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Espandi" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Contrai" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Proprietà" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Fonte" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Appendi al testo esistente" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Inserisci al cursore" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Sostituisci testo esistente" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Tenere interruzioni di linea se..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Preceduto da punteggiatura di fine periodo (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Preceduto o seguito da virgolette" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Altre opzioni" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Unisci parole divise" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Collassa spazi bianchi" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Preserva paragrafi" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Aiuti visuali" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Disegna spazi bianchi" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Apri file" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Rimuovi interruzioni di riga nel testo selezionato" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Annulla" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Ripeti" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nuovo tab" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modalità:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF con testo invisibile" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compressione:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualità di compressione:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritmo di dithering:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Impostazioni immagini:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Omogenizza la spaziatura" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Usa sempre il seguente carattere:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Carattere di fallback:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Usa sempre la seguente dimensione carattere:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Ridimensiona carattere:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Preserva spazi più larghi di:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "caratteri" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Correggere i trattini prima delle interruzioni di riga" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Impostazioni testo:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Dimensione pagina:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Larghezza" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altezza" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Assumere che le sorgenti immagini abbiano DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Base" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Versione PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Password:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Conferma password:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Protezione (opzionale):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autore:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titolo:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Soggetto:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Creatore:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produttore:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Parole chiave:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Ulteriori informazioni (opzionale):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importa dalla sorgente corrente" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avanzato" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Cerca" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Sostituisci" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Sostituire tutte" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Cerca precedente" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Cerca successivo" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Considera maiuscole e minuscole" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Sostituzioni" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Elimina" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordine:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Riconosci" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Riconosci negli appunti" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Salva come immagine" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Apri" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Salva" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Svuota lista" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Aggiungi" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Rimuovi" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gestione tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gestione delle lingue installate:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scansione.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Immagini" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Scegli nome file di output..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Inizializzazione backend di scansione fallita." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Scansione fallita" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nessun scanner è stato rilevato." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Inizializzando scansione..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Aprendo dispositivo..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Settando impostazioni..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Leggendo parametri..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Trasferendo dati..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Interrompendo scansione..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefisso nome file" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Codice" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nome nativo" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Carattere" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Crash Handler" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Il lavoro è stato salvato sotto %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Non vi è lavoro non salvato." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Impossibile ottenere un backtrace. È installato gdb?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Caricamento immagine fallito" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Il file non è un'immagine oppure è corrotto:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Pagina %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Immagini PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Salva immagine selezionata" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selezione.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Riconosci tutto" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Riconosci selezione" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Rilevando impaginazione" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "File temporanei" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Seleziona cartella..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Nessun suggerimento" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Aggiungi al dizionario" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignora parola" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Pagina" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Blocco di testo" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragrafo" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Riga" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafica" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Esportazione fallita" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "L'esportazione ODT è fallita: impossibile scrivere il file di output." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Esportando come ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "L'operazione è stata annullata" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Errore renderizzando la pagina %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Esportando come PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "L'esportazione come PDF è fallita: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "La libreria PDF non supporta il carattere '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monocromatico" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Threshold (colore più vicino)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffusione" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (lossless)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (lossless)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (lossy)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Uguale alla sorgente" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personalizzata" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "L'esportazione è fallita: impossibile scrivere il file di output." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blocco" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Riga" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Parola" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Errori ortografici" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "Parola con basso valore di confidenza" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Non è stato possibile processare le seguenti pagine:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Errori di ricognizione" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Valori multipli" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Unisci" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Separa dal gruppo" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Scambia" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Aggiungi regione grafica" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Aggiungi blocco di testo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Aggiungi paragrafo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Aggiungi riga" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Aggiungi parola" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "File HTML hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Apri file hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Non è stato possibile aprire i seguenti file:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "I seguenti file non contengono HTML hOCR valido:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Impossibile aprire file" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "output" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Salva output hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Impossibile salvare output" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" "Verificare che l'utente abbia permessi di scrittura nella cartella " "selezionata." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documenti di testo OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Salva output ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "File PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Salva output PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Output invalido" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Impossibile sovrascrivere un file che è una sorgente del documento corrente." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "File di testo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Salva output come testo..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Output non salvato" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Salvare output prima di continuare?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Sostituendo..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Applicando sostituzioni..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Tasti di scelta rapida" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Righe precedenti:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Righe successive:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
    TabNext field
    Shift+TabPrevious field
    DownNext line
    UpPrevious line
    Ctrl+SpaceSpelling suggestions
    Ctrl+EnterAdd word to " "dictionary
    Ctrl+BToggle bold
    Ctrl+IToggle italic
    Ctrl+DDivide word at cursor position
    Ctrl+MMerge " "with previous word
    Ctrl+Shift+MMerge with next " "word
    Ctrl+DeleteDelete word
    Ctrl+{Left,Right}Adjust left bounding box edge
    Ctrl+Shift+{Left,Right}Adjust right bounding box edge
    Ctrl+{Up,Down}Adjust top bounding box edge
    Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
    Ctrl++Increase font size
    Ctrl+-Decrease font size
    " msgstr "" "
    TabCampo successivo
    Shift+TabCampo precedente
    GiùRiga successiva
    SuRiga precedente
    Ctrl+SpazioSuggerimenti ortografici
    Ctrl+EnterAggiungi " "al dizionario
    Ctrl+BGrassetto
    Ctrl+ICorsivo
    Ctrl+DDividi " "parola alla posizione del cursore
    Ctrl+MUnisci con " "parola precedente
    Ctrl+Shift+MUnisci con parola " "successiva
    Ctrl+DeleteElimina parola
    Ctrl+{Sinistra,Destra}Modifica bordo sinistro della " "bounding box
    Ctrl+Shift+{Sinistra,Destra}Modifica " "bordo destro della bounding box
    Ctrl+{Su,Giù}Modifica bordo superiore della bounding box
    Ctrl+Shift+{Su,Giù}Modifica bordo inferiore della " "bounding box
    Ctrl++Incrementa dimensione " "carattere
    Ctrl+-Riduci dimensione carattere
    " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Tasti di scelta rapida" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confidenza: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Utilizzando tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Seleziona un'immagine per iniziare..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Più fonti (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Pronto" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nuova versione" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 è disponibile" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Scarica" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Novità" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Non notificare nuovamente" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Non mostrare nuovamente" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installa" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Dizionario ortografico mancante" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Il dizionario ortografico per %1 non è installato" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Installando il dizionario ortografico per '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Errore" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Installazione del dizionario ortografico fallita: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Creazione cartella per dizionari ortografici fallita." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Impossibile leggere %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Scaricando '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Impossibile scaricare i seguenti dizionari:\n" "%1\n" "\n" "Verificare la connessione e i permessi di scrittura.\n" "Aiuto: Se non si ha accesso di scrittura nelle cartelle di sistema, " "scegliere di utilizzare cartelle del profilo dell'utente nel dialogo delle " "impostazioni." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dizionari ortografici installati" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "I seguenti dizionari sono stati installati:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Nessun dizionario ortografico trovato per '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Pagina: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Chiudi documento" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Senza nome %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Documento non salvato" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Salvare il documento prima di continuare?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Rimuovendo interruzioni di riga..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Nessun highlight" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Modalità highlight" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Controllo ortografico" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "%1 occorrenze sostituite" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "File: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Pagina: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Ricognizione della pagina %1 fallita]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Seleziona file" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Salva output..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Documenti non salvati" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "I seguenti documenti hanno modifiche non salvate. Quali documenti volete " "salvare prima di continuare?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nessuna lingua disponibile" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Nessuna lingua tesseract è disponibile. Ricognizione OCR non sarà " "disponibile." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Più lingue" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentazione automatica della pagina" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentazione della pagina con rilevamento di script e orientamento" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Assumi singola colonna di testo" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Assumi singolo blocco di testo allineato verticalmente" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Assumi singolo blocco uniforme di testo" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Assumi una singola linea di testo" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Assumi una singola parola" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Assumi una singola parola in un cerchio" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Assumi testo sparso senza ordine particolare" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Assumi testo sparso con rilevamento di script e di orientamento" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modalità di segmentazione della pagina" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Whitelist / blacklist di caratteri..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gestione lingue..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Sovrascrivere output esistente" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Saltare la sorgente" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Selezione corrente" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Vi sono stati errori di ricognizione" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Inizializzazione di tesseract fallita" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Sorgente già riconosciuta" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "Una o più sorgenti sono già state riconosciute. Continuare comunque? " #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Ricognizione della pagina %1 (%2 di %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Pagina %1: impossibile renderizzare pagina" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Eseguendo ricognizione..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Pagina %1:%2: impossibile renderizzare pagina" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: output già esistente, sorgente saltata" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: Impossibile creare l'output" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "I seguenti errori sono occorsi:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Scansione interrotta" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Nessun scanner specificato" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Impossibile connettersi allo scanner" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Impossibile avviare la scansione" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Errore durante la comunicazione con lo scanner" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Impossibile salvare l'immagine" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "L'operazione è stata annullata." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Il dispositivo è occupato." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Il coperchio è aperto." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "L'alimentatore dei documenti è bloccato." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "L'alimentatore dei documenti non ha più documenti." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Accesso allo scanner negato." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Specificare la password per il file '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF con testo" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Il file PDF contiene già del testo:\n" "%1\n" "Aprirlo comunque?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Immagini e PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Errore appunti" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Impossibile leggere dagli appunti." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Appunti %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Errore cattura schermo" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Impossibile catturare lo schermo." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Screenshot %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Salvando immagine..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Impossibile scrivere file" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Impossibile scrivere il file %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Eliminare il file?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Eliminare i seguenti file?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Apri output" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "È stato trovato sia output testo che hOCR. Quale vuoi aprire?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "File mancante" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Il seguente file è stato eliminato o spostato:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Cerca" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Sostituisci con" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista sostituzioni" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Apri lista sostituzioni" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Errore durante la lettura del file" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Impossibile leggere '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Errori durante la lettura del file" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Non è stato possibile leggere alcune voci della lista sostituzioni." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Salva lista sostituzioni" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Errore durante il salvataggio del file" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Impossibile scrivere '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Salvare la lista?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Salvare la lista attuale?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "PackageKit, il quale è necessario per gestire le lingue tesseract, non è " "stato rilevato. Utilizzare la gestione pacchetti del sistema per gestire le " "lingue tesseract, oppure scegliere di utilizzare i percorsi del profilo " "dell'utente nel dialogo delle impostazioni." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Caricando la lista delle lingue disponibili" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Impossibile caricare la lista delle lingue disponibili: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Errore di parsing: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Applicando i cambiamenti..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Impossibile creare la cartella per i file tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Scaricando '%1'..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Impossibile scaricare o rimuovere i seguenti file:\n" "%1\n" "\n" "Verificare la connessione e i permessi di scrittura.\n" "\n" "Aiuto: Se non si ha accesso di scrittura nelle cartelle di sistema, " "scegliere di utilizzare cartelle del profilo dell'utente nel dialogo delle " "impostazioni." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Si" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Sì a tutti" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "No" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "No a tutti" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Scarta" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Scarta tutti" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Testo" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Info su gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

     

    A graphical frontend to tesseract-ocr

    Website

     

    " msgstr "" "

     

    Un'interfaccia grafica per tesseract-ocr

    Website

     

    " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Riconoscimenti" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licenza" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Nella modalità batch, le sorgenti sono processate separatamente e l'output " "salvato accanto ai file di sorgente." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codifica predefinita" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codifica dei file di testo:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

    The application has " "crashed

    Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

    " msgstr "" "

    L'applicazione ha " "smesso di funzionare

    Per aiutare a migliorare l'applicazione, " "per favore segnalare il problema a manisandro@gmail.com, se possibile " "descrivendo cosa si stava facendo prima che l'applicazione smettesse di " "funzionare, e includendo l'informazione sottostante. Grazie.

    " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

    Tesseract has " "aborted

    Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

    The stacktrace below may provide additional information " "about where the crash occurred.

    " msgstr "" "

    Tesseract si è " "arrestato

    Tesseract (la libreria OCR) si è arrestato durante la " "ricognizione del testo. Questo può succedere se i file traineddata sono " "corrotti oppure incompatibilit con la versione di tesseract in uso, oppure a " "causa di un errore in tesseract.

    Il stacktrace sotto potrebbe fornire " "ulteriori informazioni concernenti la causa dell'errore.

    " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Letto piatto" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF Fronte" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF Retro" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF Duplex" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Ingrandisci" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Rimpicciolisci" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Dimensioni normali" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Dimensioni ideali" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Ruota a sinistra" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Ruota a sinistra" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Ruota a destra" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Ruota a destra" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controlli immagine" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Rileva impaginazione" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Mostra/nascondi riquadro output" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Esportazione PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Verticale" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Orizzontale" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Impossibile scrivere il file" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
    • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
    • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
    " msgstr "" "
    • PoDoFo: offre più opzioni per la compressione di " "immagini, ma non supporta sistemi di scrittura complessi.
    • QPrinter: " "supporta solamente JPEG per comprimere le immagini, ma supporta sistemi di " "scrittura complessi.
    " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Salva come testo hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Cerca e sostituisci" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Mostra finestra di correzione" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "I seguenti dizionari ortografici sono stati installati:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Nessun file recente" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Eliminare file" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Non è stato possibile scaricare o rimuovere i seguenti file:\n" "%1\n" "\n" "Verificare la connettività e i permessi delle cartelle.\n" "Aiuto: Se non si ha accesso di scrittura nelle cartelle di sistema, " "scegliere di utilizzare cartelle del profilo dell'utente nel dialogo delle " "impostazioni." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Output" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modalità OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Aggiungi cartella" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Incolla" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Cattura schermo" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Rimuovi immagine" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Elimina immagine" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Svuota lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Rimuovi interruzioni di riga" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Salva output" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Cancella output" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Aggiungi tab" #, fuzzy #~ msgid "Form" #~ msgstr "Formato:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Un file con nome \"%1\" esiste già. Sovrascrivere il file?" #~ msgid "Overwrite File?" #~ msgstr "Sovrascrivere il file?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Documento" #~ msgid "Recent" #~ msgstr "Recenti" #~ msgid "Failed to create output" #~ msgstr "Impossibile creare l'output" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Impossibile creare l'output. L'errore segnalato è: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "Per aiutare a migliorare l'applicazione, per favore considerate di " #~ "segnalare il problema a manisandro@gmail.com. Per favore " #~ "provate a descrivere cosa si stava facendo prima che l'applicazione " #~ "smettesse di funzionare. Includete anche l'informazione sottostante. " #~ "Grazie." #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

    Tesseract si è " #~ "arrestato

    Tesseract (la libreria OCR) si è arrestato durante " #~ "la ricognizione del testo. Questo può succedere se i file traineddata " #~ "sono corrotti oppure incompatibilit con la versione di tesseract in uso, " #~ "oppure a causa di un errore in tesseract.

    Il stacktrace sotto " #~ "potrebbe fornire ulteriori informazioni concernenti la causa dell'errore." #~ "

    " #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Esempio: 1-10, 13, 14-18" #~ msgid "Multiple sources" #~ msgstr "Più fonti" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Pagina %1: impossibile renderizzare pagina" #~ msgid "The following errors occurred:%1" #~ msgstr "I seguenti errori sono occorsi:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Il seguenti file saranno eliminati:%1" #~ msgid "Failed to open file" #~ msgstr "Impossibile aprire il file" #~ msgid "The file could not be opened: %1." #~ msgstr "Non è stato possibile aprire il file: %1." #~ msgid "Invalid hOCR file" #~ msgstr "File hOCR invalido" #~ msgid "The application has crashed" #~ msgstr "L'applicazione ha smesso di funzionare" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract si è arrestato con il seguente messaggio:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Questo tipicamente occorre per uno dei seguenti motivi:\n" #~ "- I definizioni di lingua traineddata sono incompatibili.\n" #~ "- File definizioni di lingua ausiliari mancanti.\n" #~ "- File definizioni di lingua corrotti.\n" #~ "\n" #~ "Accertarsi che i file delle definizioni di lingua siano validi e " #~ "compatibili con tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Impossibile leggere %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "PoDoFo" #~ msgstr "PoDoFo" #~ msgid "QPrinter" #~ msgstr "QPrinter" #~ msgid "90" #~ msgstr "90" #~ msgid "300" #~ msgstr "300" #~ msgid "100" #~ msgstr "100" #~ msgid "10" #~ msgstr "10" #~ msgid "%" #~ msgstr "%" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" #~ msgid "Document font:" #~ msgstr "Carattere:" #~ msgid "Scale:" #~ msgstr "Scala:" #~ msgid "Errors occurred" #~ msgstr "Errori" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Non è stato possibile renderizzare le seguenti pagine:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "lista_sostituzioni.txt" #~ msgid "Detect script and orientation" #~ msgstr "Rilevare script e orientamento" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "PackageKit, il quale è necessario per gestire le lingue tesseract, non è " #~ "stato rilevato. Utilizzare la gestione pacchetti del sistema per gestire " #~ "le lingue tesseract." #~ msgid "System-wide" #~ msgstr "Percorsi di sistema" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tInizializzazione di tesseract fallita" #~ msgid "So&urces" #~ msgstr "Fonti" #~ msgid "&Output" #~ msgstr "Output" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "" #~ "Per riconoscere aree specifiche, trascinare dei rettangoli sopra queste." #~ msgid "Rendering image..." #~ msgstr "Rendering immagine..." #~ msgid "en_US" #~ msgstr "it_IT" #, fuzzy #~ msgid "So&urces" #~ msgstr "Fonti" #, fuzzy #~ msgid "&Output" #~ msgstr "Output" #~ msgid "Configuration" #~ msgstr "Configurazione" #, fuzzy #~ msgid "Preceeded or succeeded by quote" #~ msgstr "Preceduto o seguito da virgolette" #, fuzzy #~ msgid "Preceeded by dot" #~ msgstr "Preceduto da un punto" #~ msgid "Pasting clipboard..." #~ msgstr "Leggendo appunti..." #~ msgid "Taking screenshot..." #~ msgstr "Catturando screenshot..." #~ msgid "Autolayout" #~ msgstr "Rilevare impaginazione" #~ msgid "Options" #~ msgstr "Opzioni" #~ msgid "Manage list" #~ msgstr "Gestire lista" #~ msgid "Replacement list" #~ msgstr "Lista sostituzioni" #~ msgid "replace_list.txt" #~ msgstr "lista_sostituzioni.txt" #~ msgid "Open replacement list" #~ msgstr "Aprire lista sostituzioni" #~ msgid "Save replacement list" #~ msgstr "Salvare lista delle sostituzioni" #~ msgid "Save the current list?" #~ msgstr "Salvare la lista attuale?" #~ msgid "Insert page range:" #~ msgstr "Inserire l'intervallo delle pagine:" #~ msgid "All Pages" #~ msgstr "Tutte le pagine" #~ msgid "A crash has been detected." #~ msgstr "Un errore è stato rilevato" #~ msgid "" #~ "The application cannot continue. Your work has been saved under %1.\n" #~ "\n" #~ "Please report this issue." #~ msgstr "" #~ "L'applicazione deve essere terminata. Il lavoro è stato salvato sotto " #~ "%1.\n" #~ "\n" #~ "Per favore segnalare questo problema." #~ msgid "" #~ "The application cannot continue. There was no unsaved work.\n" #~ "\n" #~ "Please report this issue." #~ msgstr "" #~ "L'applicazione deve essere terminata. Non vi è lavoro non salvato.\n" #~ "\n" #~ "Per favore segnalare questo problema." gImageReader-3.4.0/po/ja.po000066400000000000000000002246001417507262200154140ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-04-14 15:27+0000\n" "Last-Translator: Tadahito Yao \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.6-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR アプリケーション" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "è¨€èªžã‚’å†æ¤œå‡º" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "言語を管ç†" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "設定" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "ヘルプ" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "gImageReader ã«ã¤ã„ã¦" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "終了" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "文字ã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆ / ブラックリスト" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "ã“ã‚Œã‚‰ã®æ–‡å­—を読ã¿å–り対象ã‹ã‚‰é™¤å¤– (ブラックリスト):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "文字列を入力ã—ã¦ãã ã•ã„…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "æ¬¡ã®æ–‡å­—ã®ã¿ãŒèª­ã¿å–られるよã†ã«ã™ã‚‹ (ホワイトリスト):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "出力枠ã®å‘ã:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "æ°´å¹³" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "垂直" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "未追加ã®ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯è¾žæ›¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’è¦æ±‚ã™ã‚‹" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "ãƒ—ãƒ­ã‚°ãƒ©ãƒ ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’自動的ã«ç¢ºèªã™ã‚‹" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "既定ã®è¨€èªžã®å®šç¾©:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "追加ã®è¨€èªžã®å®šç¾©:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Tesseract è¨€èªžãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã®æŽ¥é ­è¾ž" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "接頭辞" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "後ã‚ã«å›½ã‚³ãƒ¼ãƒ‰ã‚’å«ã‚€è¨€èªžã‚³ãƒ¼ãƒ‰ (ISO 639-1)" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO コード" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "言語ã®åå‰" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "åç§°" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "中止" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "出力枠ã®ãƒ•ォント:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "既定" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "言語データã®ä¿å­˜å…ˆ:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "言語ã®å®šç¾©ã®ä¿å­˜å…ˆãƒ‘ス:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "スペルãƒã‚§ãƒƒã‚¯è¾žæ›¸ã®ä¿å­˜å…ˆãƒ‘ス:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "システム全体ã®ãƒ‘ス" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "ユーザーã®ãƒ‘ス" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "エクスãƒãƒ¼ãƒˆã—ãŸæ–‡æ›¸ã‚’既定ã®ã‚¢ãƒ—リケーションã§è‡ªå‹•çš„ã«é–‹ã" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’å†ç”Ÿæˆã™ã‚‹" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸ\n" "\n" "ã”ä¸ä¾¿ã‚’ãŠæŽ›ã‘ã—ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“ã€‚ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ”¹å–„ã«å½¹ç«‹ã¦ã‚‹ãŸã‚ã€" "manisandro@gmail.com ã¸å•題を報告ã™ã‚‹ã“ã¨" "ã‚’ã”æ¤œè¨Žãã ã•ã„。アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å‰ã«ä½•ã‚’ã—ã¦ã„ãŸã‹ã€ä¸‹è¨˜ã®" "情報ã¨ã¨ã‚‚ã«ã”説明ãã ã•ã„。よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract ãŒä¸­æ­¢ã•れã¾ã—ãŸ\n" "\n" "Tesseract (OCR エンジン) ãŒãƒ†ã‚­ã‚¹ãƒˆã®èª­ã¿å–り中ã«ä¸­æ­¢ã•れã¾ã—ãŸã€‚ ã“れã¯ã€ä½¿" "用ã—ãŸå­¦ç¿’データãŒç ´æã—ã¦ã„ã‚‹ã‹ã€ä½¿ç”¨ä¸­ã®Tesseract ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨äº’æ›æ€§ãŒãª" "ã„ã¨ãã€ã¾ãŸã¯Tesseract ã®ãƒã‚°ãŒåŽŸå› ã§ç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚\n" "\n" "下記ã®ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã¯ã€ã©ã®ç®‡æ‰€ã§ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãŒç™ºç”Ÿã—ãŸã‹ã«ã‹ã‚“ã™ã‚‹è¿½åŠ ã®æƒ…" "報をæä¾›ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "é©ç”¨" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "é–‰ã˜ã‚‹" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠž" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "フォーマット:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "出力先:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "出力モード:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "ソースã®ãƒ•ァイルå" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "ãã®ä»–ã®ã‚ªãƒ—ション" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "出力枠ã®è¡¨ç¤ºã‚’切り替ãˆã‚‹" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "ç¾åœ¨ã®ãƒšãƒ¼ã‚¸ã‚’回転" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "å…¨ã¦ã®ãƒšãƒ¼ã‚¸ã‚’回転" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "ç”»åƒã‚’追加" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "ç”»åƒã‚’追加" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "一覧ã‹ã‚‰ç”»åƒã‚’除去" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "ç”»åƒã‚’削除" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "一覧をクリア" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "ファイル" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "デãƒã‚¤ã‚¹:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "æ›´æ–°" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "出力先:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "モード:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "色" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "グレースケール" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "è§£åƒåº¦:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "スキャン" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "ソース:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "å–å¾—" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "明るã„" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "コントラスト" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "è§£åƒåº¦" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "色をå転" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "拡大" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "縮å°" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "å…ƒã®ç¸®å°º" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "ç”»é¢ã«åˆã‚ã›ã‚‹" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "ページを回転" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "回転ã®ãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠž" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠž" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "ãƒšãƒ¼ã‚¸ã‚’é¸æŠž" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "ç”»åƒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "プレーンテキスト" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "レイアウトを自動検出" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "å…¨ã¦èª­ã¿å–り" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "è¨€èªžã‚’é¸æŠž" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "エクスãƒãƒ¼ãƒˆ" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocr ã® GUI フロントエンド" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "å¤§æ–‡å­—ãƒ»å°æ–‡å­—を区別" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "出力テキストã®å‰ã«è¿½åŠ :" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "レイアウトを自動検出" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "ページã®ç¯„囲" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "ページã®ç¯„囲:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "例: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "読ã¿å–り領域:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "ページ全体" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "自動検出" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "出力テキストã®å‰ã«è¿½åŠ :" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "ソースã®ãƒ•ァイルå" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "ソースã®ãƒšãƒ¼ã‚¸" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "ä¿è­·ã•れ㟠PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "ç¾åœ¨ã®ãƒšãƒ¼ã‚¸" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "複数ã®ãƒšãƒ¼ã‚¸â€¦" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "å˜èªžã‚’追加" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "å˜èªžã‚’入力:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "æ–°ã—ã„出力を最後ã®ãƒšãƒ¼ã‚¸ã®å¾Œã‚ã«è¿½åŠ ã™ã‚‹" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "æ–°ã—ã„出力を最後ã®ãƒšãƒ¼ã‚¸ã®å‰ã«è¿½åŠ ã™ã‚‹" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "プレーンテキストã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "PDF ã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ODT ã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "文書を最後ã®ãƒšãƒ¼ã‚¸ã®å¾Œã«è¿½åŠ ã™ã‚‹" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "文書をç¾åœ¨ã®ãƒšãƒ¼ã‚¸ã®å‰ã«æŒ¿å…¥ã™ã‚‹" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR ファイルを開ã" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "å‡ºåŠ›çµæžœã‚’ä¿å­˜" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "エクスãƒãƒ¼ãƒˆ" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "å‡ºåŠ›çµæžœã‚’クリア" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "検索ã¨ç½®æ›" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "信頼度を表示" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "プレビューを表示" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "次㸠(F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "å‰ã¸ (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "å…¨ã¦å±•é–‹" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "å…¨ã¦æŠ˜ã‚Šç•³ã‚€" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "プロパティ" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "ソース" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "ç¾åœ¨ã®ãƒ†ã‚­ã‚¹ãƒˆã«è¿½åŠ " #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "カーソルä½ç½®ã«æŒ¿å…¥" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "ç¾åœ¨ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’ç½®æ›" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "次ã®å ´åˆã€æ”¹è¡Œã‚’ä¿æŒ" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "ãã®ä»–ã®ã‚ªãƒ—ション" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "ãƒã‚¤ãƒ•ンã§åŒºåˆ‡ã‚‰ã‚ŒãŸå˜èªžã‚’çµåˆ" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "空白を折り畳む" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "段è½ã‚’ä¿æŒã™ã‚‹" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "視覚的ãªè£œåŠ©" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "空白をæç”»ã™ã‚‹" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "hOCR ファイルを開ã" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "é¸æŠžã•れãŸãƒ†ã‚­ã‚¹ãƒˆã®æ”¹è¡Œã‚’除去" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "å…ƒã«æˆ»ã™" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "やり直ã™" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "出力モード:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "é€éŽãƒ†ã‚­ã‚¹ãƒˆä»˜ã PDF" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "圧縮:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "圧縮å“質:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "ディザリングアルゴリズム:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "ç”»åƒã®è¨­å®š:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "行ã¨å˜èªžã®é–“隔をå‡ç­‰åŒ–" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "書ã込むフォント:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "代替ã®ãƒ•ォント:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "書ã込むフォントã®å¤§ãã•:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "ãƒ•ã‚©ãƒ³ãƒˆã®æ‹¡å¤§ç¸®å°:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "次ã®å€¤ã‚ˆã‚Šåºƒã„é–“éš”ã‚’ä¿æŒ:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "文字" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "改行ã®å‰ã®ãƒã‚¤ãƒ•ンを削除" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "テキストã®è¨­å®š:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "用紙ã®å¤§ãã•:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "å¹…" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "高ã•" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "ソース画åƒã® DPI を次ã®å€¤ã¨ã¿ãªã™:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "基本" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "パスワード:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "パスワードを確èª:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "æš—å·åŒ– (オプション):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "作æˆè€…:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "タイトル:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "サブタイトル:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "アプリケーション:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "PDF 変æ›:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "キーワード:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "è¿½åŠ ã®æƒ…å ± (オプション):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "ç¾åœ¨ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "æ‹¡å¼µ" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "検索" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "ç½®æ›" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "å…¨ã¦ç½®æ›" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "å‰ã‚’検索" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "次を検索" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "å¤§æ–‡å­—ãƒ»å°æ–‡å­—を区別" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "削除" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "並ã³é †:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "読ã¿å–り" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "クリップボードã¸èª­ã¿å–り" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "ç”»åƒã¨ã—ã¦ä¿å­˜" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "é–‹ã" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "ä¿å­˜" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "クリア" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "追加" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "除去" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata ã®ç®¡ç†" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "インストールã•れãŸè¨€èªžã®ç®¡ç†:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "ç”»åƒ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "出力ファイルã®åå‰ã‚’é¸æŠžâ€¦" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ã‚¹ã‚­ãƒ£ãƒ³ã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "スキャン失敗" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "ã‚¹ã‚­ãƒ£ãƒŠãƒ¼ãŒæ¤œå‡ºã•れã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "スキャンを開始ã—ã¦ã„ã¾ã™â€¦" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "デãƒã‚¤ã‚¹ã‚’é–‹ã„ã¦ã„ã¾ã™â€¦" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "設定中…" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "パラメータをå–å¾—ã—ã¦ã„ã¾ã™â€¦" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "データを転é€ã—ã¦ã„ã¾ã™â€¦" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "スキャンを中止ã—ã¦ã„ã¾ã™â€¦" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "ファイルåã®æŽ¥é ­è¾ž" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "コード" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "スクリプト" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "完æˆãƒ‡ãƒ¼ã‚¿ã¯ %1 ã«ä¿å­˜ã•れã¦ã„ã¾ã™ã€‚" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "未ä¿å­˜ã®ä½œæ¥­ã¯ã‚りã¾ã›ã‚“。" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸã€‚GDBã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã™ã‹ï¼Ÿ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "ç”»åƒã®èª­è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "ファイルãŒç”»åƒã§ãªã„ã‹ã€ç ´æã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "%1 é " #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG ç”»åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "é¸æŠžã—ãŸç”»åƒã‚’ä¿å­˜ã™ã‚‹" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "é¸æŠžã—ãŸç”»åƒ.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "å…¨ã¦èª­ã¿å–り" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "é¸æŠžç¯„å›²ã‚’èª­ã¿å–り" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "レイアウト解æžã‚’実行中" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "ページ" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "テキストブロック" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "段è½" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "行" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "図画" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "エクスãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ODT ã®å‡ºåŠ›ã«å¤±æ•—ã—ã¾ã—ãŸ: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸è¾¼ã¿ãŒã§ãã¾ã›ã‚“。" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ODT ã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸­..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "æ“作ã¯ä¸­æ­¢ã•れã¾ã—ãŸ" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "%1 é ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«å¤±æ•—ã—ã¾ã—ãŸ" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "PDFã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸­â€¦" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "PDF ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: %1。" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF ライブラリã«ãŠã„ã¦ãƒ•ォント '%1' を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "白黒" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "ã—ãã„値(最も近ã„色)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (å¯é€†åœ§ç¸®ï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (å¯é€†åœ§ç¸®ï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (ä¸å¯é€†åœ§ç¸®ï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "ソースã¨åŒã˜" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "カスタム" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "テキストã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸è¾¼ã¿ãŒã§ãã¾ã›ã‚“。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "ブロック" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "行" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "å˜èªž" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "スペルミスã®ã‚ã‚‹å˜èªž" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "信頼度を表示" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "次ã®ãƒšãƒ¼ã‚¸ã‚’処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸ:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "読込ã¿ã‚¨ãƒ©ãƒ¼" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "複数ã®å€¤" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "出力" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument テキスト文書" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT ã®å‡ºåŠ›çµæžœã‚’ä¿å­˜..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF ファイル" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "PDF ã®å‡ºåŠ›çµæžœã‚’ä¿å­˜â€¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "無効ãªå‡ºåŠ›" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚½ãƒ¼ã‚¹ç”»åƒã®ãƒ•ァイルを上書ãã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "テキストファイル" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "テキストã®å‡ºåŠ›çµæžœã‚’ä¿å­˜â€¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
    TabNext field
    Shift+TabPrevious field
    DownNext line
    UpPrevious line
    Ctrl+SpaceSpelling suggestions
    Ctrl+EnterAdd word to " "dictionary
    Ctrl+BToggle bold
    Ctrl+IToggle italic
    Ctrl+DDivide word at cursor position
    Ctrl+MMerge " "with previous word
    Ctrl+Shift+MMerge with next " "word
    Ctrl+DeleteDelete word
    Ctrl+{Left,Right}Adjust left bounding box edge
    Ctrl+Shift+{Left,Right}Adjust right bounding box edge
    Ctrl+{Up,Down}Adjust top bounding box edge
    Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
    Ctrl++Increase font size
    Ctrl+-Decrease font size
    " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "文書をç¾åœ¨ã®ãƒšãƒ¼ã‚¸ã®å‰ã«æŒ¿å…¥ã™ã‚‹" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "プレーンテキスト" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "å‡ºåŠ›çµæžœã‚’ä¿å­˜" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCR, PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

     

    A graphical frontend to tesseract-ocr

    Website

     

    " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

    The application has " "crashed

    Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

    " msgstr "" "アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸ\n" "\n" "ã”ä¸ä¾¿ã‚’ãŠæŽ›ã‘ã—ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“ã€‚ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ”¹å–„ã«å½¹ç«‹ã¦ã‚‹ãŸã‚ã€" "manisandro@gmail.com ã¸å•題を報告ã™ã‚‹ã“ã¨" "ã‚’ã”æ¤œè¨Žãã ã•ã„。アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å‰ã«ä½•ã‚’ã—ã¦ã„ãŸã‹ã€ä¸‹è¨˜ã®" "情報ã¨ã¨ã‚‚ã«ã”説明ãã ã•ã„。よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚" #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

    Tesseract has " "aborted

    Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

    The stacktrace below may provide additional information " "about where the crash occurred.

    " msgstr "" "Tesseract ãŒä¸­æ­¢ã•れã¾ã—ãŸ\n" "\n" "Tesseract (OCR エンジン) ãŒãƒ†ã‚­ã‚¹ãƒˆã®èª­ã¿å–り中ã«ä¸­æ­¢ã•れã¾ã—ãŸã€‚ ã“れã¯ã€ä½¿" "用ã—ãŸå­¦ç¿’データãŒç ´æã—ã¦ã„ã‚‹ã‹ã€ä½¿ç”¨ä¸­ã®Tesseract ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨äº’æ›æ€§ãŒãª" "ã„ã¨ãã€ã¾ãŸã¯Tesseract ã®ãƒã‚°ãŒåŽŸå› ã§ç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚\n" "\n" "下記ã®ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã¯ã€ã©ã®ç®‡æ‰€ã§ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãŒç™ºç”Ÿã—ãŸã‹ã«ã‹ã‚“ã™ã‚‹è¿½åŠ ã®æƒ…" "報をæä¾›ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF エクスãƒãƒ¼ãƒˆ" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
    • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
    • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
    " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "プレビューを表示" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "ソースã®ãƒ•ァイルå" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "ç”»åƒã‚’削除" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "å˜èªžã‚’追加" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "貼り付ã‘" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "スクリーンショットを撮る" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "フォーマット:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "\"%1\" ã¨ã„ã†åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ" #~ msgid "Overwrite File?" #~ msgstr "ファイルを上書ãã—ã¾ã™ã‹ï¼Ÿ" #~ msgid "Recent" #~ msgstr "最近開ã„ãŸãƒ•ァイル" #~ msgid "Failed to create output" #~ msgstr "å‡ºåŠ›çµæžœã®ç”Ÿæˆã«å¤±æ•—ã—ã¾ã—ãŸ" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "å‡ºåŠ›çµæžœã®ç”Ÿæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚エラー: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸ\n" #~ "\n" #~ "ã”ä¸ä¾¿ã‚’ãŠæŽ›ã‘ã—ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“ã€‚ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ”¹å–„ã«å½¹ç«‹ã¦ã‚‹ãŸ" #~ "ã‚ã€manisandro@gmail.com ã¸å•題を報告ã™ã‚‹ã“" #~ "ã¨ã‚’ã”æ¤œè¨Žãã ã•ã„。アプリケーションãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å‰ã«ä½•ã‚’ã—ã¦ã„ãŸã‹ã€ä¸‹" #~ "è¨˜ã®æƒ…å ±ã¨ã¨ã‚‚ã«ã”説明ãã ã•ã„。よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "Tesseract ãŒä¸­æ­¢ã•れã¾ã—ãŸ\n" #~ "\n" #~ "Tesseract (OCR エンジン) ãŒãƒ†ã‚­ã‚¹ãƒˆã®èª­ã¿å–り中ã«ä¸­æ­¢ã•れã¾ã—ãŸã€‚ ã“れã¯ã€" #~ "使用ã—ãŸå­¦ç¿’データãŒç ´æã—ã¦ã„ã‚‹ã‹ã€ä½¿ç”¨ä¸­ã®Tesseract ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨äº’æ›æ€§" #~ "ãŒãªã„ã¨ãã€ã¾ãŸã¯Tesseract ã®ãƒã‚°ãŒåŽŸå› ã§ç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚\n" #~ "\n" #~ "下記ã®ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã¯ã€ã©ã®ç®‡æ‰€ã§ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãŒç™ºç”Ÿã—ãŸã‹ã«ã‹ã‚“ã™ã‚‹è¿½åŠ ã®" #~ "情報をæä¾›ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。\n" #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "例: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "プレーンテキスト" gImageReader-3.4.0/po/ka.po000066400000000000000000001751461417507262200154270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
    TabNext field
    Shift+TabPrevious field
    DownNext line
    UpPrevious line
    Ctrl+SpaceSpelling suggestions
    Ctrl+EnterAdd word to " "dictionary
    Ctrl+BToggle bold
    Ctrl+IToggle italic
    Ctrl+DDivide word at cursor position
    Ctrl+MMerge " "with previous word
    Ctrl+Shift+MMerge with next " "word
    Ctrl+DeleteDelete word
    Ctrl+{Left,Right}Adjust left bounding box edge
    Ctrl+Shift+{Left,Right}Adjust right bounding box edge
    Ctrl+{Up,Down}Adjust top bounding box edge
    Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
    Ctrl++Increase font size
    Ctrl+-Decrease font size
    " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

     

    A graphical frontend to tesseract-ocr

    Website

     

    " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

    The application has " "crashed

    Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

    " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

    Tesseract has " "aborted

    Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

    The stacktrace below may provide additional information " "about where the crash occurred.

    " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
    • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
    • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
    " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/ko.po000066400000000000000000002150451417507262200154360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2018-06-21 22:22+0000\n" "Last-Translator: peinilla \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 3.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR ì‘ìš© 프로그램" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "언어 재íƒìƒ‰" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "언어 관리" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "설정" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "ë„움ë§" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "ì •ë³´" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "종료" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 #, fuzzy msgid "Enter a string of characters..." msgstr "ì¸ìž 가져오기..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "확ì¸" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "출력창 ë°©í–¥ :" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "가로" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "세로" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "누ë½ëœ 맞춤법 사전 설치창 표시" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "ìžë™ìœ¼ë¡œ 새 버전 확ì¸" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "등ë¡ëœ 언어 :" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "ì¶”ê°€ëœ ì–¸ì–´ :" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "언어 ì ‘ë‘사" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ì ‘ë‘사" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "언어코드 ë’¤ì— êµ­ê°€ì½”ë“œ" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO 코드" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "언어" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "ì´ë¦„" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "취소" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "출력 í°íЏ:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "기본값" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "ì–¸ì–´íŒŒì¼ ìœ„ì¹˜:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "언어 ì •ì˜ ìœ„ì¹˜:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "맞춤법 사전 위치:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "시스템 경로" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "ì‚¬ìš©ìž ê²½ë¡œ" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "기본 ì‘ìš© 프로그램으로 문서 실행" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "ì—­ì¶”ì  ìž¬ìƒì„±" #: ../gtk/data/CrashHandler.ui.h:3 #, fuzzy, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
    manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "ë¶ˆíŽ¸ì„ ë¼ì³ 드려 죄송합니다. 애플리케ì´ì…˜ì˜ ê°œì„ ì„ ìœ„í•´ ë¬¸ì œì— ëŒ€í•œ 보고서를 " "전송해주십시오. \n" "manisandro@gmail.com.\n" "가능하다면, ì–´ë–¤ ìž‘ì—…ì„ í•˜ëŠ” ë™ì•ˆ 문제가 ë°œìƒí–ˆëŠ”ì§€ 설명해 주십시오. ì•„ëž˜ì˜ " "정보를 í¬í•¨í•˜ë©´ 좋습니다. ê°ì‚¬í•©ë‹ˆë‹¤." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "ì ìš©" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "닫기" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "입력모드" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "í¬ë§·:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "출력 경로:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "출력 모드:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "소스 파ì¼" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "기타옵션" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "출력창 표시" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "현재 ì°½ 회전하기" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "모든 ì°½ 회전하기" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "ì´ë¯¸ì§€ 추가" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "ì´ë¯¸ì§€ 추가" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "제거" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "ì´ë¯¸ì§€ ì‚­ì œ" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "ì „ë¶€ 지우기" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "파ì¼" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "장치:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "새로고침" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "출력 경로:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "모드:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "컬러" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "í‘ë°±" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "í•´ìƒë„:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "스캔" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "소스:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "가져오기" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "ë°ê¸°" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "대조" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "í•´ìƒë„" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "반전" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "확대" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "축소" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "1:1" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "í™”ë©´ì— ë§žì¶”ê¸°" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 #, fuzzy msgid "Rotate page" msgstr "모든 ì°½ 회전하기" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "회전모드" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "입력모드" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 #, fuzzy msgid "Select page" msgstr "언어 ì„ íƒ" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "ì´ë¯¸ì§€ 변경" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "í…스트" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "ìžë™ê°ì§€" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "ëª¨ë‘ í•´ì„" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "언어 ì„ íƒ" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "내보내기" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Tesseract-ocr ì„ ì´ìš©í•œ 프론트엔드" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "출력 í…스트 ì•žì— ì¶”ê°€ :" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "ìžë™ê°ì§€" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "범위" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "범위:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "예)1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "번역 ì˜ì—­:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "ì „ì²´ 페ì´ì§€" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "ìžë™ê°ì§€" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "출력 í…스트 ì•žì— ì¶”ê°€ :" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "소스 파ì¼" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "소스 페ì´ì§€" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 #, fuzzy msgid "Protected PDF" msgstr "Protected PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "현재 쪽" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "여러 쪽..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "추가" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "추가하기:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "현재 ì°½ 회전하기" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "txt로 내보내기" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "pdf로 내보내기" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ODT로 내보내기" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "현재 í…ìŠ¤íŠ¸ì— ì¶”ê°€" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR 열기" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "저장" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "내보내기" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ì‚­ì œ" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "íƒìƒ‰ ë° ë°”ê¾¸ê¸°" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "ì‹ ë¢°ë„ í‘œì‹œ" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "미리보기" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "다ìŒ(F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "ì´ì „(Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "ëª¨ë‘ ì„ íƒ" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "ì„ íƒ í•´ì œ" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "ì†ì„±" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "소스" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "현재 í…ìŠ¤íŠ¸ì— ì¶”ê°€" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "현재 ìœ„ì¹˜ì— ì¶”ê°€" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "현재 위치 바꾸기" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "ê³„ì† ì¤„ë°”ê¾¸ê¸°..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "마침표(.?!) 앞ì—" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "ì„ í–‰ë˜ê±°ë‚˜ ì™„ì„±ëœ ì¸ìš©ë¬¸" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "기타옵션" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "하ì´í”ˆìœ¼ë¡œ ì—°ê²°ëœ ë‹¨ì–´ ê²°í•©" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "공백 축소" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "ë‹¨ë½ ìœ ì§€" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "ì‹œê° ìžë£Œ" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "공백 추가" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "hOCR 열기" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "ì„ íƒë¬¸ìž¥ 줄 바꿈" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "실행취소" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "재실행" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "출력 모드:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDFì—서 투명 í…스트 ë®ì–´ì“°ê¸°" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "ì••ì¶•:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "ì••ì¶• 퀄리티:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "ë””ë”ë§ ì•Œê³ ë¦¬ì¦˜:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "ì´ë¯¸ì§€ 설정:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "줄, 단어 간격 ê· ì¼í™”" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "í°íЏ 패밀리 가져오기:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "í°íЏ 백업하기:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "í°íЏ 사ì´ì¦ˆ 가져오기:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "글꼴 í¬ê¸°ì¡°ì •:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "다ìŒë³´ë‹¤ ë„“ì€ ê³µê°„ 유지:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "문ìž" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "í…스트 설정:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "용지 í¬ê¸°:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "가로" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "세로" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "기본" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF 버전:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "비밀번호:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "비밀번호 확ì¸:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "암호화 (ì„ íƒ):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "ì €ìž:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "제목:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "주제:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "제작ìž:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "ìƒì‚°ìž:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "키워드:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "추가 ì •ë³´:" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "현재 소스ì—서 가져오기" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "고급" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "찾기" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "바꾸기" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "ëª¨ë‘ ë°”ê¾¸ê¸°" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "ì´ì „ 찾기" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "ë‹¤ìŒ ì°¾ê¸°" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "ì €ìž¥ëœ ë°”ê¾¸ê¸° 목ë¡" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "ì‚­ì œ" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "차례:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "ë¶„ì„하기" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "í´ë¦½ë³´ë“œ ë¶„ì„하기" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "ì´ë¯¸ì§€ë¡œ 저장" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "열기" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "저장" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "지우기" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "추가" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "ì‚­ì œ" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "테서렉트 ë°ì´í„° 매니저" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "ì €ìž¥ëœ ì–¸ì–´ 매니저:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "ì´ë¯¸ì§€" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "출력 íŒŒì¼ ì„ íƒ..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "스ìºë‹ 백엔드 초기화 실패." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "스캔 실패" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "ë°œê²¬ëœ ìŠ¤ìºë„ˆê°€ 없습니다." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "스캔 시작..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "기기 열기..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "옵션..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "ì¸ìž 가져오기..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "ë°ì´í„° ì´ë™ 중..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "스캔 취소..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "파ì¼ì´ë¦„ ì ‘ë‘ì–´" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "코드" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "ì´ë¦„" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "스í¬ë¦½íЏ" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "ì¶©ëŒ í•¸ë“¤ëŸ¬" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "ìž‘ì—…ë¬¼ì´ ë‹¤ìŒ ê²½ë¡œì— ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤%1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "저장하지 ì•Šì€ ìž‘ì—…ë¬¼ìž…ë‹ˆë‹¤." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "ì—­ ì¶”ì ì„ 가져오지 못했습니다. gdbê°€ 설치ë˜ì–´ 있습니까?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "ì´ë¯¸ì§€ 로드 실패" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "파ì¼ì´ ì´ë¯¸ì§€ê°€ 아니거나 ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 #, fuzzy msgid "Page %1" msgstr "페ì´ì§€: %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG ì´ë¯¸ì§€" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "ì„ íƒí•œ ì´ë¯¸ì§€ 저장" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "ì„ íƒëœ ì´ë¯¸ì§€.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "ëª¨ë‘ ë¶„ì„" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "ì„ íƒí•œ ì˜ì—­ ë¶„ì„" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "ë ˆì´ì•„웃 ë¶„ì„ ìˆ˜í–‰" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "페ì´ì§€" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "í…스트 블ë¡" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "구절" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "í…스트ë¼ì¸" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "그래픽" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "내보내기 실패" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ODT 내보내기 실패: 출력 파ì¼ì„ 쓸 수 없습니다." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ODT로 내보내기..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "모노í¬ë¡¬" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "임계 ê°’ (근처 색ìƒ)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "확산" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (무ì†ì‹¤)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (무ì†ì‹¤)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (ì†ì‹¤)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "ì›ë³¸ê³¼ ê°™ì€" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "커스텀" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "ì‹ ë¢°ë„ í‘œì‹œ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 #, fuzzy msgid "" "The following files could not be opened:\n" "%1" msgstr "" "ë‹¤ìŒ ì‚¬ì „íŒŒì¼ì´ 설치ë˜ì—ˆìŠµë‹ˆë‹¤:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 #, fuzzy msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "ë‹¤ìŒ ì‚¬ì „ 파ì¼ì´ 설치ë˜ì—ˆìŠµë‹ˆë‹¤ : %1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "출력" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "문서 열기" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT 파ì¼ë¡œ 저장하기..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF 파ì¼" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "PDF로 저장..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "ìž˜ëª»ëœ ì¶œë ¥" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "ì´ ë¬¸ì„œì˜ ì›ë³¸ ì´ë¯¸ì§€ 파ì¼ì„ ë®ì–´ 쓸 수 없습니다." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
    TabNext field
    Shift+TabPrevious field
    DownNext line
    UpPrevious line
    Ctrl+SpaceSpelling suggestions
    Ctrl+EnterAdd word to " "dictionary
    Ctrl+BToggle bold
    Ctrl+IToggle italic
    Ctrl+DDivide word at cursor position
    Ctrl+MMerge " "with previous word
    Ctrl+Shift+MMerge with next " "word
    Ctrl+DeleteDelete word
    Ctrl+{Left,Right}Adjust left bounding box edge
    Ctrl+Shift+{Left,Right}Adjust right bounding box edge
    Ctrl+{Up,Down}Adjust top bounding box edge
    Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
    Ctrl++Increase font size
    Ctrl+-Decrease font size
    " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "ì‚¬ì „íŒŒì¼ ì„¤ì¹˜" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "ë‹¤ìŒ ì‚¬ì „íŒŒì¼ì´ 설치ë˜ì—ˆìŠµë‹ˆë‹¤:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 #, fuzzy msgid "Page: %1\n" msgstr "페ì´ì§€: %1" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "줄 바꿈..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "맞춤법 검사" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "파ì¼: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "페ì´ì§€: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[ë¶„ì„ ì‹¤íŒ¨ %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "출력문 저장..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "유효한 언어가 없습니다" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "유효한 Tesseract 언어 ë°ì´í„°ê°€ 없습니다. ë¶„ì„ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "다국어" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "ìžë™ìœ¼ë¡œ 페ì´ì§€ 나누기" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "소개와 스í¬ë¦½íŠ¸ë¡œ 페ì´ì§€ 나누기" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 #, fuzzy msgid "- Page %1: failed to render page" msgstr "ì¶œë ¥ì„ ìƒì„±í•˜ì§€ 못했습니다" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "ì¶œë ¥ì„ ìƒì„±í•˜ì§€ 못했습니다" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 #, fuzzy msgid "The following errors occurred:" msgstr "" "ë‹¤ìŒ ì‚¬ì „íŒŒì¼ì´ 설치ë˜ì—ˆìŠµë‹ˆë‹¤:\n" "%1" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "í…스트" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "저장" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "í…스트ë¼ì¸" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCR, PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

     

    A graphical frontend to tesseract-ocr

    Website

     

    " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

    The application has " "crashed

    Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

    " msgstr "" "ë¶ˆíŽ¸ì„ ë¼ì³ 드려 죄송합니다. 애플리케ì´ì…˜ì˜ ê°œì„ ì„ ìœ„í•´ ë¬¸ì œì— ëŒ€í•œ 보고서를 " "전송해주십시오. \n" "manisandro@gmail.com.\n" "가능하다면, ì–´ë–¤ ìž‘ì—…ì„ í•˜ëŠ” ë™ì•ˆ 문제가 ë°œìƒí–ˆëŠ”ì§€ 설명해 주십시오. ì•„ëž˜ì˜ " "정보를 í¬í•¨í•˜ë©´ 좋습니다. ê°ì‚¬í•©ë‹ˆë‹¤." #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

    Tesseract has " "aborted

    Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

    The stacktrace below may provide additional information " "about where the crash occurred.

    " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF로 내보내기" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "íŒŒì¼ ì €ìž¥ 실패" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
    • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
    • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
    " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "hOCR로 저장" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "찾기 ë° ë°”ê¾¸ê¸°" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "미리보기" #: ../qt/src/MainWindow.cc:624 #, fuzzy msgid "" "The following dictionary files were installed:\n" "%1" msgstr "ë‹¤ìŒ ì‚¬ì „ 파ì¼ì´ 설치ë˜ì—ˆìŠµë‹ˆë‹¤ : %1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "소스 파ì¼" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "ì´ë¯¸ì§€ ì‚­ì œ" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "출력" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR 모드:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "추가" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "붙여넣기" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "스í¬ë¦°ìƒ· ì´¬ì˜" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "ì´ë¯¸ì§€ 제거" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "ì´ë¯¸ì§€ ì‚­ì œ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "초기화" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "문장 줄 바꿈" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "출력문 저장" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "초기화" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "í¬ë§·:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "\"%1\"ë¼ëŠ” ì´ë¦„ì˜ íŒŒì¼ì´ ì´ë¯¸ 있습니다. ë®ì–´ 쓰시겠습니까?" #~ msgid "Overwrite File?" #~ msgstr "파ì¼ì„ ë®ì–´ 쓰시겠습니까?" #~ msgid "Recent" #~ msgstr "파ì¼ìƒíƒœ" #~ msgid "Failed to create output" #~ msgstr "ì¶œë ¥ì„ ìƒì„±í•˜ì§€ 못했습니다" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "ì¶œë ¥ì„ ë§Œë“¤ì§€ 못했습니다. 반환 ëœ ì˜¤ë¥˜ : %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "ë¶ˆíŽ¸ì„ ë¼ì³ 드려 죄송합니다. 애플리케ì´ì…˜ì˜ ê°œì„ ì„ ìœ„í•´ ë¬¸ì œì— ëŒ€í•œ 보고서" #~ "를 전송해주십시오. \n" #~ "manisandro@gmail.com.\n" #~ "가능하다면, ì–´ë–¤ ìž‘ì—…ì„ í•˜ëŠ” ë™ì•ˆ 문제가 ë°œìƒí–ˆëŠ”ì§€ 설명해 주십시오. 아래" #~ "ì˜ ì •ë³´ë¥¼ í¬í•¨í•˜ë©´ 좋습니다. ê°ì‚¬í•©ë‹ˆë‹¤." #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "예)1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "í…스트" #~ msgid "The application has crashed" #~ msgstr "애플리케ì´ì…˜ ì¶©ëŒ" #~ msgid "Could not read %1: %2" #~ msgstr "%1 : %2 를 ì½ì–´ 올 수 없습니다" gImageReader-3.4.0/po/mk.po000066400000000000000000002651731417507262200154430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-05-09 09:13+0000\n" "Last-Translator: Darija Cholakova \n" "Language-Team: Macedonian \n" "Language: mk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n" "X-Generator: Weblate 4.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR апликација" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Редетектирање јазици" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Управување Ñо Јазици" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ПоÑтавки" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Помош" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "За апликацијата" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Излез" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Знаци бела лиÑта / црна лиÑта" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "ИÑклучете ги овие карактери од препознавање (црна лиÑта):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "ВнеÑете низа на знаци..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Дозволено е Ñамо Ñледниве карактери да бидат препознаени (бела лиÑта):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "ОК" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Ориентација на излезната рамка:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Хоризонтално" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Вертикално" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "ИнÑталирај речници за Ñпелување што недоÑтаÑуваат" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "ÐвтоматÑки провери за нови верзии" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Претходно дефинирани дефиниции за јазици:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Додатни дефиниции за јазици:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð½Ð° датотека на теÑеракт јазикот" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ПрефикÑ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 кодот за јазик проÑледен од кодот за земја" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO код" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Име на јазикот" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Име" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Откажи" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Фонт на излезна рамка:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Стандардно" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Локации за јазични податоци:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Патеки за јазични дефиниции:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Патека на речници за правопиÑ:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "СиÑтемÑки патеки" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "КориÑнички патеки" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "ÐвтоматÑко отворање извозни документи Ñо Ñтандардна апликација" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Обновување на позадина" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Ðпликацијата падна\n" "\n" "Се извинуваме. За подобрување на апликацијата, Ве молиме пратете извештај за " "проблемот на manisandro@gmail.com. Ве молиме опишете " "што работевте пред да падне апликацијата. Воедно, наведете ги информациите " "подолу. Ви благодариме." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "ТеÑеракт Ñе прекина\n" "\n" "ТеÑеракт (ОЦР уредот) прекина за време на препознавање на текÑтот. Ова може " "да Ñе Ñлучи доколку кориÑтените податоци Ñе корумпирани или некомпатибилни " "Ñо тековната верзија на теÑеракт, или поради грешка во теÑеракт. \n" "\n" "Патеката подолу може да обезбеди дополнителни информации за тоа како " "наÑтанала грешката.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Примени" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Затвори" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Избери папка..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Формат:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Излез:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Режим за излез:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Ðема Ñкорешни документи" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Други опции" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Прикажи/Ñкриј излезна рамка" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Ротирај ја моменталната Ñтрана" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Ротирај ги Ñите Ñтрани" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Извори" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Додади Ñлики" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Додади Ñлики" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "ОтÑтрани Ñлики од лиÑтата" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Избриши Ñлика" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "ИÑчиÑти лиÑта" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Икони" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Датотеки" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Уред:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "ОÑвежи" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Излез:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Режим:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Боја" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Сиво" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Резолуција:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Скен" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Извор:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Скенирај" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "ОÑветленоÑÑ‚" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "КонтраÑÑ‚" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Резолуција" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Промени бои" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Зголеми" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Ðамали" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Ðормална големина" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ðајдобро одговара" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Ротирај Ñтрана" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Избери режим на ротација" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Избери режим на внеÑ" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Избери Ñтрана" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Контроли на Ñлика" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "ЕдноÑтавен текÑÑ‚" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "ÐвтоматÑко детектирање на раÑпоред" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Препознај Ñе" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Избери јазик" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "ЕкÑпорт" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Графички преден план на теÑеракт-оцр" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Групен режим" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Во групниот режим, Ñекој влезен извор Ñе обработува одделно и излезот Ñе " "зачувува до влезната датотека." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "ПоÑтоечки излез:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Припремете бројки на Ñтраница за излезниот текÑÑ‚" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "ÐвтоматÑко детектирање раÑпоред" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "ОпÑег на Страници" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "ОпÑег на Ñтраници:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Пример: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Препознатлив дел:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Цела Ñтрана" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "ÐвтоматÑко детектирање" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Припремете излезен текÑÑ‚:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Име на датотека" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Изворна Ñтрана" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Заштити PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Моментална Ñтрана" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Повеќе Ñтрани..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Режим на група ..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Додади збор" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "ВнеÑи збор:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Додадете нов излез поÑле поÑледната Ñтраница" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "ВнеÑете нов излез пред тековната Ñтраница" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "ЕкÑпортирај како едноÑтавен текÑÑ‚" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "ЕкÑпорт во PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ЕкÑпортирај како ODTÑ" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Додадете документ поÑле поÑледната Ñтраница" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "ВнеÑете документ пред тековната Ñтраница" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Орвори hOCR документ" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Зачувај излез" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "ЕкÑпорт" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ИÑчиÑти излез" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Пронајди и замени" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Прикажи доверливи вредноÑти" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Прикажи преглед" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Следна (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Претходна (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Прошири Ñе" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Скриј" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "ПоÑтавки" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Извор" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Додај на моменталниот текÑÑ‚" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Вметни кај курÑорот (покажувач)" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Замени го моменталниот текÑÑ‚" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Задржи ја новата линија ако..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Претходна ознака (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Претходно или Ñледно по ознака" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Други опции" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Спои поделени зборови" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Пропаѓање на бел проÑтор" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Заштити паÑуÑи" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Визуелни помагала" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "ИÑцртај празен проÑтор" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Орвори hOCR документ" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Прекин на линијата на избраниот текÑÑ‚" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Врати" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Обнови" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Режим за излез:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF Ñо невидливо преклопување на текÑÑ‚" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "КомпреÑија:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Квалитет на компреÑија:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Ðлгоритaм за дитеринг:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "ПодеÑување на Ñлика:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Изедначете го раÑтојанието помеѓу линијата и зборовите" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Отфрли група Ñродни фонтови:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Повлечи група Ñродни фонтови:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Отфрли големина на фонт:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "ОпÑег на фонт:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Зачувај проÑтори пошироки од:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "карактери" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "ИÑчиÑти црти пред прелом на ред" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "ПодеÑување на текÑÑ‚:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Големина на хартија:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Ширина" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "ВиÑина" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Третирајте ги изворните Ñлики како да имаат виÑтинÑки DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "ОÑновен (бејзик)" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF верзија:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Лозинка:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Потврди лозинка:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Енкрипција (опционално):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Ðвтор:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "ÐаÑлов:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Предмет:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Ðвтор:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Продуцент:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Клучни зборови:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Дополнителни информации (опционално):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Увези од тековниот извор" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Ðапредно" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Пронајди" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Замени" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Замени Ñе" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Пронајди претходно" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Пронајди Ñледно" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Совпадни" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Замени" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Избриши" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ред:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Препознава" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Препознај на клипборд" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Зачувај како Ñлика" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Отвори" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Зачувај" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "ИÑчиÑти" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Додади" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Избриши" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata Менаџер" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Управување Ñо инÑталираните јазици:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Слики" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Избери име на излезен документ..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Ðе уÑпеа да Ñе иницира позадината на Ñкенирањето." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "ÐеуÑпешно Ñкенирање" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Ðе Ñе пронајдени Ñкенери." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Започнува Ñкенирање..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Отварање на уредот..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "ПодеÑување опции..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Добивање параметри..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "ПренеÑување податоци ..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Откажување на Ñкенирањето..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð½Ð° име на датотека" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Код" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Матично име" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Скрипта" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Управувач при пад" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Вашата работа беше зачувана како %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Ðемаше зачувана работа." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Ðе уÑпеа да Ñе добие позадина. Дали е инÑталиран GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Ðе уÑпеа да Ñе вчита Ñликата" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Можно е документот да не е Ñлика или е корумпиран:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Страна %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG Слики" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Зачувајте ја Ñликата за избор" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "Ñелекција.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Препознај ги Ñите" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Препознај го Ñелектираното" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Изведување анализа на раÑпоред" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Избери папка..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Ðема ÑугеÑтии" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Додади во речник" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Игнорирај збор" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Страна" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "ТекÑÑ‚ блок" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "ПаÑуÑ" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "ТекÑÑ‚ линија" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "График" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "ЕкÑпортирањето не уÑпеа" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ODT екÑпортирањето не уÑпеа: не може да Ñе запише излезната датотека." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ЕкÑпортирање во ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Операцијата беше откажана" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Ðе уÑпеа да Ñе прикаже Ñтраница %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "ЕкÑпортирај во PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "ЕкÑпортирањето во PDF не уÑпеа: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF библиотеката не може да го вчита фонтот '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Монохром" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Праг (најблиÑка боја)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Дифузно" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Зип (без загуба)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (без загуба)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (Ñо загуба)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "ИÑто како изворот" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "ПриÑпоÑобено" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "во" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "ЕкÑпортирањето текÑÑ‚ не уÑпеа: не може да Ñе запише излезна датотека." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Блок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Линија" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Збор" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Погрешно напишан збор" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Прикажи доверливи вредноÑти" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Следниве Ñтраници не може да бидат обработени:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Грешки при препознавање" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Повеќе вредноÑти" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Спојување" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Одвои од надредено" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Размена" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Додади графички регион" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Додади блок на текÑÑ‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Додади паÑуÑ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Додади линија" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Додади збор" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML Датотеки" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Орвори hOCR документ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Следниве датотеки не може да Ñе отворат:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Следниве датотеки не Ñе валидни hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Ðе може да Ñе отворат датотеките" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "излез" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Зачувај hOCR Излез..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Ðе уÑпеа да Ñе зачува излез" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Проверете дали имате дозвола за пишување во избраната папка." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "ОтвориДокумент ТекÑÑ‚ Документи" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Зачувај ODT Излез..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF Документи" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Зачувај PDF излез..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ðевалиден излез" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Ðе може да Ñе презапише датотека што е изворна Ñлика на овој документ." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "ТекÑÑ‚ Датотеки" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Зачувај Излез на ТекÑÑ‚ ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Излезот не е зачуван" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Зачувајте излез пред да продолжите?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Заменување..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Примена на замени..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Скратеници за таÑтатура" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Линии пред:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Линии по:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 #, fuzzy msgid "" "
    TabNext field
    Shift+TabPrevious field
    DownNext line
    UpPrevious line
    Ctrl+SpaceSpelling suggestions
    Ctrl+EnterAdd word to " "dictionary
    Ctrl+BToggle bold
    Ctrl+IToggle italic
    Ctrl+DDivide word at cursor position
    Ctrl+MMerge " "with previous word
    Ctrl+Shift+MMerge with next " "word
    Ctrl+DeleteDelete word
    Ctrl+{Left,Right}Adjust left bounding box edge
    Ctrl+Shift+{Left,Right}Adjust right bounding box edge
    Ctrl+{Up,Down}Adjust top bounding box edge
    Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
    Ctrl++Increase font size
    Ctrl+-Decrease font size
    " msgstr "" "
    ТабСледно поле
    Shift+TabПретходно поле
    ÐадолеСледна линија
    UpПретходна линија
    Ctrl+SpaceПредлози за Ñпелување
    Ctrl+BИÑклучи болд
    Ctrl+IИÑклучи италик
    Ctrl+DПодели го зборот на меÑтотот на курÑорот
    Ctrl+MСпој Ñо претходниот збор
    Ctrl+Shift+MСпој " "Ñо Ñледниот збор
    Ctrl+{ДеÑно,Лево}Прилагоди ја " "левата граница на кутијата
    Ctrl+Shift+{Лево,ДеÑно}Прилагоди ја деÑната граница на кутијата
    Ctrl+{Up," "Down}Прилагоди ја горната граница на кутијата
    Ctrl+Shift+{Горе,Доле}Прилагоди ја долната граница на " "кутијата
    " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Скратеници на таÑтатура" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Доверба:% 1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "КориÑтење на теÑеракт" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Изберете Ñлика да започнете..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Повеќе извори (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Подготвен" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Ðова верзија" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 iе доÑтапно" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Преземи" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Дневник на измени" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ðе извеÑтувај повторно" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ðе прикажувај повторно" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "ИнÑталирај" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "ÐедоÑтаÑува речник за правопиÑ" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Речникот на Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð° % 1 не е инÑталиран" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Се инÑталира речник за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð° '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Грешка" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Ðе уÑпеа да Ñе инÑталира правопиÑен речник: % 1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ðе уÑпеа да Ñе креира директориум за правопиÑни речници." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Ðе може да прочита %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Преземање '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следниве речници не може да Ñе преземат:\n" "% 1\n" "\n" "Проверете го поврзувањето и дозволите за директориум.\n" "Совет: Ðко немате дозволи за пишување во папките на ÑиÑтемот, можете да " "преминете на кориÑничките патеки во дијалогот за поÑтавки." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "ИнÑталирани Ñе речници" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Следниве речници беа инÑталирани:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Ðе Ñе пронајдени правопиÑни речници за '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Страна: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Залепено %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Излезот не е зачуван" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Зачувајте излез пред да продолжите?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "ОтÑтранување прелом на ред..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Проверете правопиÑ" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Датотека: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Страна: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Ðе уÑпеа да Ñе препознае Ñтраница %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Избери Датотеки" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Зачувај Излез..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Ðема доÑтапни јазици" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Ðема доÑтапни теÑеракт јазици за кориÑтење. Препознавањето нема да работи." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Повеќејазичен" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "ÐвтоматÑка Ñегментација на Ñтраници" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Сегментација на Ñтраници Ñо ориентација и откривање на Ñкрипти" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Претполага една колона од текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Преземање единечен блок на вертикално порамнет текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Преземање единечен блок на вертикално порамнет текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Преземање линија од текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Преземање единечен збор" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Преземање единечен збор во круг" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Редок текÑÑ‚ без поÑебен редоÑлед" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Редок текÑÑ‚ Ñо ориентација и откривање на Ñкрипти" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Режим на Ñегментација на Ñтраници" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Знаци бела лиÑта / црна лиÑта..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Управување Ñо јазици..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Презапишете го поÑтоечкиот излез" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "ПреÑкокнете го изворот на обработка" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Тековен избор" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Се Ñлучија грешки при препознавање" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Ðе уÑпеа да Ñе иницијализира теÑеракт" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Препознавање Ñтраница %1 (%2 од %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Страница %1: не уÑпеа да Ñе направи Ñтраница" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Препознавање..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: не уÑпеа да Ñе прикаже Ñтраница" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: излез веќе поÑтои, преÑкокни" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: не уÑпеа да Ñе креира излезна датотека" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Се Ñлучија Ñледниве грешки:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Скенирањето е откажано" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Ðе е наведен Ñкенер" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Ðе може да Ñе поврзе Ñо Ñкенер" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ðе може да започне Ñкенирање" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Грешка во комуникацијата Ñо Ñкенерот" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Ðе може да Ñе зачува Ñлика" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Операцијата е откажана." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Уредот е зафатен." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Капакот е отворен." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Повлекувачот на документи е заглавен." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Повлекувачот на документи нема документи." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Одбиен е приÑтапот до Ñкенерот." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "ВнеÑи лозинка за датотека '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF Ñо текÑÑ‚" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF датотеката веќе Ñодржи текÑÑ‚:\n" "%1\n" "Без оглед отворете?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Слики и PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Грешка во клипборд" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Ðе уÑпеа да Ñе прочита клипбордот." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Залепено %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Грешка во Ñлика од екранот" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Ðе уÑпеа да Ñе направи Ñлика од екранот." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Слика од екран %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Се зачувува Ñлика..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ðе можам да Ñе запише датотеката" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Ðе можам да Ñе запише на % 1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Избриши датотека?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Да Ñе избришат Ñледниве датотеки?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Зачувај излез" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Пронајдени Ñе и текÑÑ‚ и hOCR излез. Што Ñакате да отворите?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "ÐедоÑтаÑува датотека" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Следната датотека беше избришана или премеÑтена:\n" "% 1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Пребарај за" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Замени Ñо" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "СпиÑок на Измени" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Отвори СпиÑок на Измени" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Грешка при Вчитување на Датотека" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Ðе може да Ñе прочита '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Се појави грешка при вчитување на датотеката" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Ðекои запиÑи од ÑпиÑокот Ñо измени не може да Ñе прочитаат." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Зачувај СпиÑок на Измени" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Грешка при Зачувување на Датотека" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Ðе може да Ñе запише на '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Зачувај ЛиÑта?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Дали Ñакате да ја зачувате тековната лиÑта?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Потребно е поврзување на ÑеÑијата Ñо позадинÑкиот дел на PackageKit за " "управување Ñо ÑиÑтемÑките теÑеракт јазични групи, но не беше пронајдена. " "Оваа уÑлуга обично Ñе обезбедува Ñо апликација за управување Ñо Ñофтвер, " "како што е Ñофтверот Gnome. Ве молиме инÑталирајте Ñофтвер кој го обезбедува " "потребниот PackageKit интерфејÑ, кориÑтете друг Ñофтвер за управување Ñо " "ÑиÑтемÑки пакети за директно управување Ñо ÑиÑтемÑките теÑеракт јазични " "групи или префрлете Ñе на употреба на кориÑничката tessdata патека во " "дијалогот за конфигурација." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Преземање на доÑтапни јазици" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Ðе уÑпеа да Ñе добие ÑпиÑок на доÑтапни јазици: % 1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Грешка при парÑирање: % 1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Примена на промени..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ðе уÑпеа да Ñе креира директориум за датотеки Ñо tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Преземање % 1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следниве датотеки не може да Ñе преземат или отÑтранат::\n" "% 1\n" "\n" "Проверете го поврзувањето и дозволите за директориум.\n" "\n" "Совет: Ðко немате дозволи за пишување во ÑиÑтемÑките папки, можете да " "преминете на кориÑничките патеки во дијалогот за поÑтавки." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Да" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Да за Ñите" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ðе" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Ðе за Ñе" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Отфрли" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Отфрли" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "ТекÑÑ‚" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "За gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

     

    A graphical frontend to tesseract-ocr

    Website

     

    " msgstr "" "

     

    Графички преден план на теÑеракт-оцр

    Веб-Ñтраница

     

    " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Одобрувања" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Лиценца" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Во групниот режим, Ñекој влезен извор Ñе обработува одделно и излезот Ñе " "зачувува до влезната датотека." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Кодирање на ÑиÑтемот" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Кодирање на текÑтуална датотека:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

    The application has " "crashed

    Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

    " msgstr "" "Ðпликацијата падна\n" "\n" "Се извинуваме. За подобрување на апликацијата, Ве молиме пратете извештај за " "проблемот на manisandro@gmail.com. Ве молиме опишете " "што работевте пред да падне апликацијата. Воедно, наведете ги информациите " "подолу. Ви благодариме." #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

    Tesseract has " "aborted

    Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

    The stacktrace below may provide additional information " "about where the crash occurred.

    " msgstr "" "ТеÑеракт Ñе прекина\n" "\n" "ТеÑеракт (ОЦР уредот) прекина за време на препознавање на текÑтот. Ова може " "да Ñе Ñлучи доколку кориÑтените податоци Ñе корумпирани или некомпатибилни " "Ñо тековната верзија на теÑеракт, или поради грешка во теÑеракт. \n" "\n" "Патеката подолу може да обезбеди дополнителни информации за тоа како " "наÑтанала грешката.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Рамна рамка" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Преден ADF" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Заден ADF" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Дупли ADF" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Зголеми" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Ðамали" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Ðормална големина" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ðајдобро Одговара" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Ротирај Лево" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Ротирај лево" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Ротирај ДеÑно" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Ротирај деÑно" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Контроли на Ñлика" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "ÐвтоматÑко детектирање РаÑпоред" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Прикажи/Ñкриј излезна рамка" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF екÑпорт" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "ПозадинÑки дел:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Портрет" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "ПејÑаж" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Пишувањето во датотека не уÑпеа" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
    • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
    • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
    " msgstr "" "
    • PoDoFo: нуди повеќе опции за компреÑија на Ñлики, " "но не може да Ñе Ñправи Ñо Ñложените Ñкрипти.
    • QPrinter: поддржува " "Ñамо JPEG компреÑија за чување Ñлики, но поддржува Ñложени Ñкрипти.
    • " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Зачувај како hOCR текÑÑ‚" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Пронајди и замени" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Прикажи преглед" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "ИнÑталирани Ñе Ñледниве датотеки за речник:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Ðема Ñкорешни документи" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Избришете Датотеки" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следниве датотеки не може да Ñе преземат или отÑтранат:\n" "%1\n" "\n" "Проверете го поврзувањето и дозволите за директориум.\n" "Совет: Ðко немате дозволи за пишување во ÑиÑтемÑките папки, можете да " "преминете на кориÑничките патеки во дијалогот за поÑтавки." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Излез" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR режим:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Додади папка" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Залепи" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ðаправи Ñкриншот" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "ОтÑтрани Слика" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Избриши Слика" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "ИÑчиÑти ЛиÑта" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Одземи Прелом на Ред" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Зачувај Излез" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ИÑчиÑти Излез" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Формат:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Датотеката \"% 1\" веќе поÑтои. Дали Ñте Ñигурни дека Ñакате да Ñе " #~ "презапише?" #~ msgid "Overwrite File?" #~ msgstr "Презапишување датотека?" #~ msgid "Recent" #~ msgstr "Ðедамнешно" #~ msgid "Failed to create output" #~ msgstr "Ðе уÑпеа да Ñе креира излез" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Ðе уÑпеа да Ñе креира излез. Повратната грешка беше: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Ðпликацијата " #~ "падна

      Се извинуваме. За подобрување на апликацијата, Ве " #~ "молиме пратете извештај за проблемот на manisandro@gmail.com. Ве молиме " #~ "опишете што работевте пред да падне апликацијата. Воедно, наведете ги " #~ "информациите подолу. Ви благодариме.

      " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      ТеÑеракт Ñе " #~ "прекина

      ТеÑеракт (ОЦР уредот) прекина за време на " #~ "препознавање на текÑтот. Ова може да Ñе Ñлучи доколку кориÑтените " #~ "податоци Ñе корумпирани или некомпатибилни Ñо тековната верзија на " #~ "теÑеракт, или поради грешка во теÑеракт.

      Патеката подолу може да " #~ "обезбеди дополнителни информации за тоа како наÑтанала грешката.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Пример: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "ЕдноÑтавен текÑÑ‚" #~ msgid "Multiple sources" #~ msgstr "Повеќе извори" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Страна %1: не уÑпеа да Ñе прикаже Ñтраница" #~ msgid "The following errors occurred:%1" #~ msgstr "Се Ñлучија Ñледниве грешки:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Следниве датотеки ќе бидат избришани:% 1" gImageReader-3.4.0/po/nb_NO.po000066400000000000000000002443471417507262200160270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-19 18:53+0000\n" "Last-Translator: ovl-1 \n" "Language-Team: Norwegian BokmÃ¥l \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Tekstgjenkjenningsprogram" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Oppdag sprÃ¥k pÃ¥ nytt" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "HÃ¥ndter sprÃ¥k" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Innstillinger" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Hjelp" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Om" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Avslutt" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Svarteliste / hvitliste for tegn" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Utelukk disse tegnene fra gjenkjennelse (svarteliste):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Angi en streng med tegn…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Kun tillat de følgende tegnene Ã¥ bli gjenkjent (hviteliste):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Sideretning for utdatatekst:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Vannrett" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Loddrett" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "ForeslÃ¥ installasjon av manglende ordlister" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Se etter nye programvareversjoner automatisk" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ForhÃ¥ndsoppsatte sprÃ¥kdefinisjoner:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Ytterligere sprÃ¥kdefinisjoner:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 #, fuzzy msgid "The prefix of the tesseract language data file" msgstr "Prefiks for tesseracts sprÃ¥kdatafil" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefiks" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 -sprÃ¥kkode, fulgt av landskode" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO-kode" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "SprÃ¥kets navn" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Navn" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Avbryt" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Skrift for utdatapanel:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Forvalg" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "SprÃ¥kdatalokaliteter:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "SprÃ¥kdefinisjonssti:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Staveordbokssti:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Systemomfattende stier" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Brukerstier" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Ã…pne eksporterte dokumenter automatisk med standardprogram" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Gjenskap tilbakesporing" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Programmet har krasjet\n" "\n" "Innrapporter problemet til manisandro@gmail.com for Ã¥ forbedre " "programmet. Beskriv hva du gjorde før det krasjet sammen med informasjonen " "nedenfor. Takk." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract har avsluttet\n" "\n" "Tesseract (OCR-motoren) har avsluttet under gjenkjennelse av tekst. Dette " "kan skje hvis traineddata-filene som brukes er skadet eller inkompatible med " "versjonen av Tesseract som er i bruk, eller pga. av en feil i Tesseract.\n" "\n" "Stabelspor nedenfor kan gi ytterligere info om hvor krasjet oppstod.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "HOCR-multi-eksport" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Bruk" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Lukk" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Velg kildemappe:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 #, fuzzy msgid "Group outputs of N lowest levels:" msgstr "Grupper utdata for N laveste nivÃ¥er:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Inndata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Utdata-forhÃ¥ndsvisning:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Inndatafiler" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Eksportalternativer" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Vis/skjul utdatapanel" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Roter gjeldende side" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Roter alle sider" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Kilder" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Legg til bilder" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Legg til bilder" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Fjern bilde fra liste" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Slett bilde" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Tøm liste" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniatyrbilder" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Filer" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Enhet:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Gjenoppfrisk" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Utdata:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modus:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Farge" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "GrÃ¥skala" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Oppløsning:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skann" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Kilde:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Skanning" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Lysstyrke" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Oppløsning" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverter farger" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Forstørr" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Forminsk" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normal størrelse" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Tilpass til side" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Roter side" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Velg rotasjonsmodus" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Velg innsettingsmodus" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Velg side" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Bildetilpasning" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Ren tekst" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Auto-detekter layout" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Gjenkjenn alt" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Velg sprÃ¥k" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Multi-eksport" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "En grafisk grenseflate for tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Multi-modus" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "I multi-modus er hver inndatakilde behandlet for seg og utdata lagret " "side-ved-side med inndatafilen." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Eksisterende utdata:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Legg til sidenummer før utdatatekst" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Auto-detekter sidelayout" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "SideomrÃ¥de" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Sider:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Eksempel: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "GjenkjennelsesomrÃ¥de:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Hele siden" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Oppdag automatisk" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Legg til før utdatatekst:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Kilde-filnavn" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Kildeside" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Beskyttet PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "NÃ¥værende side" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Flere sider…" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Multi-modus..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Legg til ord" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Skriv inn ord:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Legg til ny utdata etter siste side" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Sett inn ny utdata før gjeldende side" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Eksporter til ren tekst" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Eksporter til PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Eksporter til ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Legg ved dokument etter siste side" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Sett inn dokument før gjeldende side" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Ã…pne hOCR-fil" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Lagre utdata" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Eksporter" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Tøm utdata" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Søk og erstatt" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Vis trygghetsnivÃ¥er" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Vis forhÃ¥ndsvisning" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Neste (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Forrige (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Utvid alle" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Fold sammen alle" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Egenskaper" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Kilde" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Legg ved gjeldende tekst" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Sett inn ved markør" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Erstatt gjeldende tekst" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Behold linjeskift hvis..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Setningsendetegn stÃ¥r foran (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Anførselstegn stÃ¥r foran eller bak" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Andre valg" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Fjern linjeendebindestrek" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 #, fuzzy msgid "Collapse whitespace" msgstr "Ta bort blanktegn" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Bevar avsnitt" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Visuelle hjelpemidler" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Tegn blanktegn" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Ã…pne fil" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Fjern linjeskift i markert tekst" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Angre" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Gjør om" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Ny fane" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Utdatamodus:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF med usynlig tekstoverlag" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Komprimering:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Komprimeringskvalitet:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Dithering-algoritme:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Bildeinnstillinger:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Ensartet linje- og ordavstand" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Overstyr skriftfamilie:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Tilbakefallsskriftfamilie:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Overstyr skriftstørrelse:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Skriftskalering:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Behold mellomrom større enn:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "tegn" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Korriger bindestrek før linjeskift" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Tekstinnstillinger:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Papirstørrelse:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Bredde" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Høyde" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "HÃ¥ndter bildekilder som om de har fastsatt DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Grunnleggende" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF-versjon:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Passord:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Bekreft passord:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Kryptering (valgfritt):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Forfatter:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Tittel:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Emne:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Opphavsmann:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produsent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Nøkkelord:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Ytterligere informasjon (valgfritt):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importer fra gjeldende kilde" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avansert" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Finn" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Erstatt" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Erstatt alle" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Finn forrige" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Finn neste" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Skill mellom store/smÃ¥ bokstaver" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Erstatninger" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Slett" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Rekkefølge:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Gjenkjenn" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Kopier gjenkjennelse til utklippstavle" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Lagre som bilde" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Ã…pne" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Lagre" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Tøm" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Legg til" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Fjern" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata-behandler" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "HÃ¥ndter installerte sprÃ¥k:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "skanning.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Bilder" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Velg utdatafilnavn…" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Klarte ikke Ã¥ igangsette skanning-backend." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skanning mislyktes" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Fant ingen skannere." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Starter skanning…" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Ã…pner enhet…" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Setter valg…" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Henter parametere..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Overfører data…" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Avbryter skanning…" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Filnavnsforstavelse" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kode" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Opprinnelig navn" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 #, fuzzy msgid "Script" msgstr "Skript" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Krasj-hÃ¥ndterer" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Ditt arbeide har blitt lagret under %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Inget arbeid Ã¥ lagre." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Klarte ikke Ã¥ hente tilbakesporing. Er GDB installert?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Klarte ikke Ã¥ laste bilde" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Det kan hende filen ikke er et bilde, eller er skadet:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Side %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG-bilder" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Lagre utvalg som bilde" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 #, fuzzy msgid "selection.png" msgstr "utvalg.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Gjenkjenn alt" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Gjenkjenn utvalg" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Utfører layout-analyse" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Midlertidige filer" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Velg mappe..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Ingen forslag" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Legg til i ordbok" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorer ord" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Side" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Tekstblokk" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Avsnitt" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Tekstrad" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafisk" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Eksport mislyktes" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 #, fuzzy msgid "The ODT export failed: unable to write output file." msgstr "ODT-eksport mislyktes: Kunne ikke skrive utdatafil." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Eksporterer til ODT…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operasjonen ble avbrutt" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Klarte ikke Ã¥ tegne side %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Eksporterer til PDF…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "PDF-eksport mislyktes: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 #, fuzzy msgid "The PDF library could not load the font '%1'." msgstr "PDF-biblioteket kunne ikke laste skriften \"%1\"." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Ensfarget" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Terskel (nærmeste farge)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffus" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "ZIP (tapsfri)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Gruppe 4 (tapsfri)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "JPEG (tapsbasert)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Samme som kilde" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Egendefinert" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "tommer" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 #, fuzzy msgid "The text export failed: unable to write output file." msgstr "Teksteksport mislyktes: Kunne ikke skrive utdatafil." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blokk" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linje" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Feilstavet ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Vis trygghetsnivÃ¥er" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Følgende sider kunne ikke behandles:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Gjenkjennelsesfeil" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Flerfoldige verdier" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Flett" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Del opp fra opphav" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Bytte" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Legg til grafisk region" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Legg til tekstblokk" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Legg til avsnitt" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Legg til rad" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Legg til ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCD-HTML-filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Ã…pne hOCR-fil" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Følgende filer kunne ikke Ã¥pnes:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Følgende filer later ikke til Ã¥ inneholde gyldig hOCR-HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Kunne ikke Ã¥pne filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Lagre hOCR-utdata…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Klarte ikke Ã¥ lagre utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Sjekk at du har skrivetillatelse i den valgte mappen." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument-Tekstdokumenter" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Lagre ODT-utdata…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Lagre PDF-utdata…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ugyldig utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Kan ikke overskrive en fil som er et kildebilde i dette dokumentet." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Tekstfiler" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Lagre tekstutdata…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Utdata ikke lagret" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Lagre utdata før du fortsetter?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Erstatter…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Erstatninger blir gjennomført..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Tastatursnarveier" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linjer før:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linjer etter:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabNeste felt
      Shift+TabForrige felt
      Pil nedNeste linje
      Pil oppForrige linje
      Ctrl+MellomromStaveforslag
      Ctrl+EnterLegg til ord i " "ordbok
      Ctrl+BFet skrift
      Ctrl+IKursiv
      Ctrl+DDel ord på pekerposisjon
      Ctrl+MFlett med forrige ord
      Ctrl+Shift+MFlett med neste ord
      Ctrl+DeleteSlett ord
      Ctrl+{Venstre," "Høyre}Juster venstre kant av avgrensningsboks
      Ctrl+Shift+{Venstre,Høyre}Juster høyre kant av " "avgrensningsboks
      Ctrl+{Opp,Ned}Juster øvre kant av " "avgrensningsboks
      Ctrl+Shift+{Opp,Ned}Juster nedre " "kant av avgrensningsboks
      Ctrl++Øk skriftstørrelse
      Ctrl+-Reduser skriftstørrelse
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Tastatursnarveier" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 #, fuzzy msgid "Confidence: %1" msgstr "Tillitsnivå: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Bruker tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Velg et bilde for å begynne..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Flere kilder (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Klar" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Ny versjon" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 er tilgjengelig" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Last ned" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Endringslogg" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ikke gi beskjed igjen" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ikke vis igjen" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installer" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Stavingsordbok mangler" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Stavingsordbok for %1 er ikke installert" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Installerer staveordbok for '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Feil" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Klarte ikke å installere stavingsordbok: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Klarte ikke å opprette mappe for stavingsordbøker." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Kunne ikke lese %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Laster ned \"%1\"…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Følgende ordbøker kunne ikke lastes ned:\n" "%1\n" "\n" "Sjekk tilkobling- og mappetilganger.\n" "Hint: Hvis du ikke har skrivetilganger i systemmapper, kan du bytte til " "brukerstier i innstillingsdialogen." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Ordbøker installert" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Følgende ordbøker ble installert:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Ingen staveordbøker funnet for '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Side: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Lukk dokument" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Limte inn %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Utdata ikke lagret" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Lagre utdata før du fortsetter?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Fjerner linjeskift…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Ingen fremheving" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Fremhevingsmodus" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Stavekontroll" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "%1 forekomster erstattet" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Fil: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Side: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Kunne ikke tolke siden %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Velg filer" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Lagre utdata…" #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Lukk dokument" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "Følgende dokumenter har ulagrede endringer. Hvilke av dem vil du lagre før " "du fortsetter?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Ingen språk tilgjengelig" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Ingen Tesseract-språkfiler er tilgjengelige for bruk. Tekstgjenkjennelse vil " "ikke fungere." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Flerspråklig" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatisk sideinndeling" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Sideinndeling med sidreretning og skript-oppdagelse" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Anta én tekstkolonne" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Anta én blokk med vannrett-anordnet tekst" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Anta én helhetlig blokk med tekst" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Anta én linje med tekst" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Anta ett ord" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Anta ett ord i en sirkel" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Tolk tekst i vilkårlig rekkefølge" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Tolk tekst med sideretning- og skriptoppdagelse" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Sideinndelingsmodus" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Svarteliste / hviteliste for tegn…" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Håndter språk …" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Overskriv eksisterende utdata" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Hopp over behandling av kilde" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Nåværende utvalg" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Gjenkjennelsesfeil oppstod" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 #, fuzzy msgid "Failed to initialize tesseract" msgstr "Klarte ikke å igangsette Tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Kilden er allerede gjenkjent" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "En eller flere valgte kilder er allerede gjenkjent. Fortsette uansett?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Tolker side %1 (%1 av %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Side %1: Klarte ikke å tegne siden" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Tolker…" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: Klarte ikke å tegne siden" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: utdata finnes allerede, hopper over" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: Klarte ikke å opprette utdatafil" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Følgende feil oppstod:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skanning avbrutt" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Ingen skanner angitt" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Klarte ikke å koble til skanner" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Klarte ikke å starte skanning" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Feil under kommunisering med skanner" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Klarte ikke å lagre bilde" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operasjonen er avbrutt." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Enheten er opptatt." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Dekselet er åpnet." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Dokumentmateskuffen har kilt seg." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Dokumentmateskuff tom." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Tilgang til skriver nektet." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Skriv inn passordet for filen \"%1\":" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF med tekst" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Disse PDF-filene inneholder allerede tekst:\n" "%1\n" "Åpne uansett?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Bilder og PDF-er" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Utklippstavlefeil" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Klarte ikke å lese utklippstavlen." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Limte inn %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Skjermbildefeil" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Kunne ikke ta skjermbilde." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Skjermbilde %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Lagrer bilde..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Kan ikke skrive fil" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Kunne ikke skrive til %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Slett fil?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Slett følgende filer?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Åpne utdata" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Både tekst og hOCR-utdata ble funnet. Hvilken av dem ønsker du å åpne?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Manglende fil" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Følgende fil har blitt slettet eller flyttet:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Søk etter" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Erstatt med" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Erstatningsliste" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Åpne erstatningsliste" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Feil under lesing av fil" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Kunne ikke lese \"%1\"." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Feil inntraff under lesing av fil" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Noen oppføringer i erstatningslisten kunne ikke leses." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Lagre erstatningsliste" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Feil under lagring av fil" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Kunne ikke skrive til \"%1\"." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Lagre liste?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Ønsker du å lagre nåværende liste?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "En øktforbindelse til PackageKit-backend kreves for å håndtere Tesseract-" "språkpakker for hele systemet, men ble ikke funnet. Denne tjenesten leveres " "vanligvis av et programvareadministrasjonsprogram som Gnome Software. " "Installer programvare som gir det nødvendige PackageKit-grensesnittet , bruk " "annen systempakkehåndteringsprogramvare for å administrere Tesseract-" "språkpakker direkte, eller bytt til å bruke bruker-tessdatabane i " "oppsettsdialogen." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Henter tilgjengelige språk" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Klarte ikke å hente listen over tilgjengelige språk: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Tolkningsfeil: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 #, fuzzy msgid "Applying changes..." msgstr "Utfører endringer…" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Klarte ikke å opprette mappe for tessdata-filer." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Laster ned %1 …" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Følgende filer kunne ikke lastes ned eller fjernes:\n" "%1\n" "\n" "Sjekk nettforbindelsen og mappetillatelsene.\n" "\n" "Hint: Hvis du ikke har skriverettigheter til systemmapper, kan du bytte til " "en brukerprofilmappe i innstillingsdialogen." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Ja" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Ja til alt" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Nei" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nei til alt" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Forkast" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Forkast" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Tekst" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Om gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      Grafisk grenseflate for tesseract-ocr

      Nettside

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Bidragsytere" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Lisens" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "I multi-modus er hver inndatakilde behandlet for seg og utdata lagret side-" "ved-side med inndatafilen." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Systemtegnkoding" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Tekstfilkoding:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Programmet har " "krasjet

      Beklager bryderiet. For å forbedre programmet, overvei " "å innrapportere problemet til manisandro@gmail.com. Prøv å beskrive hva " "du gjorde før programmet krasjet. Inkluder også informasjonen nedenfor. Takk." "

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      Tesseract har " "avsluttet

      Tesseract (OCR-motoren) har avsluttet under " "gjenkjennelse av tekst. Dette kan skje hvis traineddata-filene som brukes er " "skadet eller inkompatible med versjonen av Tesseract som er i bruk, eller " "pga. av en feil i Tesseract.

      Stabelsporet nedenfor kan gi ytterligere " "info om hvor krasjet oppstod.

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Bordscanner" #: ../qt/data/MainWindow.ui.h:19 #, fuzzy msgid "ADF Front" msgstr "ADF-forside" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF-bakside" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Tosidig ADF" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Forstørr" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Forminsk" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normal størrelse" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Beste tilpasning" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Roter til venstre" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Roter til venstre" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Roter til høyre" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Roter til høyre" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Bildeanpasning" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Oppdag sideretning automatisk" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Vis/skjul utdatapanel" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF-eksport" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Stående" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Liggende" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Klarte ikke å skrive til fil" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: Tilbyr flere " "bildekomprimeringsalternativer, men hÃ¥ndterer ikke komplekse skript.
      • QPrinter: Støtter kun JPEG-komprimering for lagring av bilder, men " "støtter komplekse skript.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Lagre som hOCR-tekst" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Finn og erstatt" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Vis forhåndsvisning" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Følgende ordbøker ble installert:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Ingen nylige filer" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Slett filer" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Følgende filer kunne ikke lastes ned eller fjernes:\n" "%1\n" "\n" "Sjekk nettforbindelsen og mappetillatelsene.\n" "Hint: Hvis du ikke har skriverettigheter til systemmapper, kan du bytte til " "en brukerprofilmappe i innstillingsdialogen." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Utdata" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR-modus:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Legg til mappe" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Lim inn" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ta skjermbilde" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Fjern bilde" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Slett bilde" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Tøm liste" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Fjern linjeskift" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Lagre utdata" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Tøm utdata" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Legg til fane" #, fuzzy #~ msgid "Form" #~ msgstr "Format:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Fil ved navn \"%1\" finnes allerede. Er du sikker på at du vil overskrive " #~ "den?" #~ msgid "Overwrite File?" #~ msgstr "Overskriv fil?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Det er %1 dokumenter med ulagrede endringer" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Lagre endringer før lukking? Hvis du ikke lagrer vil alle endringene dine " #~ "bli tapt permanent.\n" #~ "Velg dokumentene du vil lagre:" #~ msgid "New document %1" #~ msgstr "Nytt dokument %1" #~ msgid "Recent" #~ msgstr "Nylig åpnet" #~ msgid "Failed to create output" #~ msgstr "Klarte ikke å opprette utdata" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Klarte ikke å opprette utdata. Feilmeldingen er: %1" #, fuzzy #~ msgid "" #~ "<html><head/><body><p>&nbsp;</p><" #~ "p>A graphical frontend to tesseract-ocr</p><p><a " #~ "href="https://github.com/manisandro/gImageReader/">" #~ "Website</a></p><p>&nbsp;</p></body></" #~ "html>" #~ msgstr "" #~ "

       

      Grafisk grenseflate for tesseract-ocr

      Nettside

       

      " #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Programmet har " #~ "krasjet

      Beklager bryderiet. For å forbedre programmet, " #~ "overvei å innrapportere problemet til manisandro@gmail.com. Prøv å " #~ "beskrive hva du gjorde før programmet krasjet. Inkluder også " #~ "informasjonen nedenfor. Takk.

      " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract har " #~ "avsluttet

      Tesseract (OCR-motoren) har avsluttet under " #~ "gjenkjennelse av tekst. Dette kan skje hvis traineddata-filene som brukes " #~ "er skadet eller inkompatible med versjonen av Tesseract som er i bruk, " #~ "eller pga. av en feil i Tesseract.

      Stabelsporet nedenfor kan gi " #~ "ytterligere info om hvor krasjet oppstod.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Eksempel: 1-10, 13, 14-18" #~ msgid "Multiple sources" #~ msgstr "Flerfoldige kilder" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Side %1: Klarte ikke å tegne siden" #, fuzzy #~ msgid "The following errors occurred:%1" #~ msgstr "Følgende feil inntraff: %1" #, fuzzy #~ msgid "The following files will be deleted:%1" #~ msgstr "Følgende filer vil bli slettet: %1" #~ msgid "Amount of occurrences replaced: %1" #~ msgstr "Antall forekomster erstattet: %1" #~ msgid "Syntax highlight mode:" #~ msgstr "Syntaksfremhevingsmodus:" #~ msgid "One or more selected sources were aready recognized. Proceed anyway?" #~ msgstr "" #~ "En eller flere valgte kilder er allerede gjenkjent. Fortsette uansett?" #, fuzzy #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #, fuzzy #~ msgid "Group outputs at level:" #~ msgstr "Grupper utdata på nivå:" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Antall forekomster erstattet: %1" #, fuzzy #~ msgid "plain text" #~ msgstr "Ren tekst" #~ msgid "Failed to open file" #~ msgstr "Klarte ikke å åpne fil" #~ msgid "The file could not be opened: %1." #~ msgstr "Kunne ikke åpne fil: %1" #~ msgid "Invalid hOCR file" #~ msgstr "Ugyldig hOCR-fil" #~ msgid "The application has crashed" #~ msgstr "Programmet har kræsjet" #, fuzzy #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract kræsjet med følgende feilmelding:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Dette skjer typisk fordi:\n" #~ "- Utdaterte traneddata-filer i bruk.\n" #~ "- Støtte for språkdatafiler mangler.\n" #~ "- Skadede språkdatafiler.\n" #~ "\n" #~ "Forsikre deg om at dine språkdatafiler er gyldige og kompatible med " #~ "Tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Kunne ikke lese %1: %2" #~ msgid "90" #~ msgstr "90" #~ msgid "300" #~ msgstr "300" #~ msgid "100" #~ msgstr "100" #~ msgid "10" #~ msgstr "10" #~ msgid "%" #~ msgstr "%" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" gImageReader-3.4.0/po/nl.po000066400000000000000000002456031417507262200154410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-18 02:54+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR-toepassing" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Talen opnieuw detecteren" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Talen beheren" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Voorkeuren" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Hulp" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Over" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Afsluiten" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Witte en zwarte lijst met tekens" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Herken deze tekens niet (zwarte lijst):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Voer een tekenreeks in…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Herken alleen de volgende tekens (witte lijst):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Oké" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Oriëntatie van uitvoerpaneel:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontaal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Verticaal" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Opdracht om ontbrekende woordenboek te installeren" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatisch controleren op nieuwe versies" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Vooraf gedefinieerde taaldefinities:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Extra taaldefinities:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Het voorvoegsel van het tesseract-taalgegevensbestand" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Voorvoegsel" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "De ISO 639-1 taalcode, gevolgd door de landcode" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO-code" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "De naam van de taal" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Naam" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Annuleren" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Lettertype van uitvoerpaneel:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Standaard" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Taalgegevens-locaties:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Locatie van taaldefinities:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Spellingcontrole-woordenboeklocatie:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Systeembrede locaties" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Gebruikerslocaties" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Geëxporteerde documenten automatisch openen met standaardtoepassing" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Backtrace hergenereren" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "De toepassing is gecrasht.\n" "\n" "Excuses voor het ongemak. Als u wilt helpen om de toepassing te verbeteren, " "overweeg dan om het probleem te melden aan manisandro@gmail.com. Omschrijf wat u " "aan het doen was voordat de toepassing crashte. Vermeld tevens onderstaande " "informatie. Bij voorbaat dank." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract is onverwachts beëindigd\n" "\n" "Tesseract (de OCR-aandrijving) is onverwachts afgebroken tijdens het " "herkennen van tekst. Dit kan gebeuren als de trainingsdata beschadigd is of " "incompatibel met de gebruikte versie van tesseract, of door een bug in " "tesseract.\n" "\n" "Onderstaande stacktrace bevat mogelijk aanvullende informatie over de " "crash.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "HOCR-serie-export" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Toepassen" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Sluiten" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Kies de bronmap:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formaat:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "Uitvoerbestanden groeperen op aantal laagste niveaus:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Invoer:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Uitvoervoorvertoning:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Invoerbestanden" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Exportopties" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Uitvoerpaneel tonen/verbergen" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Huidige pagina draaien" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Alle pagina's draaien" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Bronnen" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Afbeeldingen toevoegen" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Afbeeldingen toevoegen" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Afbeelding verwijderen uit lijst" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Afbeelding verwijderen" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Lijst wissen" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniatuurvoorbeelden" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Bestanden" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Apparaat:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Verversen" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Uitvoer:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modus:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Kleur" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Grijswaarden" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolutie:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Scannen" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Bron:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Verkrijgen" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Helderheid" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolutie" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Kleuren omdraaien" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Inzoomen" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Uitzoomen" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normale grootte" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Passend" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Pagina draaien" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Draaimodus selecteren" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Invoegmodus selecteren" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Pagina selecteren" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Afbeeldingsregelaars" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Platte tekst" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Indeling automatisch detecteren" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Alles herkennen" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Taal selecteren" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Serie exporteren" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Een grafisch front-end voor tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Seriemodus" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "In de seriemodus wordt elke invoerbron apart verwerkt en de uitvoer " "opgeslagen naast het invoerbestand." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Bestaande uitvoer:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Paginanummers toevoegen aan uitvoertekst" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Indeling automatisch detecteren" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Paginabereik" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Paginabereik:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Bijvoorbeeld: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Herkenningsgebied:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Gehele pagina" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatisch detecteren" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Vastmaken aan uitvoertekst:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Bestandsnaam van bron" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Bronpagina" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Beveiligd pdf-bestand" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Huidige pagina" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Meerdere pagina's…" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Seriemodus…" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Woord toevoegen" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Voer een woord in:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Nieuwe uitvoer invoegen na laatste pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Nieuwe uitvoer invoegen vóór huidige pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exporteren naar platte tekst" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exporteren naar pdf" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exporteren naar odt" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Document invoegen na laatste pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Document invoegen vóór huidige pagina" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR-bestand openen" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Uitvoer opslaan" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exporteren" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Uitvoer wissen" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Zoeken en vervangen" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Vertrouwenswaarden tonen" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Voorvertonen" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Volgende (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Vorige (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Alles uitklappen" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Alles inklappen" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Eigenschappen" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Bron" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Toepassen op huidige tekst" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Invoegen op cursorlocatie" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Huidige tekst vervangen" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Regelafbreking behouden als…" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "deze voorafgaat aan een leesteken (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "deze voorafgaat aan of gevolgd wordt door een dubbel aanhalingsteken" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Andere opties" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Afgebroken woorden samenvoegen" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Witruimte inklappen" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Paragrafen behouden" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Visuele hulpmiddelen" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Witruimte intekenen" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Bestand openen" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Regelafbrekingen verwijderen uit geselecteerde tekst" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Ongedaan maken" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Opnieuw" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nieuw tabblad" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Uitvoermodus:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF met onzichtbare tekstlaag" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compressie:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Compressiekwaliteit:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Rasteralgoritme:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Afbeeldingsinstellingen:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Regel- en woordtussenruimte consistent maken" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Lettertypefamilie overschrijven:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Terugval-lettertypefamilie:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Lettertype grootte overschrijven:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Lettertypeschaal:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Spaties behouden die breder zijn dan:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "tekens" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Streepjes voorafgaand aan regelafbrekingen verwijderen" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Tekstinstellingen:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Papiergrootte:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Breedte" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Hoogte" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Behandel afbeeldingsbronnen met werkelijke DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Basis" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF-versie:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Wachtwoord:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Wachtwoord bevestigen:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Versleuteling (optioneel):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Auteur:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titel:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Onderwerp:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Maker:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Producent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Sleutelwoorden:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Extra informatie (optioneel):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importeren uit huidige bron" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Geavanceerd" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Zoeken" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Vervangen" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Alles vervangen" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Vorige zoeken" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Volgende zoeken" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Hoofdlettergevoelig" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Vervangingen" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Verwijderen" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Volgorde:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Herkennen" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Herkennen naar klembord" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Opslaan als afbeelding" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Openen" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Opslaan" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Wissen" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Toevoegen" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Verwijderen" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata-beheerder" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Geïnstalleerde talen beheren:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Afbeeldingen" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Kies uitvoerbestandsnaam…" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Het initialiseren van het scan-back-end is mislukt." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Scannen mislukt" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Er zijn geen scanners gevonden." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Bezig met starten van scan…" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Bezig met openen van apparaat…" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Bezig met instellen van opties…" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Bezig met verkrijgen van aanvullende opties…" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Bezig met overdragen van gegevens…" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Bezig met afbreken van scan…" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Bestandsextensie" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Code" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Naam" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Script" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Crash-afhandeling" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Uw werk is opgeslagen als %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Er is geen niet-opgeslagen werk." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Het verkrijgen van een backtrace is mislukt. Is gdb geïnstalleerd?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Afbeelding laden mislukt" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Het bestand is geen afbeelding of het is corrupt:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Pagina %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG-afbeeldingen" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Geselecteerde afbeelding opslaan" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selectie.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Alles herkennen" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Selectie herkennen" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Bezig met uitvoeren van indelingsanalyse" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Tijdelijke bestanden" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Kies een map…" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Geen suggesties" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Toevoegen aan woordenboek" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Woord negeren" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Pagina" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Tekstblok" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragraaf" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Tekstregel" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafisch" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Exporteren is mislukt" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" "De odt-export is mislukt: het is niet mogelijk om te schrijven naar het " "uitvoerbestand." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Bezig met exporteren naar odt…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "De handeling is afgebroken" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Renderen van pagina %1 is mislukt" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Bezig met exporteren naar pdf…" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "De pdf-export is mislukt: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "De pdf-bibliotheek kan het lettertype ‘%1’ niet laden." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monochroom" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Drempel (dichtstbijzijnde kleur)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Onscherp" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (verliesvrij)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Groep 4 (verliesvrij)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (verliesvrij)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Gelijk aan bron" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Aangepast" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "De tekstexport is mislukt: het is niet mogelijk om te schrijven naar het " "uitvoerbestand." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Regel" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Woord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Onjuist gespeld woord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Vertrouwenswaarden tonen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "De volgende pagina's kunnen niet worden verwerkt:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Herkenningsfouten" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Meerdere waarden" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Samenvoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Splitsen van hoofdgedeelte" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Omwisselen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Grafische regio toevoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Tekstblok toevoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Paragraaf toevoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Regel toevoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Woord toevoegen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML-bestanden" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "hOCR-bestand openen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "De volgende bestanden kunnen niet worden geopend:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Het bestand lijkt geen geldige hOCR HTML te bevatten:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Openen van bestanden mislukt" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "uitvoer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "hOCR-uitvoer opslaan…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Uitvoer opslaan is mislukt" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Controleer of u schrijfrechten heeft in de geselecteerde map." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument-tekstdocumenten" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT-uitvoer opslaan…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-bestanden" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "PDF-uitvoer opslaan…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ongeldige uitvoer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Kan geen bestand overschrijven dat een bronafbeelding is van dit document." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Tekstbestanden" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Tekstuitvoer opslaan…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Uitvoer is niet opgeslagen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Wilt u de uitvoer opslaan alvorens door te gaan?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Bezig met vervangen…" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Bezig met toepassen van vervangingen…" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Sneltoetsen" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Regel voor:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Regels na:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabVolgende veld
      Shift+TabVorige veld
      Pijltje omlaagVolgende regel
      Pijltje omhoogVorige regel
      Ctrl+spatiebalkSpellingcontrolesuggesties
      Ctrl+BVetgedrukt aan/uit
      Ctrl+ICursief aan/uit
      Ctrl+DWord splitsen vanaf " "cursorpositie
      Ctrl+MSamenvoegen met vorige woord
      Ctrl+Shift+MSamenvoegen met volgende woord
      Ctrl+{pijltje naar links,rechts}Linkerveldrand " "aanpassen
      Ctrl+Shift+{pijltje naar links,rechts}Rechterveldrand aanpassen
      Ctrl+{pijltje omhoog," "omlaag}Bovenste veldrand aanpassen
      Ctrl+Shift+{pijltje omhoog,omlaag}Onderste veldrand " "aanpassen
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Sneltoetsen" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Zekerheid: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Gebruikmakend van tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Kies een afbeelding…" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Meerdere bronnen (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Klaar" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nieuwe versie" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 is beschikbaar" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Downloaden" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Wijzigingslog" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Niet meer melden" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Niet meer tonen" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installeren" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Ontbrekend woordenboek" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" "Het woordenboek voor %1, benodigd voor de spellingcontrole, is niet " "geïnstalleerd" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Bezig met installeren van woordenboek voor ‘%1’" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Fout" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Het installeren van het woordenboek is mislukt: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Het creëren van de map voor de woordenboeken is mislukt." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "%1 kan niet worden gelezen: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Bezig met downloaden van ‘%1’…" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "De volgende woordenboeken kunnen niet worden gedownload:\n" "%1\n" "\n" "Controleer uw internetverbinding en maprechten.\n" "Tip: als u geen schrijfrechten hebt in systeemmappen, dan kunt u in de " "instellingen de locatie wijzigen naar een gebruikersmap." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "De woordenboeken zijn geïnstalleerd" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "De volgende woordenboeken zijn geïnstalleerd:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Geen woordenboeken gevonden voor ‘%1’." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Pagina: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Document sluiten" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Naamloos %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Het document is niet opgeslagen" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Wilt u het document opslaan alvorens door te gaan?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Bezig met verwijderen van regeleindes…" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Niets markeren" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Markeermodus" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Spelling controleren" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "Aantal vervangingen: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Bestand: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Pagina: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Het herkennen van pagina %1 is mislukt]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Bestanden selecteren" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Uitvoer opslaan…" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Niet-opgeslagen documenten" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "De volgende documenten zijn niet opgeslagen. Welke wilt u opslaan alvorens " "door te gaan?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Geen beschikbare talen" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Er zijn geen tesseract-talen beschikbaar; de herkenningsfunctie zal niet " "werken." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Meertalig" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatische paginasegmentatie" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Paginasegmentatie met oriëntatie- en scriptdetectie" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Eén tekstkolom veronderstellen" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Eén blok van verticaal uitgelijnde tekst veronderstellen" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Eén uniform tekstblok veronderstellen" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Tekstregel veronderstellen" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Los woord veronderstellen" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Eén woord in een cirkel veronderstellen" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Schaarse tekst, niet in een bepaalde volgorde" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Schaarse tekst met oriëntatie- en scriptdetectie" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Paginasegmentatiemodus" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Witte en zwarte lijst met tekens…" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Talen beheren…" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Bestaande uitvoer overschrijven" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Bronverwerking overslaan" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Huidige selectie" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Herkenningsfouten" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Initialiseren van tesseract is mislukt" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "De bron is al herkend" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "Eén of meerdere bronnen zijn al herkend. Wilt u tóch doorgaan?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Bezig met herkennen van pagina %1 (%2 van %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "-Pagina %1: het renderen van de pagina is mislukt" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Bezig met herkennen…" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "-%1:%2: het renderen van de pagina is mislukt" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "-%1: de uitvoer is al aanwezig - bezig met overslaan" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "%1: aanmaken van uitvoer is mislukt" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "De volgende fouten zijn opgetreden:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Scannen geannuleerd" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Geen scanner opgegeven" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Verbinden met scanner is mislukt" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Starten van scan is mislukt" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Fout tijdens communiceren met scanner" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Afbeelding opslaan mislukt" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "De operatie is geannuleerd." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Het apparaat is bezig." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "De klep is geopend." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "De documentinvoer is geblokkeerd." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "De documentinvoer bevat geen documenten meer." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Scannertoegang is geweigerd." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Voer het wachtwoord in voor ‘%1’:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF-bestand met tekst" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Deze pdf-bestanden bevatten al tekst:\n" "%1\n" "Wilt u ze tóch openen?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Afbeeldingen en pdf-bestanden" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Klembordfout" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Het uitlezen van het klembord is mislukt." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "%1 geplakt" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Schermafbeeldingsfout" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Het maken van een schermfoto is mislukt." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Schermfoto %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Bezig met opslaan van afbeelding…" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Bestand kan niet worden geschreven" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Er kan niet worden geschreven naar %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Bestand verwijderen?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Wilt u de volgende bestanden verwijderen?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Uitvoer opslaan" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Er is zowel tekst als hOCR-uitvoer aangetroffen. Welke wilt u openen?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Ontbrekend bestand" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Het volgende bestand is verwijderd of verplaatst:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Zoeken naar" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Vervangen door" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Vervangingslijst" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Vervangingslijst openen" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Fout tijdens lezen van bestand" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "‘%1’ kan niet worden uitgelezen." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Fouten opgetreden tijdens lezen van bestand" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Sommige items op de vervangingslijst kunnen niet worden gelezen." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Vervangingslijst opslaan" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Fout bij opslaan van bestand" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Er kan niet worden geschreven naar ‘%1’." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Lijst opslaan?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Wilt u de huidige lijst opslaan?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "PackageKit is vereist voor het beheren van systeembreed geïnstalleerde " "tesseract-taalpakketten, maar is niet gevonden. Gebruik het pakketbeheer van " "uw systeem om de tesseract-taalpakketten te beheren of schakel over naar een " "gebruikerslocatie op het configuratiescherm." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Bezig met ophalen van beschikbare talen" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Het ophalen van de lijst met beschikbare talen is mislukt: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Verwerkingsfout: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Bezig met toepassen van wijzigingen…" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Het creëren van een map voor de tessdata-bestanden is mislukt." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Bezig met downloaden van ‘%1’…" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "De volgende bestanden kunnen niet worden gedownload of verwijderd:\n" "%1\n" "\n" "Controleer uw internetverbinding en maprechten.\n" "\n" "Tip: als u geen schrijfrechten heeft in systeemmappen, dan kunt u locatie " "wijzigen in de instellingen." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Ja" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Ja op alles" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Nee" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nee op alles" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Verwerpen" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Alles verwerpen" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Tekst" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Over gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      Een grafisch front-end voor tesseract-" "ocr

      Website

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Met dank aan" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licentie" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "In seriemodus wordt elke invoerbron apart verwerkt en de uitvoer opgeslagen " "naast het invoerbestand." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Systeem-tekencodering" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Tekstbestand-tekencodering:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      De toepassing is " "gecrasht.

      Onze excuses voor het ongemak. Als u wilt helpen om " "de toepassing te verbeteren, overweeg dan om het probleem te melden aan manisandro@gmail.com. Omschrijf wat u aan " "het doen was voordat de toepassing crashte en vermeld onderstaande " "informatie. Bij voorbaat dank.

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      Tesseract is " "onverwachts afgesloten.

      Tesseract (de OCR-aandrijving) is " "onverwachts afgesloten tijdens het herkennen van tekst. Dit kan gebeuren als " "de trainingsdata beschadigd is of incompatibel met de gebruikte versie van " "tesseract, of door een bug in tesseract.

      Onderstaande stacktrace " "bevat mogelijk aanvullende informatie over de crash.

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Flatbed" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF Front" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF Back" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF Duplex" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Inzoomen" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Uitzoomen" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normale grootte" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Best passend" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Naar links draaien" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Naar links draaien" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Naar rechts draaien" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Naar rechts draaien" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Afbeeldingshulpmiddelen" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Indeling automatisch detecteren" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Uitvoerpaneel tonen/verbergen" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF-export" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Back-end:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Portret" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Landschap" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Schrijven naar bestand mislukt" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: biedt meer compressie-opties, maar kan " "niet omgaan met complexe scripts.
      • QPrinter: ondersteunt alleen JPEG-" "compressie, maar kan wel omgaan met complexe scripts.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Opslaan als hOCR-tekst" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Zoeken en vervangen" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Proefleeswidget tonen" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "De volgende woordenboekbestanden zijn geïnstalleerd:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Geen recente bestanden" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Bestanden verwijderen" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "De volgende bestanden kunnen niet worden gedownload of verwijderd:\n" "%1\n" "\n" "Controleer uw internetverbinding en maprechten.\n" "Tip: als u geen schrijfrechten heeft in systeemmappen, dan kunt u de locatie " "wijzigen in de instellingen." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Uitvoer" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR-modus:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Map toevoegen" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Plakken" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Schermfoto maken" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Afbeelding verwijderen" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Afbeelding verwijderen" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Lijst wissen" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Regelafbrekingen verwijderen" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Uitvoer opslaan" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Uitvoer wissen" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Nieuw tabblad" #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #~ msgid "Form" #~ msgstr "Formulier" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Er bestaat al een bestand met de naam \"%1\". Weet u zeker dat u het wilt " #~ "overschrijven?" #~ msgid "Overwrite File?" #~ msgstr "Bestand overschrijven?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Er zijn %1 documenten met niet-opgeslagen wijzigingen" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Wilt u de wijzigingen opslaan? Als u dat niet doet, dan gaan ze permanent " #~ "verloren.\n" #~ "Selecteer de te bewaren documenten:" #~ msgid "New document %1" #~ msgstr "Nieuw document %1" #~ msgid "Recent" #~ msgstr "Recent" #~ msgid "Amount of occurrences replaced: %1" #~ msgstr "Aantal vervangingen: %1" #~ msgid "One or more selected sources were aready recognized. Proceed anyway?" #~ msgstr "Eén of meerdere bronnen zijn al herkend. Wilt u tóch doorgaan?" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Aantal vervangingen: %1" #~ msgid "Failed to create output" #~ msgstr "Creëren van uitvoer is mislukt" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Het creëren van de uitvoer is mislukt. De foutmelding is: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      De toepassing is " #~ "gecrasht

      Excuses voor het ongemak. Als u wilt helpen om de " #~ "toepassing te verbeteren, overweeg dan om het probleem te melden via manisandro@gmail.com. Probeer te " #~ "omschrijven wat u aan het doen was voordat de toepassing crashte. Voeg " #~ "ook onderstaande informatie bij. Bedankt.

      " #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract is " #~ "onverwachts beëindigd

      Tesseract (de OCR-aandrijving) is " #~ "onverwachts afgebroken tijdens het herkennen van tekst. Dit kan gebeuren " #~ "als de trainingsdata beschadigd is of incompatibel met de gebruikte " #~ "versie van tesseract, of door een bug in tesseract.

      Onderstaande " #~ "stacktrace bevat mogelijk aanvullende informatie over de crash.\n" #~ "

      " #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Voorbeeld:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Platte tekst" #~ msgid "Multiple sources" #~ msgstr "Meerdere bronnen" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "-Pagina %1: het renderen van de pagina is mislukt" #~ msgid "The following errors occurred:%1" #~ msgstr "De volgende fouten zijn opgetreden: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "De volgende bestanden worden verwijderd: %1" #~ msgid "Failed to open file" #~ msgstr "Bestand openen is mislukt" #~ msgid "The file could not be opened: %1." #~ msgstr "Het bestand kan niet worden geopend: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ongeldig hOCR-bestand" #~ msgid "The application has crashed" #~ msgstr "De applicatie is gecrasht" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract is gecrasht met de volgende melding:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Dit gebeurt meestal vanwege één van de volgende redenen:\n" #~ "-Er worden verouderde traineddata-bestanden gebruikt.\n" #~ "-De ondersteunende taalgegevensbestanden ontbreken.\n" #~ "-De taalgegevensbestanden zijn beschadigd.\n" #~ "\n" #~ "Zorg ervoor dat uw taalgegevensbestanden juist zijn en compatibel met " #~ "tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "%1 kan niet worden gelezen: %2" gImageReader-3.4.0/po/pl.po000066400000000000000000002453031417507262200154400ustar00rootroot00000000000000# Polish translations for gImageReader package # Copyright (C) 2016 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # # Piotr Brol , 2016. # Sandro Mani , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-12-11 16:51+0000\n" "Last-Translator: WaldiS \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.10-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Aplikacja OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ponownie wykryj języki" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Zarządzaj językami" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Ustawienia" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Pomoc" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "O programie" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Zakończ" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Biała lista / czarna lista znaków" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Wyklucz te znaki z rozpoznania (czarna lista):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Wprowadź ciąg znaków..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Pozwól rozpoznawać tylko następujące znaki (biała lista):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientacja panelu wyjściowego:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Pozioma" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Pionowa" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Pobierz brakujące słowniki ortograficzne" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatycznie sprawdzaj nową wersję programu" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Wbudowane definicje języków:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Dodatkowe definicje języków:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Prefiks nazwy pliku językowego tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefiks" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Kod języka wg ISO 639-1 i kod kraju" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Kod ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Nazwa języka" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nazwa" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Anuluj" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Czcionka panelu wynikowego:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Domyślne" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Lokalizacja danych języków:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Ścieżka definicji języków:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Ścieżka słowników:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Ścieżki systemowe" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Ścieżki użytkownika" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Automatycznie otwieraj eksportowane dokumenty z domyślną aplikacją" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Wygeneruj ślad błędu" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Aplikacja uległa awarii\n" "\n" "Przepraszam za utrudnienia. Aby ulepszyć aplikację, rozważ zgłoszenie " "problemu na adres manisandro@gmail.com. Spróbuj opisać " "swoje działania przed awarią aplikacji. Uwzględnij również poniższe " "informacje. Dziękuję." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract został przerwany\n" "\n" "Tesseract (silnik OCR) przerwał rozpoznawanie tekstu. Może się to zdarzyć, " "jeśli używane wyszkolone dane są uszkodzone lub niekompatybilne z używaną " "wersją tesseract lub z powodu błędu w tesseract.\n" "\n" "Poniższy stacktrace (ślad stosu) może dostarczyć dodatkowych informacji o " "miejscu awarii.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Zastosuj" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Zamknij" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Wybierz folder źródłowy:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 #, fuzzy msgid "Group outputs of N lowest levels:" msgstr "Wyjście grupy na poziomie:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Wejście:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Podgląd wyjścia:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Pliki wejściowe" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Opcje eksportu" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Pokaż/ukryj panel boczny" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Obróć bieżącą stronę" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Obróć wszystkie strony" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Źródła" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Dodaj obrazy" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Dodaj obrazy" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Usuń obraz z listy" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Skasuj obraz" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Wyczyść listę" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniatury" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Pliki" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Urządzenie:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Odśwież" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Zapisz:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Tryb:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Kolor" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Odcienie szarości" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Rozdzielczość:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skanuj" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Źródło:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Skanowanie" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Jasność" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Rozdzielczość" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Negatyw" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Powiększ" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Pomniejsz" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normalny rozmiar" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Dopasuj rozmiar" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Obróć stronę" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Wybierz tryb obrotu" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Tryb wstawiania" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Wybierz stronę" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Dostosowanie obrazu" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Zwykły tekst" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Automatycznie wykryj układ" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Rozpoznaj wszystko" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Wybierz język" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Eksportuj" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Interfejs graficzny dla tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Tryb wsadowy" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "W trybie wsadowym każde źródło wejściowe jest przetwarzane oddzielnie, a " "dane wyjściowe zapisywane obok siebie w pliku wejściowym." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Istniejące wydanie:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Dodaj numery stron do tekstu wyjściowego" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Automatycznie wykryj układ strony" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Zakres stron" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Zakres stron:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Przykład: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Obszar rozpoznawania:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Cała strona" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatycznie" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Dołącz do bieżącego tekstu:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nazwa pliku źródłowego" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Strona źródłowa" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Chroniony plik PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Bieżąca strona" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Wiele stron..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Tryb wsadowy..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Dodaj słowo" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Wpisz słowo:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Dodaj nowy wynik po ostatniej stronie" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Wstaw nowy wynik przed bieżącą stroną" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Eksportuj jako typ: zwykły tekst" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Eksportuj jako typ: PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Eksportuj jako typ: ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Dołącz dokument po ostatniej stronie" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Wstaw dokument przed bieżącą stroną" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Otwórz plik hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Zapisz wynik" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Eksportuj" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Wyczyść wynik" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Znajdź i zamień" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Pokaż wartość ufności" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Podgląd" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Następny (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Poprzedni (Shift + F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Rozwiń" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Zwiń" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Właściwości" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Źródło" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Dołącz do bieżącego tekstu" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Wstaw w miejscu kursora" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Zastąp bieżący tekst" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Podział wiersza jeśli..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Kończy się znakiem (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Cudzysłów na początku/końcu" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Inne opcje" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Połącz podzielone" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Scal białe znaki" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Zachowaj akapity" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Pomocnicze" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Pokaż białe znaki" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Otwórz plik" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Usuń podziały wierszy w zaznaczonym tekście" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Cofnij" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Ponów" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nowa karta" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Zapisz:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF z niewidoczną warstwą tekstową" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Kompresja:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Jakość kompresji:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algorytm ditheringu:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Ustawienia obrazu:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Wyrównaj odstępy między wierszami i wyrazami" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Zastąp rodzinę czcionek:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Rodzina czcionek rezerwowych:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Zmień rozmiar czcionki:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Skalowanie czcionek:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Zachowaj odstępy szersze niż:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "znaki" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Popraw łączniki przed podziałem linii" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Kodowanie znaków:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Rozmiar papieru:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Szerokość" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Wysokość" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Traktuj źródła obrazu jako posiadające DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Podstawowy" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Wersja PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Hasło:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Potwierdź hasło:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Szyfrowanie (opcjonalne):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Tytuł:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Temat:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Twórca:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Producent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Słowa kluczowe:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Dodatkowe informacje (opcjonalne):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importuj z bieżącego źródła" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Zaawansowane" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Znajdź" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Zamień" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Zamień wszystkie" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Znajdź poprzedni" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Znajdź następny" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Rozróżniaj wielkość liter" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Zamienniki" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Usuń" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Kolejność:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Rozpoznaj" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Rozpoznaj do schowka" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Zapisz jako obraz" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Otwórz" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Zapisz" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Wyczyść" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Dodaj" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Usuń" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Menadżer Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Zarządzaj zainstalowanymi językami:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Obrazy" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Nazwa pliku wyjściowego..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Błąd inicjalizacji skanowania." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skanowanie nie powiodło się" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nie wykryto skanerów." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Rozpoczęcie skanowania..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Otwieranie urządzenia..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Ustawianie opcji..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Pobieranie parametrów..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Przesyłanie danych..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Anulowanie skanowania..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefiks nazwy pliku" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kod" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nazwa oryginalna" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skrypt" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Obsługa awarii" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Twój dokument został zapisany pod nazwą %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Nie było dokumentu do zapisania." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Nie udało się uzyskać śledzenia wstecznego. Czy zainstalowano GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Błąd wczytywania obrazu" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Plik nie jest obrazem lub jest uszkodzony:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Strona %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Obrazy PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Zapisz zaznaczenie jako obraz" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "zaznaczenie.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Rozpoznaj wszystko" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Rozpoznaj zaznaczenie" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Trwa analiza układu" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Pliki tymczasowe" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Wybierz folder..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Brak sugestii" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Dodaj do słownika" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignoruj wyraz" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Strona" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Blok tekstu" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Akapit" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Wiersz tekstu" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafika" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Błąd eksportu" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Eksport ODT nie powiódł się: nie można zapisać pliku wyjściowego." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Eksportowanie do ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operacja została anulowana" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Błąd rozpoznawania strony %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Eksportowanie do pliku PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Błąd eksportu do pliku PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Biblioteka PDF nie mogła wczytać czcionki '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monochromatyczny" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Próg (najbliższy kolor)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Rozproszone" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (bezstratny)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (bezstratny)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "JPEG (stratny)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Taki sam jak źródłowy" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Niestandardowe" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "w" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Eksport tekstu nie powiódł się: nie można zapisać pliku wyjściowego." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Wiersz" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Słowo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Błędna pisownia słowa" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Pokaż wartość ufności" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Nie mogły zostać przetworzone strony:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Błędy przetwarzania" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Wiele wartości" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Połącz" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Podziel od rodzica" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Zamień" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Dodaj region graficzny" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Dodaj blok tekstu" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Dodaj akapit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Dodaj wiersz" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Dodaj słowo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Pliki hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Otwórz plik hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Nie można otworzyć następujących plików:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Następujące pliki są nieprawidłowe hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Nie można otworzyć plików" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "wynik" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Zapisz wynik jako hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Błąd zapisu pliku wynikowego" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Sprawdź uprawnienia do zapisu w wybranym folderze." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Dokumenty tekstowe w formacie OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Zapisz wynik jako ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Pliki PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Zapisz wynik jako PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Nieprawidłowy wynik" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Nie można zastąpić pliku, który jest obrazem źródłowym tego dokumentu." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Pliki tekstowe" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Zapisz tekst wynikowy..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Wynik nie został zapisany" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Czy zapisać wynik przed kontynuowaniem?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Zamiana..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Zamiana wyrazów..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Skróty klawiaturowe" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linie przed:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linie po:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabNastępne pole
      Shift+TabPoprzednie pole
      W dół Następny wiersz
      W góręPoprzedni wiersz
      Ctrl+spacjaPropozycje pisown
      Ctrl+EnterDodaj słowo do słownika
      Ctrl+BPogrubienie
      Ctrl+iKursywa
      Ctrl+DDzielenie wyrazu w miejscu " "kursora
      Ctrl+MScalanie z poprzednim wyrazem
      Ctrl+Shift+MScalanie z następnym wyrazem
      Ctrl+DeleteUsuwanie wyrazu
      Ctrl+{w " "lewo, wprawo}Dopasuj lewą krawędź ramki granicznej
      Ctrl+Shift+{w lewo, w prawo}Dostosuj prawą krawędź ramki " "granicznej
      Ctrl+{w górę, w dół}Dostosuj górną " "krawędź ramki granicznej
      Ctrl+Shift+{w górę, w dół} Dopasuj dolną krawędź ramki ograniczającej
      Ctrl++Zwiększanie rozmiaru czcionki
      Ctrl+-Zmniejszanie rozmiaru czcionki
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Pewność: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Użyty tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Wybierz pierwszy obraz..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Wiele źródeł (% 1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Gotowy" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nowa wersja" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 jest dostępny" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Pobierz" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Lista zmian" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Nie powiadamiaj ponownie" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Nie pokazuj ponownie" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Zainstaluj" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Brak słownika" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Słownik dla %1 nie jest zainstalowany" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instalacja słownika dla '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Błąd" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Błąd instalacji słownika: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Nie udało się utworzyć katalogu dla słowników ortograficznych." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Nie można odczytać%1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Pobieranie '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Nie można pobrać następujących słowników:\n" "%1\n" "\n" "Sprawdź dostęp i uprawnienia katalogów.\n" "Wskazówka: Jeśli nie masz uprawnień do zapisu w folderach systemowych, " "możesz przełączyć się na ścieżki użytkownika w oknie ustawień." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Słowniki zainstalowane" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Zainstalowano następujące słowniki:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Nie znaleziono słowników dla '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Strona: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Zamknij dokument" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Wklejone %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Wynik nie został zapisany" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Czy zapisać wynik przed kontynuowaniem?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Usuwanie podziału wierszy..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 #, fuzzy msgid "Highlight mode" msgstr "Tryb wyróżniania składni:" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Sprawdź pisownię" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 #, fuzzy msgid "%1 occurrences replaced" msgstr "Liczba zastąpionych wystąpień: % 1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Plik: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Strona: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Błąd rozpoznawania strony %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Wybierz pliki" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Zapisz wynik..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Zamknij dokument" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Brak dostępnych języków" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "Brak języków dla tesseract. Rozpoznawanie niedostępne." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Wielojęzyczne" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatyczna segmentacja strony" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Podział strony na segmenty" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Pojedyncza kolumna tekstu" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Pojedynczy blok tekstu wyrównanego w pionie" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Pojedynczy blok tekstu" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Wiersz tekstu" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Pojedyncze słowo" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Pojedyncze słowo w okręgu" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Rzadki nieuporządkowany tekst" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Rzadki uporządkowany tekst" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Tryb segmentacji" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Znaki na białej / czarnej liście..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Zarządzaj językami..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Zastąp istniejące dane wyjściowe" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Pomiń źródło przetwarzania" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Bieżące zaznaczenie" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Wystąpiły błędy rozpoznawania" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Błąd inicjalizacji tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Źródło zostało już rozpoznane" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Jedno lub więcej wybranych źródeł zostało już rozpoznanych. Kontynuować mimo " "to?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Rozpoznawanie strony %1 (%2 of %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Strona %1: błąd wyświetlania strony" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Rozpoznawanie..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: błąd wyświetlania strony" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "-%1: dane wyjściowe już istnieją, pomijam" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: nie udało się utworzyć pliku wyjściowego" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Wystąpiły następujące błędy:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skanowanie anulowane" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Nie wybrano skanera" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Błąd połączenia ze skanerem" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Nie można rozpocząć skanowania" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Błąd komunikacji ze skanerem" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Błąd przy zapisie obrazu" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operacja została anulowana." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Urządzenie jest zajęte." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Pokrywa jest otwarta." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Zacięty podajnik dokumentów." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Podajnik dokumentów spośród dokumentów." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Odmowa dostępu do skanera." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Podaj hasło dla pliku '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF z tekstem" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Plik PDF zawiera już tekst:\n" "%1\n" "Otworzyć go mimo na wszystko?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Obrazy i PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Błąd schowka" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Błąd odczytu schowka." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Wklejone %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Błąd zrzutu ekranu" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Nie udało się wykonać zrzutu ekranu." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Zrzut ekranu %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Zapisywanie obrazu..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Nie można zapisać pliku" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Nie można zapisać do % 1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Usunąć plik?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Czy usunąć następujące pliki?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Otwórz wyjście" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Znaleziono zarówno tekst, jak i wyjście hOCR. Które z nich chcesz otworzyć?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Brak pliku" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Plik został usunięty albo przeniesiony:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Szukaj" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Zastąp" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista zamienników" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Otwórz listę zamienników" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Błąd odczytu pliku" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Błąd odczytu '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Błąd odczytu pliku" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Niektóre wpisy listy zamienników nie mogły być odczytane." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Zapisz listę zamienników" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Błąd zapisu pliku" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Błąd zapisu '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Zapisać listę?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Czy zapisać bieżącą listę?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Do zarządzania pakietami językowymi w całym systemie wymagane jest " "połączenie sesji z komponentem PackageKit, ale nie zostało ono znalezione. " "Ta usługa jest zazwyczaj świadczona przez aplikację do zarządzania " "oprogramowaniem, taką jak Gnome Software. Proszę zainstalować " "oprogramowanie, które zapewnia niezbędny interfejs PackageKit, użyć innego " "oprogramowania do zarządzania pakietami systemowymi, aby zarządzać pakietami " "językowymi tesseract bezpośrednio lub przełączyć się na ścieżkę tessdata " "użytkownika w oknie konfiguracji." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Pobieranie dostępnych języków" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Błąd pobierania listy dostępnych języków: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Błąd parsowania: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Wprowadzanie zmian..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Błąd przy tworzeniu katalogu dla plików tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Pobieranie %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Nie można pobrać lub usunąć następujących plików::\n" "%1\n" "\n" "Sprawdź dostęp i uprawnienia do katalogu.\n" "\n" "Wskazówka: Jeśli nie masz uprawnień do zapisu w folderach systemowych, " "możesz przełączyć się na ścieżki użytkownika w oknie ustawień." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Tak" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Tak dla wszystkich" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Nie" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nie dla wszystkich" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Odrzuć" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Odrzuć" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Tekst" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "O programie gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "<html><head/><body><p> </p><p>" "NakÅ‚adka graficzna do tesseract-ocr</p><p><a href ="" "https://github.com/manisandro/gImageReader/">Witryna</a></" "p><p>&nbsp;</p></body></ html>" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "O autorach" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licencja" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "W trybie wsadowym każde źródÅ‚o wejÅ›ciowe jest przetwarzane oddzielnie, a " "dane wyjÅ›ciowe zapisywane obok siebie w pliku wejÅ›ciowym." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Kodowanie systemowe" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Kodowanie znaków:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Aplikacja uległa " "awarii.

      Przepraszam za utrudnienia. Aby pomóc w ulepszeniu " "aplikacji, rozważ zgłoszenie problemu na adres manisandro@gmail.com. Opisz działania wykonywane przed awarią programu i dołącz poniższą " "informację. Dziękuję.

      " #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "Tesseract został przerwany\n" "\n" "Tesseract (silnik OCR) przerwał rozpoznawanie tekstu. Może się to zdarzyć, " "jeśli używane wyszkolone dane są uszkodzone lub niekompatybilne z używaną " "wersją tesseract lub z powodu błędu w tesseract.\n" "\n" "Poniższy stacktrace (ślad stosu) może dostarczyć dodatkowych informacji o " "miejscu awarii.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Płaski" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Przedni podajnik ADF" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Tylny podajnik ADF" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Dupleks ADF" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Powiększ" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Pomniejsz" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Rozmiar normalny" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Dopasowanie" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Obróć w lewo" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Obróć w lewo" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Obróć w prawo" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Obróć w prawo" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Dopasowanie obrazu" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Wykryj układ" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Pokaż/ukryj panel wyniku" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Eksport PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Kontekst:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Portret" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Krajobraz" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Nie można zapisać do pliku" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: oferuje wiÄ™cej opcji kompresji obrazu, " "ale nie obsÅ‚uguje zÅ‚ożonych skryptów.
      • QPrinter: obsÅ‚uguje tylko " "kompresjÄ™ JPEG do przechowywania obrazów, ale obsÅ‚uguje zÅ‚ożone skrypty.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Zapisz jako hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Znajdź i zamień" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Podgląd" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Zainstalowano następujące pliki słowników:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Brak ostatnich plików" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Usuń pliki" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Następujące pliki nie mogły zostać pobrane lub usunięte:\n" "%1\n" "\n" "Sprawdź dostęp i uprawnienia do katalogu.\n" "Wskazówka: Jeśli nie masz uprawnień do zapisu w folderach systemowych, " "możesz przełączyć się na ścieżki użytkownika w oknie ustawień." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Wynik" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Tryb OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Dodaj folder" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Wklej" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Zrzut ekranu" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Usuń obraz" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Skasuj obraz" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Wyczyść listę" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Usuń podziały wierszy" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Zapisz wynik" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Wyczyść wynik" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "Form" #~ msgstr "Formularz" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Liczba zastąpionych wystąpień: % 1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Plik \"%1\" już istnieje. Czy chcesz go zastąpić?" #~ msgid "Overwrite File?" #~ msgstr "Zastąpić plik?" #~ msgid "New document %1" #~ msgstr "Nowy dokument % 1" #~ msgid "Recent" #~ msgstr "Ostatnie" #~ msgid "Failed to create output" #~ msgstr "Błąd tworzenia pliku wynikowego" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Błąd tworzenia pliku wynikowego. Zwrócony błąd to: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Przepraszamy za " #~ "usterki. Aby poprawić jakość aplikacji, zgłoś problem na adres manisandro@gmail.com. Opisz działania " #~ "wykonywane przed awarią programu i dołącz poniższą informację. Dziękuję." #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract został " #~ "przerwany

      Tesseract (silnik OCR) przerwał rozpoznawanie " #~ "tekstu. Może się to zdarzyć, jeśli używane wyszkolone dane są uszkodzone " #~ "lub niekompatybilne z używaną wersją tesseract lub z powodu błędu w " #~ "tesseract.

      Poniższy stacktrace może dostarczyć dodatkowych " #~ "informacji o miejscu awarii.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "PrzykÅ‚ad: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "ZwykÅ‚y tekst" #~ msgid "Multiple sources" #~ msgstr "Wiele źródeÅ‚" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Strona %1: błąd wyÅ›wietlania strony" #~ msgid "The following errors occurred:%1" #~ msgstr "WystÄ…piÅ‚y nastÄ™pujÄ…ce błędy:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Zostanie usuniÄ™ty plik:%1" #~ msgid "Failed to open file" #~ msgstr "Błąd otwierania pliku" #~ msgid "The file could not be opened: %1." #~ msgstr "Nie można otworzyć pliku: %1." #~ msgid "Invalid hOCR file" #~ msgstr "NieprawidÅ‚owy plik hOCR" #~ msgid "The application has crashed" #~ msgstr "Program ulegÅ‚ awarii" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract ulegÅ‚ awarii z nastÄ™pujÄ…cym komunikatem:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "NajczÄ™stsze przyczyny:\n" #~ "- Nieaktualne pliki traineddata.\n" #~ "- Brak pomocniczych plików jÄ™zyka.\n" #~ "- Uszkodzenie plików jÄ™zyka.\n" #~ "\n" #~ "Upewnij siÄ™, że pliki jÄ™zyka sÄ… w porzÄ…dku %2." #~ msgid "Could not read %1: %2" #~ msgstr "Nie można odczytać %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Czcionka dokumentu:" #~ msgid "Scale:" #~ msgstr "Skala:" #~ msgid "Errors occurred" #~ msgstr "WystÄ…piÅ‚y błędy" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "NastÄ™pujÄ…ce strony nie mogÄ… być wyÅ›wietlone:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "lista_zamiennikow.txt" #~ msgid "Detect script and orientation" #~ msgstr "Wykryj orientacjÄ™" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Użyj zarzÄ…dzania pakietami dostÄ™pnej w systemie operacyjnym aby " #~ "zainstalować pakiety jÄ™zykowe tesseract" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tBłąd inicjalizacji tesseract" #~ msgid "So&urces" #~ msgstr "ŹródÅ‚a" #~ msgid "&Output" #~ msgstr "Wynik" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Aby rozpoznać fragmenty, zaznacz je" gImageReader-3.4.0/po/pt.po000066400000000000000000002461201417507262200154460ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: Portuguese (Brazil) (gImageReader)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-19 18:53+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Aplicação de OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Redetetar idiomas" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gerir idiomas" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferências" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Ajuda" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Sobre" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Sair" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Lista branca/lista negra de caracteres" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Excluir estes caracteres do reconhecimento (lista negra):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Digite uma cadeia de caracteres..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Permitir apenas o reconhecimento destes caracteres (lista branca):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientação do painel de saída:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Instalar dicionários de verificação ortográfica não encontrados" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Procurar automaticamente novas versões de aplicação" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Definições de idioma predefinidas:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Definições de idiomas adicionais:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "O prefixo do ficheiro de dados do idioma do tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefixo" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "O código do idioma ISO 639-1 seguido do código do país" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Código ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "O nome do idioma" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nome" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Cancelar" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Fonte do painel de saída:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Padrão" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Locais de dados de idioma:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Caminho de definições de idioma:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Caminho de dicionários de ortografia:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Caminhos de todo o sistema" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Caminhos de utilizador" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Abrir automaticamente documentos exportados com a aplicação padrão" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Recriar backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "A aplicação terminou\n" "\n" "Lamentamos o incómodo. Para nos ajudar a melhorar a aplicação, deve reportar " "o erro para manisandro@gmail.com. Tente descrever o " "que estava a fazer quando a aplicações encerrou. Tembém deve incluir a " "informação abaixo. Obrigado." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "O Tesseract abortou\n" "\n" "Tesseract (o mecanismo de OCR) abortou ao reconhecer o texto. Isso pode " "ocorrer se os traineddatas usados estiverem corrompidos ou incompativeis com " "a versão do tesseract em uso ou devido a um bug no tesseract.\n" "\n" "O stacktrace abaixo pode fornecer informações adicionais sobre onde o " "software travou.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Exportação de lotes HOCR" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Aplicar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Fechar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Selecione a pasta de origem:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formato:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "Agrupar saídas de N níveis mais baixos:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Entrada:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Pré-visualização de saída:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Ficheiros de entrada" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Opções de exportação" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Comutar painel de saída" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Rodar página atual" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rodar todas as páginas" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Fontes" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Adicionar imagens" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Adicionar imagens" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Remover imagem da lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Apagar imagem" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Limpar lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturas" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Ficheiros" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Aparelho:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Recarregar" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Saída:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modo:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Cor" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Escala de cinza" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolução:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Digitalizar" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Origem:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Obter" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Brilho" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contraste" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolução" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverter cores" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Ampliar" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Reduzir" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Tamanho normal" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Melhor ajuste" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Rodar página" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Selecione o modo de rotação" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Selecione o modo de inserção" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Selecionar página" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controlos de imagem" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Texto sem formatação" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Detetar disposição automaticamente" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Reconhecer tudo" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Selecionar idioma" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Exportar em lote" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Uma interface gráfica para tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modo de Lote" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "No modo de lote, cada fonte de entrada é processada separadamente e a " "saída gravada lado a lado ao ficheiro de entrada." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Saída existente:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Antepor números de página ao texto de saída" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Autodetecção do layout da página" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Intervalo de páginas" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervalo de páginas:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Exemplo: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Ãrea de reconhecimento:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Página inteira" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Deteção automática" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Antepor ao texto de saída:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nome do ficheiro origem" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Página de origem" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protegido" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Página atual" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Múltiplas páginas..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modo de lote..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Adicionar palavra" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Digite a palavra:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Anexar nova saída após a última página" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Inserir nova saída antes da página atual" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportar para texto sem formatação" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportar para PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportar para ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Anexar documento após a última página" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Inserir documento antes da página atual" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Abrir ficheiro hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Gravar saída" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Limpar saída" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Localizar e substituir" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Mostrar valores de confiança" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Mostrar pré-visualização" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Seguinte (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Anterior (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expandir tudo" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Recolher tudo" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Propriedades" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Origem" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Juntar ao texto atual" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Inserir no cursor" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Substituir o texto atual" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Manter quebra de linha se..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Precedido por marca de fim (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Precedida ou sucedida por citação" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Outras opções" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Juntar palavras com hífen" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Recolher espaços em branco" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Manter parágrafos" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Recursos visuais" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Desenhar espaços" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Abrir ficheiro" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Remover quebras de linha do texto selecionado" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Desfazer" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refazer" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nova guia" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modo de saída:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF com sobreposição de texto invisível" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compressão:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualidade de compressão:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "PPP:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritmo de pontilhado:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Definições de imagem:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Uniformizar linha e espaçamento entre palavras" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Substituir tipo de letra:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Tipo de letra de recurso:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Substituir tamanho do tipo de letra:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Escala do tipo de letra:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Manter espaços mais largos do que:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "caracteres" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Limpar hífenes antes de quebras de linha" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Definições de texto:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Tamanho do papel:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Largura" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altura" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Tratar fontes da imagem como tendo PPP verdadeiros:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Básico" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Versão de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Palavra-passe:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmar palavra-passe:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Cifra (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Título:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Assunto:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Criador:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produtor:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Palavras-chave:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Informação adicional (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importar da origem atual" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avançado" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Localizar" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Substituir" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Substituir todos" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Localizar anterior" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Localizar próximo" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Diferenciar maiúsculas e minúsculas" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Substituições" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Apagar" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordem:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Reconhecer" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Reconhecer para a área de transferência" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Guardar como imagem" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Abrir" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Gravar" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Limpar" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Adicionar" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Remover" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gestor Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gerir idiomas instalados:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "imagem.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Imagens" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Escolha nome do ficheiro de saída..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Falha ao inicializar a infraestrutura de digitalização." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "A digitalização falhou" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Não foi detetado qualquer digitalizador." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Iniciando digitalização..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Abrindo aparelho..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Definindo opções..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Obtendo parâmetros..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transferindo dados..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Cancelando digitalização..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefixo do nome do ficheiro" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Código" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nome nativo" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Script" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Gestor de erros" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "O seu trabalho foi guardado em %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Não existem trabalhos por guardar." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Falha ao obter 'backtrace'. GDB instalado?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Falha ao carregar imagem" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "O ficheiro pode não ser uma imagem ou está corrompido:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Página %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Imagens PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Guardar imagem selecionada" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "seleção.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Reconhecer tudo" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Reconhecer seleção" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Executando análise à disposição" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Ficheiros temporários" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Selecionar pasta..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Sem sugestões" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Adicionar ao dicionário" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorar palavra" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Página" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloco de texto" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Parágrafo" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Linha de texto" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Gráfico" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Falha ao exportar" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "A exportação ODT falhou: não foi possível guardar o ficheiro." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exportando para ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "A operação foi cancelada" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Falha ao processar a página %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exportando para PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "A exportação PDF falhou: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "A biblioteca PDF não conseguiu carregar o tipo de letra '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Preto e branco" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Limiar (cor mais próxima)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difusa" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (sem perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grupo 4 (sem perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (com perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Igual à origem" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personalizado" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "A exportação de texto falhou: não foi possível guardar o ficheiro." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloco" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linha" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Palavra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Palavra incorreta" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Mostrar valores de confiança" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "As páginas abaixo não foram processadas:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Erros de reconhecimento" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Vários valores" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Unir" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Separar do pai" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Trocar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Adicionar região gráfica" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Adicionar bloco de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Adicionar parágrafo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Adicionar linha" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Adicionar palavra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Ficheiros hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Abrir ficheiro hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Os seguintes ficheiros não puderam ser abertos:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Os seguintes ficheiros não são HTML hOCR válidos:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Não foi possível abrir os ficheiros" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "saída" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Guardar como hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Falha ao guardar o ficheiro" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Verifique se tem permissão de escrita na pasta selecionada." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documentos de texto OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Guardar como ODT ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Ficheiros PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Guardar como PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Saída inválida" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Não pode substituir um ficheiro que é a imagem de origem do documento." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Ficheiros de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Guardar como ficheiro de texto..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Ficheiro não guardado" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Guardar ficheiro antes de continuar?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "A substituir..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "A aplicar substituições..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Atalhos de teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linhas anteriores:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linhas após:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabPróximo campo
      Shift+TabCampo anterior
      Para baixoPróxima linha
      Para cimaLinha anterior
      Ctrl + " "EspaçoSugestões de ortografia
      Ctrl + BAlterne negrito
      Ctrl + IAlterna itálico
      Ctrl + DDivida a palavra na posição do cursor
      Ctrl + MMesclar com a palavra anterior
      Ctrl + Shift + MMesclar com a próxima palavra
      Ctrl + {Esquerda, Direita}Ajustar a borda da caixa " "delimitadora esquerda
      Ctrl + Shift + {Esquerda, Direita} Ajustar a borda da caixa delimitadora direita
      Ctrl " "+ {Para cima, Para baixo}Ajustar borda da caixa delimitadora " "superior
      Ctrl + Shift + {Para cima, Para baixo}Ajustar borda da caixa delimitadora
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Atalhos de Teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confiança: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Usando Tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Selecione uma imagem para começar..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Várias origens (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Pronto" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nova versão" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 está disponível" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Descarregar" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Registo de alterações" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Não avisar novamente" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Não mostrar novamente" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instalar" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Dicionário ortográfico em falta" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "O dicionário ortográfico para %1 não está instalado" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "A instalar dicionário para '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Erro" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Falha ao instalar dicionário de ortografia: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Falha ao criar o diretório de dicionários ortográficos." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Não foi possível ler %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "A descarregar '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Não foi possível descarregar os dicionários abaixo indicados:\n" "%1\n" "\n" "Verifique as permissões de conectividade e do diretório.\n" "Dica: se não tem permissões de escrita em pastas do sistema, pode alternar " "para caminhos de utilizador nas definições." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dicionários instalados" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Os seguintes dicionários foram instalados:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Nenhum dicionário de ortografia encontrado para '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Página: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Fechar documento" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Sem título %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Documento não gravado" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Gravar o documento antes de continuar?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Removendo quebras de linhas..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Sem destaque" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Modo de destaque" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Verificar ortografia" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "%1 ocorrências substituídas" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Ficheiro: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Página: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Falha ao reconhecer página %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Selecione os ficheiros" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Salvando saída..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Documentos não gravados" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "Os seguintes documentos têm alterações não gravadas. Que documentos quer " "gravar antes de prosseguir?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nenhum idioma disponível" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Nenhum idioma do tesseract disponível para uso. O reconhecimento de " "caracteres não vai funcionar." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Multilingual" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentação automática de páginas" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentação de página com detecção de orientação e de script" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Assumir uma única coluna de texto" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Assumir um único bloco de texto alinhado verticalmente" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Assumir um bloco uniforme de texto" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Assumir uma linha de texto" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Assumir uma única palavra" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Assumir uma única palavra num círculo" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Texto esparso em nenhuma ordem particular" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Texto esparso com deteção de orientação e script" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modo de segmentação de página" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Lista branca / lista negra de caracteres..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gerir idiomas..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Sobregravar a saída existente" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Pular fonte de processamento" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Seleção atual" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Ocorreram erros de reconhecimento" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Falha ao inicializar o tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Fonte já reconhecida" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Uma ou mais fontes selecionadas já foram reconhecidas. Continuar mesmo assim?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Reconhecendo página %1 (%2 de %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Página %1: falha ao processar a página" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Reconhecendo..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1.%2: falha ao processar a página" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: a saída já existe, saltando" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: falha na criação do ficheiro de saída" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Ocorreram os seguintes erros:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Digitalização cancelada" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Nenhum digitalizador especificado" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Não foi possível conectar ao digitalizador" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Não foi possível iniciar a digitalização" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Erro de comunicação com o digitalizador" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Falha ao gravar imagem" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "A operação é cancelada." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "O aparelho está ocupado." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "A tampa está aberta." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Alimentador de documentos encravado." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Falta de documentos no alimentador de documentos." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Acesso ao scanner é negado." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Digite a palavra-passe para o ficheiro '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF com texto" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "O ficheiro PDF já contém texto:\n" "%1\n" "Abri-lo de qualquer maneira?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Imagens e PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Erro da área de transferência" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Falha ao ler a área de transferência." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Colado %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Erro de captura de ecrã" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Falha ao capturar a ecrã." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Captura de ecrã %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Salvando imagem..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Não foi possível gravar o ficheiro" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Não foi possível escrever no ficheiro %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Apagar o ficheiro?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Apagar os seguintes ficheiros?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Abrir saída" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Tanto um texto como uma saída hOCR foram encontrados. Qual deles quer abrir?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Ficheiro ausente" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "O seguinte ficheiro foi apagado ou movido:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Procurar por" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Substituir com" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Abrir lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Erro ao ler ficheiro" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Não foi possível ler '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Erros ocorreram na leitura do ficheiro" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Algumas entradas da lista de substituições não puderam ser lidas." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Gravar lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Erro ao gravar ficheiro" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Não foi possível escrever em '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Gravar lista?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Você deseja gravar a lista atual?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Uma conexão de sessão com o backend do PackageKit é necessária para gerir " "pacotes de idiomas do tesseract em todo o sistema, mas não foi encontrada. " "Este serviço é normalmente fornecido por uma aplicação de gestão de " "software, como o Gnome Software. Instale o software que fornece a interface " "necessária do PackageKit, use outro software de gestão de pacotes do sistema " "para gerir os pacotes de idiomas do tesseract diretamente ou mude para usar " "o caminho de tessdata do utilizador na caixa de diálogo de configuração." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Buscando idiomas disponíveis" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Falha ao obter a lista de idiomas disponíveis: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Erro de processamento: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Aplicando alterações..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Falha ao criar o diretório para os ficheiros tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Baixando %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Os seguintes ficheiros não podem ser baixados ou removidos:\n" "%1\n" "\n" "Verifique as permissões de conectividade e diretório.\n" "\n" "Dica: Se não tem permissões de gravação em pastas do sistema, pode alternar " "para caminhos de utilizador na caixa de diálogo Configurações." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Sim" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Sim a todos" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Não" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Não a todos" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Descartar" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Descartar tudo" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Texto" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Sobre o gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      Um front-end gráfico para tesseract-ocr

      >Site

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Méritos" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licença" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "No modo de lote, cada fonte de entrada é processada separadamente e a saída " "gravada lado a lado ao ficheiro de entrada." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codificação do sistema" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codificação de ficheiro de texto:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      A aplicação falhou

      Pedimos desculpas pela inconveniência. Para ajudar a melhorar a " "aplicação, considere reportar o problema a manisandro@gmail.com. Por favor, " "tente descrever o que fazia antes de a aplicação falhar. Além disso, inclua " "as informações abaixo. Obrigado.

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      >O Tesseract " "abortou

      O Tesseract (o motor OCR) abortou ao reconhecer o " "texto. Isto pode acontecer se os traineddatas usados forem corruptos ou " "incompreensíveis pela versão do tesseract em uso ou devido a um bug no " "Tesseract.

      O stacktrace abaixo pode fornecer informações adicionais " "sobre onde travou.

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Mesa" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Frente do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Verso do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Duplex do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Aumentar zoom" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Diminuir zoom" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Tamanho Normal" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Melhor Ajuste" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rotacionar para a esquerda" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rotacionar para a esquerda" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rotacionar para a direita" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rotacionar para a direita" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controles de Imagem" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Detectar Layout Automaticamente" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Alternar Exibição do Painel de Saída" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Exportação PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Retrato" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Paisagem" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Falha ao gravar ficheiro" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: oferece mais opções de compressão de " "imagem, mas não lida com scripts complexos.
      • QPrinter: suporta " "apenas a compressão JPEG para armazenar imagens, mas suporta scripts " "complexos.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Gravar como texto hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Localizar e Substituir" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Mostrar widget de revisão" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Os seguintes dicionários foram instalados:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Nenhum ficheiro recente" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Apagar ficheiros" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Os seguintes ficheiros não podem ser baixados ou removidos:\n" "%1\n" "\n" "Verifique as permissões de conectividade e diretório.\n" "Dica: Se não tem permissões de gravação em pastas do sistema, pode alternar " "para caminhos de utilizador na caixa de diálogo Configurações." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Saída" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modo de OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Adicionar pasta" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Colar" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Obter captura de ecrã" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Remover imagem" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Apagar Imagem" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Limpar Lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Remover quebras de linha" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Gravar Saída" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Limpar Saída" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Adicionar guia" #, fuzzy #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #, fuzzy #~ msgid "Form" #~ msgstr "Formato" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Quantidade de ocorrencias substituídas: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Já existe um ficheiro com o nome \"%1\". Substituir?" #~ msgid "Overwrite File?" #~ msgstr "Substituir ficheiro?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Existem %1 documentos com alterações não gravadas" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Gravar mudanças antes de fechar? Se não gravar, todas as suas alterações " #~ "serão perdidas permanentemente.\n" #~ "Selecione os documentos que deseja gravar:" #~ msgid "New document %1" #~ msgstr "Novo documento %1" #~ msgid "Recent" #~ msgstr "Recente" #~ msgid "Failed to create output" #~ msgstr "Falha ao criar o ficheiro" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Falha ao criar o ficheiro. O erro devolvido foi: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">>A aplicação falhou</span></p><" #~ "p>Desculpe pelo inconveniente. Para ajudar a melhorar a aplicação, " #~ "considere reportar o problema a <a href="mailto:manisandro@gmail." #~ "com?subject=gImageReader%20Crash">manisandro@gmail.com</a>. " #~ "Por favor, tente descrever o que estava a fazer antes de a aplicação ter " #~ "falhado. Além disso, inclua as informações abaixo. Obrigado.</p>" #~ "</body></html>" #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract " #~ "abortou

      >p>Tesseract (o motor OCR) abortou ao reconhecer o " #~ "texto. Isso pode ocorrer se os treineddatas usados estiverem corrompidos " #~ "ou incompativeis com a versão do tesseract em uso ou devido a um bug no " #~ "tesseract.

      O stacktrace abaixo pode fornecer informações " #~ "adicionais sobre onde o software travou.

      " #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Exemplo:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Texto sem formatação" #~ msgid "Multiple sources" #~ msgstr "Várias origens" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Página %1: falha ao processar a página" #~ msgid "The following errors occurred:%1" #~ msgstr "Os seguinte erros ocorreram:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Os seguintes ficheiros serão apagados:%1" #~ msgid "Failed to open file" #~ msgstr "Falha ao abrir o ficheiro" #~ msgid "The file could not be opened: %1." #~ msgstr "O ficheiro não pode ser aberto: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ficheiro hOCR inválido" #~ msgid "The application has crashed" #~ msgstr "A aplicação parou de funcionar" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract caiu com a seguinte mensagem:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Isso normalmente acontece por uma das seguintes razões:\n" #~ "- Usando ficheiros traineddata desatualizados.\n" #~ "- Faltam arquivos de dados de idioma auxiliar.\n" #~ "- Ficheiros de dados de idioma corrompidos.\n" #~ "\n" #~ "Certifique-se de que seu idioma de arquivos de dados são válidos e " #~ "compatíveis com o tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Não foi possível ler 1%: %2" gImageReader-3.4.0/po/pt_BR.po000066400000000000000000002514061417507262200160340ustar00rootroot00000000000000# Copyright (C) 2014-2015 # This file is distributed under the same license as the gImageReader package. # André Alencar , 2014, 2015. # Sandro Mani , 2015, 2016. # Felipe Braga , 2015. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-12-28 18:50+0000\n" "Last-Translator: The Cats \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.10.1\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Aplicativo de OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Detectar idiomas novamente" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Gerenciar Idiomas" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferências" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Ajuda" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Sobre" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Sair" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Caracteres banidos/permitidos" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Excluir estes caracteres do reconhecimento (lista negra):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Digite uma seqüência de caracteres..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Permitir apenas o reconhecimento destes caracteres (lista branca):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientação do painel de saída:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertical" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" "Perguntar pela instalação de dicionários de verificação ortográfica não " "encontrados" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Verificar automaticamente novas versões do programa" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Definições de idioma predefinidas:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Definições de idiomas adicionais:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "O prefixo do ficheiro de dados do idioma do tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefixo" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "O código do idioma ISO 639-1 seguido do código do país" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Código ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "O nome do idioma" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Nome" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Cancelar" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Fonte do painel de saída:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Padrão" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Locais de dados de idioma:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Caminho de definições de idioma:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Caminho de dicionários de ortografia:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Caminhos de todo o sistema" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Caminhos de usuário" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Abrir automaticamente documentos exportados com o aplicativo padrão" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Regenerar backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "O programa travou\n" "\n" "Pedimos desculpas pela inconveniência. Para ajudar a melhorar esta " "aplicação, por favor envie um relatório de erro para manisandro@gmail.com. Tente descrever o que você estava fazendo antes da aplicação parar de " "funcionar. Inclua também a informação abaixo. Obrigado." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "O Tesseract encerrou \n" "\n" "Tesseract (o motor de OCR) encerrou ao reconhecer o texto. Isto pode ocorrer " "se os dados treinados usados estiverem corrompidos ou incompreensíveis com a " "versão do Tesseract em uso, ou devido a um bug.\n" "\n" "O rastreamento abaixo pode fornecer informações adicionais sobre onde " "ocorreu o problema.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Exportação de lotes HOCR" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Aplicar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Fechar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Selecionar pasta..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formato:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 #, fuzzy msgid "Group outputs of N lowest levels:" msgstr "Agrupar saídas a nível:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Entrada:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Pré-visualização de saída:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Arquivos de entrada" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Outras opções" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Alternar exibição do painel de saída" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Girar a página atual" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rodar todas as páginas" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Fontes" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Adicionar imagens" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Adicionar imagens" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Remover imagem da lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Apagar imagem" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Limpar lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Miniaturas" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Arquivos" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Dispositivo:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Atualizar" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Saída:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modo:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Cor" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Escala de cinza" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Resolução:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Digitalizar" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Origem:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Obter" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Brilho" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Contraste" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Resolução" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Inverter cores" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Aumentar zoom" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Diminuir zoom" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Tamanho normal" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Melhor ajuste" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Girar a página" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Selecione o modo de rotação" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Selecione o modo de inserção" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Selecionar página" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Controles de imagem" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Texto sem formatação" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Detectar layout automaticamente" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Reconhecer tudo" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Escolher idioma" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Exportar" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Uma interface gráfica para o tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modo de Lote" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "No modo de lote, cada fonte de entrada é processada separadamente e o " "resultado gravado lado a lado ao arquivo de entrada." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Resultado existente:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Antepor números de página ao texto resultante" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Detectar layout da página automaticamente" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Intervalo de páginas" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Intervalo de páginas:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Exemplo: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Ãrea de reconhecimento:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Página inteira" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Detectar automaticamente" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Antepor ao texto de saída:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Nome do ficheiro origem" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Página de origem" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF protegido" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Página atual" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Múltiplas páginas..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modo de lote..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Adicionar Palavra" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Digite a palavra:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Anexar novo resultado após a última página" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Inserir novo resultado antes da página atual" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportar para texto sem formatação" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportar para PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportar para ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Anexar documento após a última página" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Inserir documento antes da página atual" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Abrir ficheiro hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Gravar saída" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Limpar saída" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Localizar e substituir" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Mostrar valores de confiança" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Mostrar pré-visualização" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Seguinte (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Anterior (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expandir tudo" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Dobrar tudo" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Propriedades" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Origem" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Acrescentar no texto atual" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Inserir no cursor" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Substituir o texto atual" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Manter quebra de linha se..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Precedido por marca de fim (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Precedida ou sucedida por citação" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Outras opções" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Juntar palavras com hífen" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Juntar espaços em branco" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Preservar parágrafos" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Recursos visuais" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Desenhar espaços" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Abrir arquivo" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Remover quebras de linha do texto selecionado" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Desfazer" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Refazer" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Nova aba" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modo de saída:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF com sobreposição de texto invisível" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Compressão:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Qualidade de compressão:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritmo de pontilhamento:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Configurações de imagem:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Homogenizar a linha e espaçamento entre palavras" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Sobrescrever a família da fonte:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Família de fonte fallback:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Sobrescrever o tamanho da fonte:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Escala de fonte:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Preserve espaços mais largos do que:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "letras" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Limpar hífens antes de quebras de linha" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Configurações de texto:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Tamanho do papel:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Largura" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Altura" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Tratar fontes da imagem como tendo PPP verdadeiros:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Básico" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "Versão de PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Senha:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Confirmar senha:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Criptografia (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Título:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Assunto:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Criador:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Produtor:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Palavras-chave:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Informação adicional (opcional):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importar da origem atual" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avançado" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Localizar" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Substituir" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Substituir todos" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Localizar anterior" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Localizar próximo" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Diferenciar maiúsculas e minúsculas" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Substituições" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Apagar" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordem:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Reconhecer" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Reconhecer para a área de transferência" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Gravar como imagem" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Abrir" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Gravar" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Limpar" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Adicionar" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Remover" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Gerenciador de Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Gerenciar idiomas instalados:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Imagens" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Escolha nome do ficheiro de saída..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Falha ao inicializar a infraestrutura de digitalização." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "A digitalização falhou" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nenhum digitalizador foi detectado." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Iniciando digitalização..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Abrindo dispositivo..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "definindo opções..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Obtendo parâmetros..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transferindo dados..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Cancelando a digitalização..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefixo do nome do ficheiro" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Código" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Nome nativo" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Script" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Gerenciador de erros" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "O seu trabalho foi salvo em %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Não havia trabalho não salvo." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Falha ao obter 'backtrace'. O GDB está instalado?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Falha ao carregar imagem" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "O ficheiro pode não ser uma imagem ou está corrompido:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Página %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Imagens PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Gravar imagem selecionada" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Reconhecer tudo" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Reconhecer seleção" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Executando análise de layout" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Arquivos temporários" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Selecionar pasta..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Sem sugestões" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Adicionar ao dicionário" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorar palavra" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Página" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Bloco de texto" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Parágrafo" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Linha de texto" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Gráfico" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Exportação falhada" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "A exportação ODT falhou: não é possível gravar o ficheiro de saída." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exportando para ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "A operação foi cancelada" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Falha ao processar a página %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exportando para PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "A exportação PDF falhou: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "A biblioteca PDF não pôde carregar a fonte '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Preto e branco" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Limiar (cor mais próxima)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difusa" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (sem perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grupo 4 (sem perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (com perdas)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Igual à origem" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Personalizado" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "em" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "A exportação de texto falhou: não é possível gravar o ficheiro de saída." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bloco" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Linha" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Palavra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Palavra incorreta" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Mostrar valores de confiança" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "As seguintes páginas não puderam ser processadas:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Ocorreram erros de reconhecimento" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Vários valores" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Unir" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Separar do pai" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Trocar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Adicionar região gráfica" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Adicionar bloco de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Adicionar parágrafo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Adicionar linha" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Adicionar palavra" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Ficheiros hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Abrir ficheiro hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Os seguintes arquivos não puderam ser abertos:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Os seguintes arquivos não são HTML hOCR válidos:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Não foi possível abrir os arquivos" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "saída" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Gravando saída hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Falha ao gravar a saída" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Verifique se você tem permissão de escrita na pasta selecionada." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "Documentos de texto OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Gravar saída ODT ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Ficheiros PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Gravar saída PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Saída inválida" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Não pode sobrescrever um ficheiro que é uma imagem de origem do documento." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Arquivos de texto" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Gravar saída de texto..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Saída não salva" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Gravar a saída antes de continuar?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Substituindo..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Aplicando substituições..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Atalhos de teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linhas antes:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linhas após:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabPróximo campo
      Shift+TabCampo anterior
      Para baixoPróxima linha
      Para cimaLinha anterior
      Ctrl + " "EspaçoSugestões de ortografia
      Ctrl + BNegrito
      Ctrl + IItálico
      Ctrl + DDividir a palavra na posição do cursor
      Ctrl + MUnir à palavra anterior
      Ctrl + " "Shift + MUnir à próxima palavra
      Ctrl + {Esquerda, " "Direita}Ajustar a borda da caixa delimitadora esquerda
      Ctrl + Shift + {Esquerda, Direita} Ajustar a borda da " "caixa delimitadora direita
      Ctrl + {Para cima, Para baixo}Ajustar borda da caixa delimitadora superior
      Ctrl + " "Shift + {Para cima, Para baixo}Ajustar borda da caixa delimitadora
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Atalhos de Teclado" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Confiança: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Usando Tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Selecione uma imagem para começar..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Várias fontes (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Pronto" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nova versão" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 está disponível" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Download" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Registro de mudanças" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Não avisar novamente" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Não mostrar novamente" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instalar" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Dicionário de ortografia faltando" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "O dicionário de ortografia para %1 no foi instalado" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instalando dicionário de ortografia para '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Erro" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Falha ao instalar dicionário de ortografia: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Falha ao criar o diretório de dicionários de ortografia." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Não foi possível ler %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Baixando '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Os seguintes dicionários não podem ser baixados:\n" "%1\n" "\n" "Verifique as permissões de conectividade e diretório.\n" "Dica: Se você não tem permissões de gravação em pastas do sistema, você pode " "alternar para caminhos de usuário na caixa de diálogo Configurações." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Dicionários instalados" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Os seguintes dicionários foram instalados:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Nenhum dicionário de ortografia encontrado para '%1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Página: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Fechar documento" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Colado %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Saída não salva" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Gravar a saída antes de continuar?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Removendo quebras de linhas..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 #, fuzzy msgid "Highlight mode" msgstr "Modo de destaque de sintaxe:" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Verificar ortografia" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 #, fuzzy msgid "%1 occurrences replaced" msgstr "Quantidade de ocorrências substituídas: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Ficheiro: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Página: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Falha ao reconhecer página %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Selecione os arquivos" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Salvando saída..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Fechar documento" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nenhum idioma disponível" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Nenhum idioma do tesseract disponível para uso. O reconhecimento de " "caracteres não vai funcionar." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Multilingual" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentação automática de páginas" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentação de página com detecção de orientação e de script" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Assumir uma única coluna de texto" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Assumir um único bloco de texto alinhado verticalmente" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Assumir um bloco uniforme de texto" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Assumir uma linha de texto" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Assumir uma única palavra" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Assumir uma única palavra em um círculo" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Texto esparso em nenhuma ordem particular" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Texto esparso com deteção de orientação e script" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modo de segmentação de página" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Lista branca / lista negra de caracteres..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Gerenciar idiomas..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Sobrescrever o resultado existente" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Pular fonte de processamento" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Seleção atual" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Ocorreram erros de reconhecimento" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Falha ao inicializar o tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Reconhecendo página %1 (%2 de %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Página %1: falha ao processar a página" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Reconhecendo..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1.%2: falha ao processar a página" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: a saída já existe, pulando" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: falha na criação do arquivo de saída" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Os seguinte erros ocorreram:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Digitalização cancelada" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Nenhum digitalizador especificado" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Não foi possível conectar ao digitalizador" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Não foi possível iniciar a digitalização" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Erro de comunicação com o digitalizador" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Falha ao gravar imagem" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "A operação é cancelada." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "O dispositivo está ocupado." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "A tampa está aberta." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Alimentador de documentos encravado." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Falta de documentos no alimentador de documentos." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Acesso ao scanner é negado." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Digite a senha para o ficheiro '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF com texto" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "O arquivo PDF já contém texto:\n" "%1\n" "Abri-lo de qualquer maneira?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Imagens e PDFs" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Erro da área de transferência" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Falha ao ler a área de transferência." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Colado %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Erro de captura de tela" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Falha ao capturar a tela." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Captura de tela %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Salvando imagem..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Não foi possível gravar o ficheiro" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Não foi possível escrever no ficheiro %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Apagar o ficheiro?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Apagar os seguintes arquivos?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Abrir resultado" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Tanto um texto como um resultado hOCR foram encontrados. Qual deles deseja " "abrir?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Ficheiro ausente" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "O seguinte ficheiro foi apagado ou movido:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Procurar por" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Substituir com" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Abrir lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Erro ao ler ficheiro" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Não foi possível ler '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Erros ocorreram na leitura do ficheiro" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Algumas entradas da lista de substituições não puderam ser lidas." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Gravar lista de substituições" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Erro ao gravar ficheiro" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Não foi possível escrever em '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Gravar lista?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Você deseja gravar a lista atual?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Uma conexão de sessão com o backend do PackageKit é necessária para gerir " "pacotes de idiomas do Tesseract em todo o sistema, mas não foi encontrada. " "Este serviço é normalmente fornecido por uma aplicação de gestão de " "software, como o Gnome Software. Instale o software que fornece a interface " "necessária do PackageKit, use outro software de gestão de pacotes do sistema " "para gerir os pacotes de idiomas do Tesseract diretamente ou mude para usar " "o caminho de tessdata do usuário na caixa de diálogo de configuração." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Buscando idiomas disponíveis" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Falha ao obter a lista de idiomas disponíveis: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Erro de processamento: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Aplicando alterações..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Falha ao criar o diretório para os ficheiros tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Baixando %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Os seguintes ficheiros não podem ser baixados ou removidos:\n" "%1\n" "\n" "Verifique as permissões de conectividade e diretório.\n" "\n" "Dica: Se você não tem permissões de gravação em pastas do sistema, você pode " "alternar para caminhos de usuário na caixa de diálogo Configurações." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Sim" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Sim a tudo" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Não" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Não a tudo" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Descartar" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Descartar" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Texto" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Sobre o gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "<html><head/><body><p>&nbsp;</p><p>" "Uma interface gráfica para o tesseract-ocr</p><p><a " "href="https://github.com/manisandro/gImageReader/">Website</" "a></p><p>&nbsp;</p></body></html>" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Créditos" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licença" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "No modo de lote, cada fonte de entrada é processada separadamente e o " "resultado gravado lado a lado ao arquivo de entrada." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Codificação do sistema" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Codificação de ficheiro de texto:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      A aplicação parou de " "funcionar

      Pedimos desculpas pela inconveniência. Para ajudar a " "melhorar esta aplicação, por favor envie um relatório de erro para manisandro@gmail.com. Tente descrever o " "que você estava fazendo antes da aplicação parar. Inclua também a informação " "abaixo. Obrigado.

      " #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "O Tesseract encerrou \n" "\n" "Tesseract (o motor de OCR) encerrou ao reconhecer o texto. Isto pode ocorrer " "se os dados treinados usados estiverem corrompidos ou incompreensíveis com a " "versão do Tesseract em uso, ou devido a um bug.\n" "\n" "O rastreamento abaixo pode fornecer informações adicionais sobre onde " "ocorreu o problema.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Mesa" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Frente do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Verso do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Duplex do alimentador de documentos" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Aumentar zoom" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Diminuir zoom" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Tamanho normal" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Melhor ajuste" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rotacionar para a esquerda" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rotacionar para a esquerda" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rotacionar para a direita" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rotacionar para a direita" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Controles de imagem" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Detectar layout automaticamente" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Alternar exibição do painel de saída" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Exportação PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Retrato" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Paisagem" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Falha ao gravar ficheiro" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: oferece mais opções de compressão de " "imagem, mas não lida com scripts complexos.
      • QPrinter: suporta " "apenas a compressão JPEG para armazenar imagens, mas suporta scripts " "complexos.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Gravar como texto hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Localizar e substituir" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Mostrar pré-visualização" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Os seguintes dicionários foram instalados:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Nenhum arquivo recente" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Apagar arquivos" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Os seguintes ficheiros não podem ser baixados ou removidos:\n" "%1\n" "\n" "Verifique as permissões de conectividade e diretório.\n" "\n" "Dica: Se você não tem permissões de gravação em pastas do sistema, você pode " "alternar para caminhos de usuário na caixa de diálogo Configurações." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Saída" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modo de OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Adicionar pasta" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Colar" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Capturar a tela" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Remover imagem" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Apagar imagem" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Limpar lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Remover quebras de linha" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Gravar saída" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Limpar saída" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Formato:" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "Quantidade de ocorrências substituídas: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "Um ficheiro chamado \"%1\" já existe. Você deseja sobrescrevê-lo?" #~ msgid "Overwrite File?" #~ msgstr "Sobrescrever ficheiro?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "Existem %1 documentos com alterações não salvas" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Salvar mudanças antes de fechar? Se você não salvar, todas as suas " #~ "mudanças serão perdidas permanentemente. Selecione os documentos que você " #~ "quer salvar:" #~ msgid "New document %1" #~ msgstr "Novo documento %1" #~ msgid "Recent" #~ msgstr "Recente" #~ msgid "Failed to create output" #~ msgstr "Falha ao criar a saída" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Falha ao criar uma saída. O erro retornado foi: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "Pedimos desculpas pelo inconveniente. Para ajudar a melhorar esta " #~ "aplicao, por favor envieum relatrio de erro para manisandro@gmail.com. Tente descrever o que vocestava fazendo antes da aplicao parar. " #~ "Inclua tambma informao abaixo. Obrigado." #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      O Tesseract " #~ "encerrou

      >p>O Tesseract (o motor OCR) encerrou ao reconhecer " #~ "o texto. Isso pode ocorrer se os dados de treinamento usados estiverem " #~ "corrompidos ou incompativeis com a versão do Tesseract em uso ou devido a " #~ "um bug no Tesseract.

      O stacktrace abaixo pode fornecer informações " #~ "adicionais sobre onde o software travou.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Exemplo: 1-10, 13, 14-18" #~ msgid "Multiple sources" #~ msgstr "Várias origens" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Página %1: falha ao processar a página" #~ msgid "The following errors occurred:%1" #~ msgstr "Os seguinte erros ocorreram:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Os seguintes ficheiros serão apagados:%1" #~ msgid "Failed to open file" #~ msgstr "Falha ao abrir o ficheiro" #~ msgid "The file could not be opened: %1." #~ msgstr "O ficheiro não pode ser aberto: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ficheiro hOCR inválido" #~ msgid "The application has crashed" #~ msgstr "A aplicação parou de funcionar" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract caiu com a seguinte mensagem:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Isso normalmente acontece por uma das seguintes razões:\n" #~ "- Usando ficheiros traineddata desatualizados.\n" #~ "- Faltam arquivos de dados de idioma auxiliar.\n" #~ "- Ficheiros de dados de idioma corrompidos.\n" #~ "\n" #~ "Certifique-se de que seu idioma de arquivos de dados são válidos e " #~ "compatíveis com o tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Não foi possível ler 1%: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #, fuzzy #~ msgid "Scale:" #~ msgstr "Escala" #, fuzzy #~ msgid "Errors occurred" #~ msgstr "Ocorreram erros de reconhecimento" #, fuzzy #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "Os arquivos a seguir não puderam ser abertos: %1" #~ msgid "substitution_list.txt" #~ msgstr "substituições.txt" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tFalha ao inicializar o tesseract" #, fuzzy #~ msgid "So&urces" #~ msgstr "Fontes" #, fuzzy #~ msgid "&Output" #~ msgstr "Sada:" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Para reconhecer áreas específicas, arraste retângulos sobre elas" #~ msgid "Rendering image..." #~ msgstr "Renderizando imagem..." #~ msgid "en_US" #~ msgstr "en_US" #, fuzzy #~ msgid "So&urces" #~ msgstr "Fontes" #, fuzzy #~ msgid "&Output" #~ msgstr "Sada" #~ msgid "Configuration" #~ msgstr "Configurao" #, fuzzy #~ msgid "Preceeded or succeeded by quote" #~ msgstr "Precedido ou sucedido por citao" #, fuzzy #~ msgid "Preceeded by dot" #~ msgstr "Precedido por ponto" #~ msgid "Pasting clipboard..." #~ msgstr "Colando clipboard..." #~ msgid "Taking screenshot..." #~ msgstr "Tirando screenshot..." #~ msgid "Autolayout" #~ msgstr "Autolayout" #~ msgid "Options" #~ msgstr "Opes" #~ msgid "Manage list" #~ msgstr "Gerenciar lista" #~ msgid "Replacement list" #~ msgstr "Lista de substituio" #~ msgid "replace_list.txt" #~ msgstr "replace_list.txt" #~ msgid "Open replacement list" #~ msgstr "Abrir lista de substituio" #~ msgid "Save replacement list" #~ msgstr "Salvar lista de substituio" #~ msgid "Save the current list?" #~ msgstr "Salva a lista atual?" gImageReader-3.4.0/po/ro.po000066400000000000000000001751461417507262200154540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/ru.po000066400000000000000000003013201417507262200154430ustar00rootroot00000000000000# Russian translation for gImageReader package # РуÑÑкий перевод Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° gImageReader # Copyright (C) 2010-2017 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # # Oleg Moiseichuk , 2014-2017. # Sandro Mani , 2017. # Victor Ryzhykh , 2021. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-09-08 22:10+0300\n" "Last-Translator: Victor Ryzhykh \n" "Language-Team: ru\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 21.08.1\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Приложение OCR" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Повторить обнаружение Ñзыков" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Управление Ñзыками" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ÐаÑтройки" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Справка" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "О программе" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Выход" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Разрешённые / запрещённые Ñимволы" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Ðе раÑпознавать Ñти Ñимволы (ÑпиÑок запрещённых):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "ВвеÑти Ñтроку Ñимволов..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "РаÑпознавать только Ñледующие Ñимволы (ÑпиÑок разрешённых):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "РаÑположение панели результатов:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Горизонтально" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Вертикально" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° уÑтановку недоÑтающих орфографичеÑких Ñловарей" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "ÐвтоматичеÑки проверÑть наличие новых верÑий" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Заданные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Дополнительные Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñзыков:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ñ„Ð°Ð¹Ð»Ð° Ñзыковых данных tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ПрефикÑ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Код Ñзыка (ISO 639-1) и код Ñтраны, Ñоединённые подчёркиванием" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Код ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Ðазвание Ñзыка" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Ðазвание" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Отмена" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Шрифт панели результатов:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "По умолчанию" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "МеÑтоположение Ñзыковых данных:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Размещение определений Ñзыков:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Размещение орфографичеÑких Ñловарей:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "ОбщеÑиÑтемные пути" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "ПользовательÑкие пути" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "ÐвтоматичеÑки открывать ÑкÑпортированные документы" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Обновить обратную траÑÑировку" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Программа аварийно завершилаÑÑŒ\n" "\n" "ПриноÑим Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° неудобÑтво. Ð”Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы проÑьба " "Ñообщить о проблеме по адреÑу manisandro@gmail.com. ПожалуйÑта, " "поÑтарайтеÑÑŒ опиÑать, какие дейÑÑ‚Ð²Ð¸Ñ Ð²Ñ‹ выполнÑли перед Ñбоем программы. " "Также приложите информацию, размещённую ниже. СпаÑибо." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Работа tesseract прервана\n" "\n" "Работа tesseract (модуль раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта) была прервана во Ð²Ñ€ÐµÐ¼Ñ " "раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта. Это могло произойти из-за иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð½Ñ‹Ñ… " "наборов данных, повреждённых или неÑовмеÑтимых Ñ Ð¸Ñпользуемой верÑией " "tesseract, или из-за внутренней ошибки tesseract.\n" "\n" "Ð’ приведённой ниже траÑÑировке Ñтека могут иметьÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ " "причине ÑбоÑ.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 #, fuzzy msgid "HOCR Batch Export" msgstr "Пакетный ÑкÑпорт" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Применить" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Закрыть" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Выбрать иÑходную папку:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Формат:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Ввод:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Предварительный проÑмотр вывода:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Входные файлы" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Параметры ÑкÑпорта" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Показать/Ñкрыть панель результатов" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Повернуть текущую Ñтраницу" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Повернуть вÑе Ñтраницы" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "ИÑточники" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Добавить изображениÑ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Добавить изображениÑ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Убрать изображение из ÑпиÑка" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Удалить изображение" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "ОчиÑтить ÑпиÑок" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Миниатюры" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Файлы" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "УÑтройÑтво:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Обновить" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Сканировать в:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Режим:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Цветной" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Ð’ оттенках Ñерого" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Разрешение:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "ОтÑканировать" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "ИÑточник:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Сканировать" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "ЯркоÑть" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "КонтраÑтноÑть" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Разрешение" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Инвертировать цвета" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Увеличить" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Уменьшить" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Обычный размер" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Ðаилучшее заполнение" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Повернуть Ñтраницу" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Выбрать режим вращениÑ" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Выбрать режим вÑтавки" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Выбрать Ñтраницу" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Управление изображением" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "ПроÑтой текÑÑ‚" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Ðвтоопределение Ñтруктуры" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "РаÑпознать вÑÑ‘" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Выбрать Ñзык" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Пакетный ÑкÑпорт" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Пакетный режим" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Ð’ пакетном режиме каждый иÑточник входных данных обрабатываетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾, " "а выходные данные ÑохранÑÑŽÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð»Ð»ÐµÐ»ÑŒÐ½Ð¾ во входном файле." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "СущеÑтвующие результаты:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Добавить к текÑту номера Ñтраниц" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Ðвтоопределение Ñтруктуры" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Диапазон Ñтраниц" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Диапазон Ñтраниц:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Пример: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "ОблаÑть раÑпознаваниÑ:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Страница целиком" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Ðвтоопределение" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Добавить к текущему текÑту:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Ð˜Ð¼Ñ Ð¸Ñходного файла" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñтраница" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF Ñ Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¼" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Текущую Ñтраницу" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "ÐеÑколько Ñтраниц..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Пакетный режим..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Добавить Ñлово" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Введите Ñлово:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Добавить в конец" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Ð’Ñтавить перед текущей Ñтраницей" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "ЭкÑпорт в текÑÑ‚" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "ЭкÑпорт в PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ЭкÑпорт в ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Добавить в конец" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Ð’Ñтавить перед текущей Ñтраницей" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Открыть файл hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Сохранить результаты" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "ЭкÑпорт" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ОчиÑтить результаты" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Ðайти и заменить" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Показать вероÑтноÑти" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Показать предпроÑмотр" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Следующий (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Предыдущий (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Развернуть" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Свернуть" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "СвойÑтва" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "ИÑточник" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Добавить к текущему текÑту" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Ð’Ñтавить в позиции курÑора" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Заменить текущий текÑÑ‚" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "СохранÑть разрыв Ñтроки, еÑли..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Перед ним Ñтоит знак конца Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Перед ним или поÑле него Ñтоит кавычка" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Прочие опции" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "УдалÑть переноÑÑ‹ Ñлов" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Сжимать Ñимволы пробелов" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "СохранÑть абзацы" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Ð’Ñпомогательные ÑредÑтва" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Отображение пробелов" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Открыть файл" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Удалить разрывы Ñтрок в выбранном текÑте" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Отменить" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Вернуть" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Режим вывода:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ‹Ð¼ наложенным текÑтом" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Сжатие:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "КачеÑтво ÑжатиÑ:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "Точек на дюйм:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Ðлгоритм ÑглаживаниÑ:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Параметры изображениÑ:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "УравнÑть интервалы между Ñтроками и Ñловами" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Принудительно иÑпользовать шрифт:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ Ð³Ð°Ñ€Ð½Ð¸Ñ‚ÑƒÑ€Ð°:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Переопределить размер шрифта:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "МаÑштабирование шрифта:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "точек" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Сохранить пробелы шире чем:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "Ñимволов" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Очищать знаки переноÑа перед разрывами Ñтрок" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Параметры текÑта:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Размер Ñтраницы:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Ширина" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Ð’Ñ‹Ñота" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Считать разрешение (точек на дюйм) иÑходных изображений фактичеÑким:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Базовый" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "ВерÑÐ¸Ñ PDF:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Пароль:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Подтвердить пароль:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Шифрование (опционально):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Ðвтор:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Заголовок:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Тема:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Создатель:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Изготовитель:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Ключевые Ñлова:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ (опционально):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Импорт из текущего иÑточника" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "РаÑширенный" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Ðайти" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Заменить" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Заменить вÑÑ‘" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Ðайти предыдущее" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Ðайти Ñледующее" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "С учётом региÑтра" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Замены" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Удалить" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "ПорÑдок:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "РаÑпознать" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "РаÑпознать в буфер обмена" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Сохранить как изображение" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Открыть" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Сохранить" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "ОчиÑтить" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Добавить" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Удалить" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Менеджер tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Управление уÑтановленными Ñзыками:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "Ñкан.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "ИзображениÑ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Выберите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Ðе удалоÑÑŒ инициализировать программные ÑредÑтва ÑканированиÑ." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Сбой ÑканированиÑ" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Сканеры не обнаружены." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "ЗапуÑк ÑканированиÑ..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Открытие уÑтройÑтва..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Задание уÑтановок..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Получение параметров..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Передача данных..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Отмена ÑканированиÑ..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Файловый префикÑ" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Код" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Самоназвание Ñзыка" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "ПиÑьмо" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Обработчик Ñбоев" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Результаты вашей работы были Ñохранены в %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Результаты не изменилиÑÑŒ Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³Ð¾ ÑохранениÑ." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Ðе удалоÑÑŒ произвеÑти обратную траÑÑировку. УÑтановлен ли gdb?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Ðе удалоÑÑŒ загрузить изображение" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Файл не ÑвлÑетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ или повреждён:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Страница %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Сохранить выделенный фрагмент" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "фрагмент.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "РаÑпознать вÑÑ‘" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "РаÑпознать выделенное" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "ВыполнÑетÑÑ Ð°Ð½Ð°Ð»Ð¸Ð· Ñтруктуры" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Временные файлы" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Выбрать папку..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Ðет вариантов" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Добавить в Ñловарь" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Игнорировать Ñлово" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Страница" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Блок текÑта" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Ðбзац" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Строка" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Графика" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑкÑпорта" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑкÑпорта в ODT: невозможна запиÑÑŒ в выходной файл." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ЭкÑпорт в ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±Ñ‹Ð»Ð° отменена" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Ðе удалоÑÑŒ отриÑовать Ñтраницу %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "ЭкÑпорт в PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑкÑпорта в PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Библиотеке PDF не удалоÑÑŒ загрузить выбранный шрифт «%1»." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Монохромный" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Пороговый (ближайший цвет)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Диффузный" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (без потерь)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (без потерь)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñми)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Как оригинал" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "ОÑобый" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "Ñм" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "дюйм" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑкÑпорта в текÑÑ‚: невозможна запиÑÑŒ в выходной файл." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Блок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Строка" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Слово" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Слово Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Показать вероÑтноÑти" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Ðе удалоÑÑŒ обработать Ñледующие Ñтраницы:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Ошибки раÑпознаваниÑ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "ÐеÑколько значений" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Объединить" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Отделить от родителÑ" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Обмен" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Добавить графичеÑкую облаÑть" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Добавить текÑтовый блок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Добавить абзац" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Добавить Ñтроку" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Добавить Ñлово" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "HTML-файлы hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Открыть файл hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Ðе удалоÑÑŒ открыть Ñледующие файлы:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Файлы HTML Ñ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ð¹ разметкой hOCR:\n" " %1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Ðевозможно открыть файлы" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "результаты" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Сохранить результаты в hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Ðе удалоÑÑŒ Ñохранить результаты" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "УбедитеÑÑŒ, что у Ð²Ð°Ñ ÐµÑть право на запиÑÑŒ в выбранную папку." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "ТекÑтовые документы OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Сохранить результаты в ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Файлы PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Сохранить результаты в PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ðеправильный результат" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Ðевозможно перезапиÑать файл, который ÑвлÑетÑÑ Ð¸Ñходным изображением данного " "документа." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "ТекÑтовые файлы" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Сохранить результаты в текÑтовый файл..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Результаты не Ñохранены" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Сохранить результаты, прежде чем продолжить?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Замена..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Применение замен..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Строк выше:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Строк ниже:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabСледующее поле
      Shift+TabПредыдущее поле
      Ð’Ð½Ð¸Ð·Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтрока
      Ð’Ð²ÐµÑ€Ñ…ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтрока
      Ctrl+ÐŸÑ€Ð¾Ð±ÐµÐ»ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¿Ð¸ÑаниÑ
      Ctrl+EnterДобавить " "Ñлово в Ñловарь
      Ctrl+BЖирный шрифт
      Ctrl+IКурÑив
      Ctrl+DРазделить " "Ñлово в позиции курÑора
      Ctrl+MОбъединить Ñ " "предыдущим Ñловом
      Ctrl+Shift+MОбъединить Ñо " "Ñледующим Ñловом
      Ctrl+DeleteУдалить Ñлово
      Ctrl+{Влево,Вправо}Корректировка левой границы
      Ctrl+Shift+{Влево,Вправо}Корректировка правой границы
      Ctrl+{Вверх,Вниз}Корректировка верхней границы
      Ctrl+Shift+{Вверх,Вниз}Корректировка нижней " "границы
      Ctrl++Увеличить размер шрифта
      Ctrl+-Уменьшить размер шрифта
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Доверие: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "ИÑпользуетÑÑ tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Выберите изображение Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° работы..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "ÐеÑколько иÑточников (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Готов" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑиÑ" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "ДоÑтупен gImageReader %1" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Загрузить" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "СпиÑок изменений" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Больше не показывать уведомление" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Больше не показывать" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "УÑтановить" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "ОтÑутÑтвует орфографичеÑкий Ñловарь" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "ОрфографичеÑкий Ñловарь Ð´Ð»Ñ %1 не уÑтановлен" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "УÑтанавливаетÑÑ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкий Ñловарь Ð´Ð»Ñ Â«%1»" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Ошибка" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Ðе удалоÑÑŒ уÑтановить орфографичеÑкий Ñловарь: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ðе удалоÑÑŒ Ñоздать папку Ð´Ð»Ñ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑких Ñловарей." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Ðевозможно прочеÑть %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "ЗагружаетÑÑ Â«%1»..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следующие Ñловари не могут быть загружены:\n" "%1\n" "\n" "Проверьте Ñоединение и права доÑтупа к папкам.\n" "ПодÑказка: еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ прав на запиÑÑŒ в ÑиÑтемные папки, вы можете " "Ñменить пути в диалоге наÑтройки." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Словари уÑтановлены" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Были уÑтановлены Ñледующие Ñловари:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "ОрфографичеÑкие Ñловари Ð´Ð»Ñ Â«%1» не найдены." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Страница: %1\n" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "Документ" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Буфер обмена %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Результаты не Ñохранены" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Сохранить результаты, прежде чем продолжить?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Удаление разрывов Ñтрок..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 #, fuzzy msgid "Highlight mode" msgstr "Режим подÑветки ÑинтакÑиÑа:" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Проверить орфографию" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Файл: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Страница: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Ðе удалоÑÑŒ раÑпознать Ñтраницу %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Выберите файлы" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Сохранить результаты..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Документ" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Языки недоÑтупны" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "ÐедоÑтупны Ñзыковые файлы Ð´Ð»Ñ tesseract. РаÑпознавание не будет работать." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "ÐеÑколько Ñзыков" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "ÐвтоматичеÑкое разбиение Ñтраницы" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Разбиение Ñтраницы Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ ориентации и Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð°" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "РаÑценивать как текÑÑ‚ в одну колонку" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "РаÑценивать как блок текÑта, выровненного по вертикали" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "РаÑценивать как однородный блок текÑта" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "РаÑценивать как Ñтроку текÑта" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "РаÑценивать как отдельное Ñлово" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "РаÑценивать как отдельное Ñлово в круге" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "РаÑÑеÑнный неупорÑдоченный текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "РаÑÑеÑнный текÑÑ‚ Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ ориентации и Ð½Ð°Ñ‡ÐµÑ€Ñ‚Ð°Ð½Ð¸Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð°" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Режим Ñ€Ð°Ð·Ð±Ð¸ÐµÐ½Ð¸Ñ Ñтраницы" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Разрешённые / запрещённые Ñимволы..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Управление Ñзыками..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "ПерезапиÑать" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "ПропуÑтить обработку" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Выделенный объект" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Произошли ошибки раÑпознаваниÑ" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Ðе удалоÑÑŒ инициализировать tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "ИÑточник уже раÑпознан" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Один или неÑколько выбранных иÑточников уже были раÑпознаны. Ð’Ñе равно " "продолжить?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "РаÑпознаётÑÑ Ñтраница %1 (%2 из %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Страница %1: не удалоÑÑŒ отриÑовать Ñтраницу" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "ВыполнÑетÑÑ Ñ€Ð°Ñпознавание..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: не удалоÑÑŒ отобразить Ñтраницу" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: результат уже ÑущеÑтвует, пропуÑк" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: невозможно Ñоздать выходной файл" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Произошли Ñледующие ошибки:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Сканирование отменено" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Ðе задан Ñканер" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Ðевозможно подключитьÑÑ Ðº Ñканеру" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ðевозможно начать Ñканирование" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Ошибка ÑвÑзи Ñо Ñканером" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Ðе удалоÑÑŒ Ñохранить изображение" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð°." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "УÑтройÑтво занÑто." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Крышка открыта." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Сканер заклинило." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Ð’ Ñканере больше нет документов." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "ДоÑтуп к Ñканеру запрещён." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Введите пароль Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%1»:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF Ñ Ñ‚ÐµÐºÑтом" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF-файл уже Ñодержит текÑÑ‚:\n" "%1\n" "Ð’Ñе равно открыть?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ файлы PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Ошибка буфера обмена" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Ðе удалоÑÑŒ прочеÑть Ñодержимое буфера обмена." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Буфер обмена %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Ошибка Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñнимка Ñкрана" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Ðе удалоÑÑŒ Ñделать Ñнимок Ñкрана." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Снимок Ñкрана %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Сохранение изображениÑ..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ðевозможно запиÑать файл" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Ðевозможно запиÑать в %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Удалить файл?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Удалить Ñледующие файлы?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Открыть результаты" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Ðайден как текÑÑ‚, так и файл hOCR. Что из них открыть?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Файл отÑутÑтвует" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Следующий файл был удалён или перемещён:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "ИÑкать" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Заменить на" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "СпиÑок замен" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Открыть ÑпиÑок замен" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Ðевозможно прочеÑть «%1»." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Произошли ошибки при чтении файла" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Ðе удалоÑÑŒ прочитать некоторые Ñлементы ÑпиÑка замен." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Сохранить ÑпиÑок замен" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Ðевозможно Ñохранить в «%1»." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Сохранить ÑпиÑок?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Ð’Ñ‹ хотите Ñохранить текущий ÑпиÑок?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÑиÑтемными Ñзыковыми пакетами tesseract требуетÑÑ " "PackageKit, однако он не был найден. PackageKit можно уÑтановить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ " "GNOME Software — утилиты Ð´Ð»Ñ ÑƒÑтановки приложений и обновлений. ПожалуйÑта, " "либо уÑтановите требуемый Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ PackageKit, либо иÑпользуйте ÑиÑтемный " "пакетный менеджер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñзыковыми пакетами tesseract, либо " "переключитеÑÑŒ на пользовательÑкий путь к tessdata в диалоге конфигурации." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "ЗапрашиваютÑÑ Ð´Ð¾Ñтупные Ñзыки" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Ðе удалоÑÑŒ получить ÑпиÑок доÑтупных Ñзыков: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Ошибка анализа: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Применение изменений..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ðе удалоÑÑŒ Ñоздать папку Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "ЗагружаетÑÑ %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следующие файлы не могут быть загружены или удалены:\n" "%1\n" "\n" "Проверьте Ñоединение и права доÑтупа к папкам.\n" "\n" "ПодÑказка: еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ прав на запиÑÑŒ в ÑиÑтемные папки, вы можете " "Ñменить пути в диалоге наÑтройки." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Да" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Да Ð´Ð»Ñ Ð²Ñех" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ðет" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Ðет Ð´Ð»Ñ Ð²Ñех" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "СброÑ" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "СброÑ" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "ТекÑÑ‚" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "О программе gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr

      Сайт

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "БлагодарноÑть" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "ЛицензиÑ" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Ð’ пакетном режиме каждый иÑточник обрабатываетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾ и вÑе результаты " "ÑохранÑÑŽÑ‚ÑÑ Ð²Ð¾ входной файл." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ°" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Кодировка текÑтового файла:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Программа аварийно " "завершилаÑÑŒ

      ПриноÑим Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° неудобÑтво. Ð”Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ " "работы программы проÑьба Ñообщить о проблеме по адреÑу manisandro@gmail.com. ПожалуйÑта, поÑтарайтеÑÑŒ опиÑать, какие дейÑÑ‚Ð²Ð¸Ñ Ð²Ñ‹ выполнÑли перед " "Ñбоем программы. Также приложите информацию, размещённую ниже. СпаÑибо.

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      Работа tesseract " "прервана

      Работа tesseract (модуль раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта) была " "прервана во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта. Это могло произойти из-за " "иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð½Ñ‹Ñ… наборов данных, повреждённых или неÑовмеÑтимых Ñ " "иÑпользуемой верÑией tesseract, или из-за внутренней ошибки tesseract.

      Ð’ приведённой ниже траÑÑировке Ñтека могут иметьÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ " "ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ причине ÑбоÑ.

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Планшетный" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ÐПД (лицеваÑ)" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ÐПД (обратнаÑ)" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ÐПД (дуплекÑ)" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Увеличить" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Уменьшить" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Обычный размер" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Ðаилучшее заполнение" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Повернуть влево" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Повернуть влево" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Повернуть вправо" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Повернуть вправо" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Управление изображением" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Ðвтоопределение Ñтруктуры" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Показать/Ñкрыть панель результатов" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "ЭкÑпорт в PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Метод ÑкÑпорта:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Портретный" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Ðльбомный" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Ðе удалоÑÑŒ запиÑать в файл" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: больше возможноÑтей Ð´Ð»Ñ ÑÐ¶Ð°Ñ‚Ð¸Ñ " "изображений, но нет поддержки Ñложных ÑиÑтем пиÑьменноÑти.
      • QPrinter: " "доÑтупно только Ñжатие JPEG, но Ñложные ÑиÑтемы пиÑьменноÑти поддерживаютÑÑ." "
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Сохранить как текÑÑ‚ hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Ðайти и заменить" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Показать предпроÑмотр" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Были уÑтановлены Ñледующие файлы Ñловарей:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Ðет поÑледних файлов" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Удаление файлов" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Следующие файлы не могут быть загружены или удалены:\n" "%1\n" "\n" "Проверьте Ñоединение и права доÑтупа к папкам.\n" "Совет: еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ прав на запиÑÑŒ в ÑиÑтемные папки, вы можете Ñменить " "пути в диалоге наÑтройки." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Результаты" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Режим раÑпознаваниÑ:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Добавить папку" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Ð’Ñтавить" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Сделать Ñнимок Ñкрана" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Убрать изображение" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Удалить изображение" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "ОчиÑтить ÑпиÑок" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Удалить разрывы Ñтрок" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Сохранить результаты" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ОчиÑтить результаты" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "Form" #~ msgstr "Форма" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Файл Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «%1» уже ÑущеÑтвует. Ð’Ñ‹ уверены, что хотите его " #~ "перезапиÑать?" #~ msgid "Overwrite File?" #~ msgstr "ПерезапиÑать файл?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Документ" #~ msgid "Recent" #~ msgstr "Предыдущие файлы" #~ msgid "Failed to create output" #~ msgstr "Ðевозможно получить результат" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Ðевозможно получить результат. Ошибка: %1" #~ msgid "" #~ "<html><head/><body><p>&nbsp;</p><" #~ "p>A graphical frontend to tesseract-ocr</p><p><a " #~ "href="https://github.com/manisandro/gImageReader/">" #~ "Website</a></p><p>&nbsp;</p></body></" #~ "html>" #~ msgstr "" #~ "<html><head/><body><p>&nbsp;</p><" #~ "p>ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr</p><p><a " #~ "href="https://github.com/manisandro/gImageReader/">" #~ "Website</a></p><p>&nbsp;</p></body></" #~ "html>" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Программа аварийно завершилаÑÑŒ</span></p>" #~ "<p>Приношу Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° неудобÑтво. Ð”Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы " #~ "проÑьба Ñообщить о проблеме по адреÑу <a href="mailto:" #~ "manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. ПроÑьба поÑтаратьÑÑ Ð¾Ð¿Ð¸Ñать, какие " #~ "дейÑÑ‚Ð²Ð¸Ñ Ð²Ñ‹ выполнÑли перед Ñбоем программы. Также приложите информацию, " #~ "размещённую ниже. СпаÑибо.</p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Работа Tesseract была прервана</span></p>" #~ "<p>Tesseract (движок OCR) прервал раÑпознавание текÑта. Это может " #~ "проиÑходить, еÑли иÑпользуемые данные Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ñ‹ или " #~ "неÑовмеÑтимы Ñ Ð¸Ñпользуемой верÑией tesseract, или из-за ошибки в " #~ "tesseract. </p><p>ÐŸÑ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ð°Ñ Ð½Ð¸Ð¶Ðµ траÑÑировка Ñтека может " #~ "предоÑтавить дополнительную информацию о том, где произошел Ñбой.</" #~ "p></body></html>" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Пример:</b> 1-10, 13, 14-18</small>" #~ msgid "plain text" #~ msgstr "проÑтой текÑÑ‚" #~ msgid "Multiple sources" #~ msgstr "ÐеÑколько иÑточников" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Страница %1: не удалоÑÑŒ отриÑовать Ñтраницу" #~ msgid "The following errors occurred:%1" #~ msgstr "Произошли Ñледующие ошибки:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Будут удалены Ñледующие файлы:%1" #~ msgid "Failed to open file" #~ msgstr "Ðе удалоÑÑŒ открыть файл" #~ msgid "The file could not be opened: %1." #~ msgstr "Ðе удалоÑÑŒ открыть файл: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ðекорректный файл hOCR" #~ msgid "The application has crashed" #~ msgstr "Программа аварийно завершилаÑÑŒ" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract аварийно завершилÑÑ Ñо Ñледующей ошибкой:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Это обычно проиÑходит по одной из причин:\n" #~ "- ИÑпользуютÑÑ ÑƒÑтаревшие файлы traineddata.\n" #~ "- ОтÑутÑтвуют вÑпомогательные файлы Ñзыковых данных.\n" #~ "- Повреждены файлы Ñзыковых данных.\n" #~ "\n" #~ "УбедитеÑÑŒ, что ваши файлы Ñзыковых данных в порÑдке и ÑовмеÑтимы Ñ " #~ "tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Ðевозможно прочеÑть %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "PoDoFo" #~ msgstr "PoDoFo" #~ msgid "QPrinter" #~ msgstr "QPrinter" #~ msgid "90" #~ msgstr "90" #~ msgid "300" #~ msgstr "300" #~ msgid "100" #~ msgstr "100" #~ msgid "10" #~ msgstr "10" #~ msgid "%" #~ msgstr "%" #~ msgid "4" #~ msgstr "4" #~ msgid "1" #~ msgstr "1" #~ msgid "Document font:" #~ msgstr "Шрифт документа:" #~ msgid "Scale:" #~ msgstr "МаÑштаб:" #~ msgid "Errors occurred" #~ msgstr "Произошли ошибки" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Ðевозможно отриÑовать Ñледующие Ñтраницы:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "ÑпиÑок_замен.txt" #~ msgid "Detect script and orientation" #~ msgstr "Определить начертание шрифта и ориентацию" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñзыковыми пакетами tesseract требуетÑÑ PackageKit, однако " #~ "он не был найден. ПроÑьба иÑпользовать ÑиÑтемный пакетный менеджер Ð´Ð»Ñ " #~ "ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñзыковыми пакетами tesseract." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tÐе удалоÑÑŒ инициализировать tesseract" #~ msgid "So&urces" #~ msgstr "&ИÑточники" #~ msgid "&Output" #~ msgstr "&Результаты" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Чтобы раÑпознать отдельные облаÑти, обведите их рамкой." #~ msgid "Rendering image..." #~ msgstr "ОтриÑовка изображениÑ..." #~ msgid "en_US" #~ msgstr "ru_RU" #, fuzzy #~ msgid "So&urces" #~ msgstr "ИÑточники" #, fuzzy #~ msgid "&Output" #~ msgstr "Результаты" #~ msgid "Configuration" #~ msgstr "ÐаÑтройки" gImageReader-3.4.0/po/sat.po000066400000000000000000002041551417507262200156140ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-08-30 08:35+0000\n" "Last-Translator: Prasanta-Hembram \n" "Language-Team: Santali \n" "Language: sat\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.8.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR ᱱᱮᱦᱚᱨ ᱥᱟᱠᱟᱢ" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "ᱟᱲᱟᱠᱫᱩᱦᱲᱟ ᱯᱟᱱᱛᱮ" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "ᱟᱲᱟᱠᱠᱚ ᱢᱮᱱᱮᱡ" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ᱠᱩᱥᱤ ᱠᱚ" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "ᱜᱚᱸᱲᱚᱸ" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "ᱵᱟᱵᱚᱛ" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "ᱵᱟᱹᱜᱤ" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "ᱴᱷᱤᱠ" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "ᱟᱨᱡᱟᱣ ᱯᱮᱱ ᱥᱮᱪᱮᱫᱚᱜ:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "ᱜᱤᱛᱤᱡ ᱛᱮᱭᱟᱜ" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "ᱛᱤá±á±œá±© ᱛᱮᱭᱟᱜ" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "ᱟᱫ ᱠᱟᱱ ᱥᱯᱮᱞᱪᱮᱠ ᱥᱟᱵᱟᱫ ᱜᱟᱫᱮᱞ ᱵᱚᱦᱟᱞ ᱞᱟᱹᱜᱤᱫ ᱠᱣᱮᱨᱤ" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "ᱟᱡ ᱛᱮᱜᱮ ᱱᱟᱶᱟ ᱯᱨᱚᱜᱨᱟᱢ ᱵᱷᱚᱨᱥᱚᱱ ᱧᱮᱞ ᱵᱤᱰᱟᱹᱣ ᱢᱮ" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "ᱢᱟᱲᱟᱠᱡᱷᱚᱱ ᱢᱮᱱᱟᱜ ᱚᱱᱚᱨᱚᱢ:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "ᱟᱨᱦᱚᱸ ᱢᱮᱱᱟᱜ ᱚᱱᱚᱨᱚᱢ:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Tesseract ᱟᱰᱟᱠᱥᱟᱹᱠᱷᱭᱟᱹᱛ ᱨᱮᱫ ᱨᱮᱭᱟᱜ ᱥᱟᱵᱟᱫ ᱮᱛᱚᱦᱚᱵ" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ᱥᱟᱵᱟᱫ ᱮᱛᱚᱦᱚᱵ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 ᱯᱟᱹᱨᱤᱥ ᱠᱳᱰ ᱯᱚᱨᱮ ᱫᱤᱥᱚᱢ ᱠᱳᱰ" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO ᱠᱳᱰ" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "ᱟᱲᱟᱠᱨᱮᱭᱟᱜ ᱧᱩᱛᱩᱢ" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "ᱧᱩᱛᱩᱢ" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "ᱵᱟᱹᱰᱨᱟᱹ" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "ᱵᱟᱦᱨᱮ ᱚᱰᱚᱠ ᱯᱮᱱ ᱪᱤᱠᱤ:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "ᱦᱩᱰᱟᱹᱜ" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "ᱟᱰᱟᱠᱥᱟᱹᱠᱷᱤᱭᱟᱹᱛ ᱡᱟᱭᱜᱟ:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "ᱟᱲᱟᱠᱩᱱᱩᱨᱩᱢ ᱨᱮᱭᱟᱜ ᱦᱚᱨ:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "ᱵᱟᱱᱟᱱ ᱥᱟᱵᱟᱫ ᱜᱟᱫᱮᱞ ᱦᱚᱨ:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "ᱥᱭᱥᱴᱚᱢᱼᱚᱥᱟᱨ ᱦᱚᱨ" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "ᱵᱮᱵᱟᱨᱤᱭᱟ ᱦᱚᱨ" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "ᱵᱷᱤᱡᱟ ᱟᱠᱟᱱᱟ ᱰᱚᱠᱭᱩᱢᱮᱱᱴ ᱠᱚ ᱫᱚ ᱟᱡ ᱛᱮᱜᱮ ᱢᱩᱞ ᱮᱯᱯᱞᱤᱠᱮᱥᱚᱱ ᱛᱮ ᱠᱷᱩᱞᱟᱹᱜᱼᱟ" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "ᱵᱮᱠᱴᱨᱮᱥ ᱫᱩᱦᱲᱟᱹᱛᱮᱭᱟᱨ ᱢᱮ" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "ᱯᱚᱴᱚᱢ ᱵᱟᱪᱷᱟᱣ ᱢᱮ ..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "ᱵᱟᱦᱨᱮ ᱚᱰᱚᱠ ᱯᱮᱱ ᱪᱤᱠᱤ:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "ᱱᱤᱛᱚᱜᱟᱜ ᱨᱮᱫ ᱠᱚ ᱵᱟᱹᱱᱩᱜᱼᱟ" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "ᱟᱩᱴᱯᱩᱴ ᱯᱮᱱ ᱴᱚᱜᱜᱞ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱟᱹᱪᱩᱨ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "ᱡᱷᱚᱛᱚ ᱥᱟᱦᱴᱟ ᱠᱚ ᱟᱹᱪᱩᱨ ᱢᱮ" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "ᱪᱤᱛᱟᱹᱨ ᱠᱚ ᱥᱮᱞᱮᱫ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "ᱞᱤᱥᱴᱭ ᱠᱷᱚᱱ ᱪᱤᱛᱹᱨ ᱚᱪᱚᱜ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "ᱡᱩᱩᱢ ᱤᱱ" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "ᱡᱩᱩᱢ ᱟᱩᱴ" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "ᱢᱩᱞ ᱢᱟᱯ" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "ᱢᱷᱤᱠ ᱯᱷᱤᱴ" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "ᱥᱟᱦᱴᱟ ᱟᱹᱪᱩᱨ" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "ᱟᱹᱪᱩᱨ ᱢᱳᱰ ᱪᱚᱭᱚᱱ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "ᱤᱱᱥᱟᱹᱨᱴ ᱢᱳᱰ ᱪᱚᱭᱚᱱ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "ᱥᱟᱦᱴᱟ ᱪᱚᱭᱚᱱ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "ᱪᱤᱛᱟᱹᱨ ᱠᱟᱹᱱᱴᱨᱚᱞᱠᱚ" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "ᱥᱟᱫᱟ ᱚᱞ" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 #, fuzzy msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "ᱚᱴᱚᱰᱤᱴᱮᱼᱠᱴ ᱞᱮᱭᱟᱩᱴ" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "ᱡᱷᱚᱛᱚ ᱪᱤᱱᱦᱟᱹᱣ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "ᱯᱟᱹᱨᱥᱤ ᱪᱚᱭᱚᱱ ᱢᱮ" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "ᱯᱚᱴᱚᱢ ᱵᱟᱪᱷᱟᱣ ᱢᱮ ..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "ᱱᱚᱶᱟ ᱠᱚ ᱨᱮᱫ ᱢᱮᱴᱟᱣᱟ ᱥᱮ?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "ᱟᱩᱴᱯᱩᱴ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "ᱚᱞ ᱟᱨ hOCR ᱟᱩᱴᱯᱩᱴ ᱵᱟᱨᱭᱟ ᱧᱟᱢ ᱮᱱᱟ ᱾ ᱟᱢ ᱚᱠᱟ ᱢᱟᱲᱟᱠᱠᱷᱩᱞᱟᱹ ᱥᱮᱱᱟᱢ ᱠᱟᱱᱟ?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "ᱚᱞ" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "ᱱᱤᱛᱚᱜᱟᱜ ᱨᱮᱫ ᱠᱚ ᱵᱟᱹᱱᱩᱜᱼᱟ" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "ᱨᱮᱫ ᱢᱮᱴᱟᱣ ᱢᱮ" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR ᱢᱳᱰ:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "ᱯᱚᱴᱚᱢ ᱥᱮᱞᱮᱫ ᱢᱮ" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "ᱞᱟᱴᱷᱟ" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "ᱥᱠᱨᱤᱱᱥᱚᱴ ᱤᱫᱤ ᱢᱮ" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "ᱪᱤᱛᱟᱹᱨ ᱚᱪᱚᱜᱽ ᱢᱮ" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "ᱪᱤᱛᱟᱹᱨ ᱢᱮᱴᱟᱣ ᱢᱮ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "ᱞᱤᱥᱴ ᱢᱮᱴᱟᱣ ᱢᱮ" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "ᱥᱴᱨᱤᱯ ᱞᱟᱭᱤᱱ ᱨᱟᱹᱯᱩᱫᱽ" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "ᱟᱩᱴᱯᱩᱴ ᱥᱟᱺᱪᱟᱣ" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ᱟᱩᱴᱯᱩᱴ ᱢᱮᱴᱟᱣ ᱢᱮ" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "Recent" #~ msgstr "ᱱᱤᱛᱚᱜᱼᱟᱜ" #, fuzzy #~ msgid "plain text" #~ msgstr "ᱥᱟᱫᱟ ᱚᱞ" gImageReader-3.4.0/po/sl.po000066400000000000000000002445361417507262200154520ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Bernard Banko , 2016. # Sandro Mani , 2016, 2017. # Bernard Banko , 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-03-27 21:29+0000\n" "Last-Translator: Miharix \n" "Language-Team: Slovenian \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Generator: Weblate 4.6-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR program" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ponovno zaznaj jezike" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Dodatni jeziki" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Možnosti" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "PomoÄ" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "O programu" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "KonÄaj" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Filter (NE)Želenih znakov" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Prepovej prepozavo sledeÄih znakov (blacklist):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Vnesi niz znakov..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Dovoli prepozavo le sledeÄih znakov (whitelist):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "V redu" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Postavitev rezultata:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Vodoravno" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "NavpiÄno" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Poizvej za namestitev manjkajoÄih Ärkovalnikov" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Samodejno preveri morebitne posodobitve programa" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "PreddoloÄene nastavitve jezika:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Dodatne nastavitve jezika:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Predpona datoteke z jezikovnimi podatki tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Predpona" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Jezikovna koda ISO 639-1 s kodo države" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Koda ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Ime jezika" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Ime" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "PrekliÄi" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Pisava za rezultat:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Privzeto" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Mesta jezikovnih podatkov:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Pot jezikovnih doloÄil:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Pot slovarjev Ärkovalnika:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Sistemske poti" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Uporabnikove poti" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Izvožene datoteke samodejno odpri s privzetim programom" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Ponovi povratno sledenje" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Program se je sesul\n" "\n" "OpraviÄujemo se za nevÅ¡eÄnost. Da bo progrm v prihodnosti poÅ¡lji, prosimo " "vzamite v obzir misel, da bi nam javili napako na manisandro@gmail.com. Pri tem poizkusite opisati, kaj ste delali, preden se je program sesul. " "Ne pozabite priložiti tudi spodnje podatke. Hvala." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract je prekinil z delom\n" "\n" "Tesseract (OCR mehanizem) je bil prekinjen med prepoznavo besedila. To se " "lahko zgodi, Äe so uporabljeni vadbeni podatki poÅ¡kodovani ali " "nekompatibilni z verzijo trenutno uporabljenega Tesseract-a, ali zaradi " "hroÅ¡Äa v Tesseract-u.\n" "\n" "Iz podatkov sklada spodaj, boste morebiti lahko ugotovili bolj toÄen vir " "težave.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Uporabi" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Zapri" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Izberi mapo..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Vrsta:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Izhod:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Vrsta izpisa:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Ni nedavno odprtih datotek" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Druge možnosti" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Preklopi prikaz rezultata" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Zavrti trenutno stran" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Zavrti vse strani" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Viri" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Dodaj slike" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Dodaj slike" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Odstrani slike s spiska" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "ZbriÅ¡i sliko" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "PoÄisti spisek" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Predogled" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Datoteke" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Naprava:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Osveži" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Izhod:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "NaÄin:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Barvno" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Sivinsko" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "LoÄljivost:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Zaznaj" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Koda:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Pridobi" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Svetlost" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "LoÄljivost" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Obrni barve" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Približaj" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Oddalji" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normalna velikost" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "NajboljÅ¡e ujemanje" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Zavrti stran/ni za" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Izberi naÄin vrtenja" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Izberi naÄin vstavljanja" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Izberi stran" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Kontrolniki slike" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Neoblikovano besedilo" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR ali PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Samodejno zaznaj razporeditev" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Prepoznaj vse" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Izberi jezik" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Izvozi" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "GrafiÄni vmesnik za tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Masovni naÄin" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "V masovnem naÄinu se vsak vhod obdeluje loÄeno in izhod shrani v isto mapo " "kot je vhod." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "ObstojeÄi izhod:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Dodaj spredaj Å¡tevilko strani h besedilu izhoda" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Samodejno zaznaj razporeditev strani" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Obseg strani" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Obseg strani:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Primer:1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "PodroÄje prepoznavanja:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Celotna stran" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Samodejno zaznaj" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Pripni pred izhodno besedilo:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Izvorno ime datoteke" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Izvorna stran" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "ZaÅ¡Äiten PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Trenutno stran" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "VeÄ strani ..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Masovni naÄin..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Dodaj besedo" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "VpiÅ¡i besedo:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Novi izpis dodaj na koncu zadnje strani" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Novi izpis dodaj pred trenutno stranjo" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Izvozi kot golo besedilo" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Izvozi kot PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Izvozi kot ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Dokument pripni na koncu zadnje strani" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Vstavi dokument pred trenutno stranjo" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Odpri datoteko hOCR" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Shrani rezultat" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Izvozi" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "PoÄisti rezultat" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Najdi in zamenjaj" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Prikaži vrednosti sigurnosti" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Pokaži predogled" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Naslednja (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "PrejÅ¡nja (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "RazÅ¡iri vse" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Zloži vse" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Lastnosti" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Koda" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Pripni trenutnemu besedilu" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Dodaj pri kazalki" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Zamenjaj trenutno besedilo" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Ohrani prelom vrstice, Äe ..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "sledi loÄilu (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "je pred narekovajem ali za njim" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Druge možnosti" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Združi deljene besede" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Strni presledke" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Ohrani odstavke" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Vidni pripomoÄki" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Pokaži presledke" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Odpri datoteko hOCR" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Odstrani prelome vrstic v izbranem besedilu" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Razveljavi" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Obnovi" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Vrsta izpisa:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF z nevidno plastjo besedila" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Stiskanje:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Kakovost stiskanja:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritem razprÅ¡evanja:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Nastavitve slike:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Poenoti razdalje med vrsticami in besedami" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Zamenjaj pisavo:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Rezervna pisava:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Zamenjaj velikost pisave:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "PoveÄava velikosti pisave:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Ohrani presledke, Å¡irÅ¡e kot:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "znakov" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Popravi vezaje pred prelomom besedila" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Nastavitve besedila:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Velikost lista:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Å irina" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "ViÅ¡ina" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Obdeluj izvorne slike kot, da je v resnici njihov DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Osnovno" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF razliÄica:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Geslo:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Potrdi geslo:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Å ifriranje (opcijsko):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Avtor:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Naslov:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Zadeva:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Avtor:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Izdal:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "KjuÄne besede:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Dodatne informacije (opcijsko):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Uvozi iz trenutne izvorne datoteke" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Napredno" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Najdi" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Zamenjaj" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Zamenjaj vse" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Najdi predhodno" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Najdi naslednje" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "UpoÅ¡tevaj velikost" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Zamenjave" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "ZbriÅ¡i" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Vrstni red:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Prepoznaj" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Prepoznaj na odložiÅ¡Äe" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Shrani kot sliko" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Odpri" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Shrani" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "PoÄisti" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Dodaj" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Odstrani" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Upravljalnik Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Upravljaj nameÅ¡Äene jezike:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Slike" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Izberite ime datoteke za rezultat ..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Prednastavljanje zaledja obtiÄnega branja spodletelo." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "OptiÄno branje spodletelo" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Ni zaznanega obtiÄnega bralnika." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "ZaÄenjanje branja ..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Odpiranje naprave ..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Nastavljanje možnosti ..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Pridobivanje nastavitev ..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "PrenaÅ¡anje podatkov ..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Preklicevanje branja ..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Predpona imena datoteke" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Koda" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Izvorno ime" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skripta" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Upravljalnik sesutij" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "VaÅ¡e delo je bilo shranjeno pod %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Neshranjenega dela ni." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Pridobivanje povratnega sledenja spodletelo. Je GDB nameÅ¡Äen?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Nalaganje slike spodletelo" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Datoteka morda ni slika ali pa je poÅ¡kodovana:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Stran %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Slike PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Shrani sliko izbora" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "izbor.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Prepoznaj vse" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Prepoznaj izbor" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Analiziranje razporeditve" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Izberi mapo..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Ni predlogov" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Dodaj v slovar" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Prezri besedo" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Stran" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Besedilni blok" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Odstavek" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Vrstica" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafika" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Izvoz ni uspel" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Izvoz v ODT ni uspel: Ni mogoÄe pisati v ciljno datoteko." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Izvažanje v ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operacija je bila prekinjena" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Izrisovanje strani %1 spodletelo" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Izvažanje v PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Izvoz v PDF je spodletel: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Knjižnica PDF ni zmogla naložiti pisave '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Enobarvno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Prag (najbližja barva)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difuzno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (brezizgubno)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (brezizgubno)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (izgubno)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Isto kot izvor" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Prilagojeno" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "v" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "Shranjevanje golega besedila spodletelo: Ni možno pisati v ciljno datoteko." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Vrstica" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Beseda" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Ne slovniÄna beseda" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Prikaži vrednosti sigurnosti" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Naslednjih strani ni bilo mogoÄe obdelati:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Napake pri prepoznavanju" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "VeÄ vrednosti" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Združi" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "LoÄi od nadrejenega elementa" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Zamenjaj" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Dodaj podroÄje grafike" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Dodaj besedilni blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Dodaj odstavek" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Dodaj vrstico" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Dodaj besedo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Datoteke hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Odpri datoteko hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Naslednjih datotek ni bilo mogoÄe odpreti:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "SledeÄe datoteke nimajo veljaven zapis v hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Datotek ni mogoÄe odpreti" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "rezultat" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Shrani rezultat hOCR ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Shranjevanje rezultata spodletelo" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Preverite, Äe imate v izbrani mapi pravico pisanja." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Tekstovni dokumenti" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Shrani rezultat kot ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "Datoteke PDF" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Shrani rezultat PDF ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Neveljavni izhod" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Ni možno prepisati datoteke, ki je izvorna slika tega dokumenta." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Besedilne datoteke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Shrani golo besedilo..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Rezultat ni bil shranjen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ali naj se pred nadaljevanjem shrani rezultat?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Zamenjevanje ..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Uveljavljanje zamenjav ..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Bližnjice na tipkovnici" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Vrstice pred:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Vrstice po:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabNaslednje polje
      Shift+TabPrejšnje polje
      Smerna tipka DolNaslednja " "vrstica
      Smerna tipka GorPrejšnja vrtica
      Ctrl+PreslednicaPredlogi Ärkovanja
      Ctrl+EnterDodaj besedo v slovar
      Ctrl+BPreklopi krepko
      Ctrl+IPreklopi poševno
      Ctrl+DDeli besedo pod kurzorjem
      Ctrl+MZdruži s prejšnjo besedo
      Ctrl+Shift+MZdruži s naslednjo besedo
      Ctrl+DeleteIzbirši besedo
      Ctrl+{Levo, " "Desno}Nastavi levi rob okvirja
      Ctrl+Shift+{Levo, " "Desno}Nastavi desni rob okvirja
      Ctrl+{Gor, Dol}Nastavi zgornji rob okvirja
      Ctrl+Shift+{Gor, Dol}Nastavi spodnji rob okvirja
      Ctrl++PoveÄaj " "velikost pisave
      Ctrl+-Zmanjšaj velikost pisave
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Bližnjice na tipkovnici" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Sigurnost: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Uporaba tesseracta" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Izberite sliko za zaÄetek ..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "VeÄ virov (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Pripravljeno" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Nova razliÄica" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 je na voljo" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Prejmi" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Spremembe" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Ne obveÅ¡Äaj veÄ" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Ne kaži veÄ" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Namesti" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Slovar za Ärkovanje manjka" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Slovar Ärkovalnika za %1 ni nameÅ¡Äen" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "NameÅ¡Äanje slovarja Ärkovalnika za '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Napaka" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "NameÅ¡Äanje slovarja Ärkovalnika spodletelo: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ustvarjanje imenika za slovarje Ärkovalnika je spodletelo." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Branje %1 ni bilo možno: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Prejemanje '%1' ..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Ni bilo možno prenesti sledeÄih slovarjev:\n" "%1\n" "\n" "Preverite povezavo in pravice na mapi.\n" "Namig: ÄŒe nimate pravice pisanja v sistemske mape, lahko preklopite na " "uporabniÅ¡ke poti v nastavitvah tega programa." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Slovarji nameÅ¡Äeni" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "NameÅ¡Äeni so bili naslednji slovarji:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Za '%1' ni bilo možno najti slovarjev." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Stran: %1\n" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "Dokument" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Prilepljeno %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Rezultat ni bil shranjen" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Ali naj se pred nadaljevanjem shrani rezultat?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Odstranjevanje prelomov vrstic ..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Preveri Ärkovanje" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Datoteka: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Stran: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Prepoznavanje strani %1 spodletelo]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Izberi datoteke" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Shrani rezultat ..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Dokument" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Nobenega jezika ni na voljo" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Zaledje tesseract ne more uporabiti nobenega jezika. Prepoznavanje ne bo " "delovalo." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "VeÄjeziÄno" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Samodejen razrez strani" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Razrez strani z odkrivanjem postavitve in pisave" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Predpostavi besedilo v enem stolpcu" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Predpostavi en blok navpiÄno poravnanega besedila" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Predpostavi en sam blok enotnega besedila" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Predpostavi eno vrstico besedila" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Predpostavi eno samo besedo" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Predpostavi eno besedo v krogu" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Redko besedilo brez posebnega reda" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Redko besedilo z odkrivanjem postavitve in pisave" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "NaÄin razreza strani" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Seznam (Ne)želenih znakov..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Upravljaj z jeziki ..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "PrepiÅ¡i obstojeÄi izhod" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "PreskoÄi obdelavo vira" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Trenutni izbor" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Pri prepoznavanju je priÅ¡lo do napak" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Prednastavljanje zaÄelja tesseract spodletelo" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Prepoznavanje strani %1 (%2 od %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Stran %1: Izris strani spodletel" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Prepoznavanje ..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Strani %1:%2: izris strani spodletel" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: izhod že obstaja, spreskok" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: Spodletelo ustvarjanje izhodne datoteke" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "PriÅ¡lo je do naslednjih napak:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "OptiÄno branje preklicano" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Ni navedenih optiÄnih bralnikov" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Ni povezave z optiÄnim bralnikom" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ni mogoÄe zaÄeti optiÄnega branja" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Napaka pri komunikaciji z optiÄnim bralnikom" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Shranjevanje slike spodletelo" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operacija preklicana." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Naprava je zasedena." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Pokrov je odprt." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Zastoj v podajalcu listov." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Podajalec listov je prazen." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Zavrnjen dostop do optiÄnega Äitalca." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Vnesite geslo za datoteko '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF z besedilom" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF datoteka že vsebuje besedilo:\n" "%1\n" "Jo želite kjub temu odpreti?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Slike in PDFji" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Napaka odlagaliÅ¡Äa" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "OdlagaliÅ¡Äa ni bilo mogoÄe prebrati." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Prilepljeno %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Napaka pri posnetku zaslona" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Zaslona ni bilo mogoÄe posneti." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Posnetek %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Shranjevanje slike ..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ni mogoÄe pisati v datoteko" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "V datoteko %1 ni bilo mogoÄe pisati." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Ali naj se datoteka izbriÅ¡e?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "IzbriÅ¡em sledeÄe datoteke?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Odpri izhod" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "Tako golo besedilo kot hOCR sta bila najdena. Katerega želite odpreti?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "ManjkajoÄa datoteka" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Naslednja datoteka je bila izbrisana ali premaknjena:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "PoiÅ¡Äi" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Zamenjaj z" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Spisek zamenjav" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Odpri spisek zamenjav" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Napaka pri branju datoteke" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Datoteke '%1' ni bilo mogoÄe prebrati." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Pri branju datoteke je priÅ¡lo do napak" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Nekaj vnosov v spisku zamenjav ni bilo mogoÄe prebrati." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Shrani spisek zamenjav" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Napaka pri shranjevanju datoteke" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Datoteke '%1' ni bilo mogoÄe zapisati." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Ali naj bo spisek shranjen?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Ali želite shraniti trenutni spisek?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Za upravljanje jezikovnih paketov tesseract je v ozadju potreben PackageKit, " "ki pa ga ni bilo mogoÄe najti. To storitev ponavadi nudi upravitelj paketov " "npr Gome Software. Prosimo namestite ustrezni program, ki nudi PackageKit " "vmesnik. Ali uporabite upravitelj paketov vaÅ¡ega operacijskega sistema in " "namestite jezikovne pakete tesseract direktno. Ali v pogovornem oknu " "nastavitev preklopite na uporabniÅ¡ko doloÄeno pot podatkov tessdata." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Pridobivanje jezikov na voljo" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Spiska jezikov na voljo ni bilo mogoÄe pridobiti: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Napaka sejanja: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Uveljavljanje sprememb ..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ustvarjanje imenika za datoteke tessdata je spodletelo." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Prejemanje %1 ..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Navedenih datotek ni bilo mogoÄe prenesti ali odstraniti:\n" "%1\n" "\n" "Preverite internetno povezavo ter dovoljenja mape.\n" "\n" "Namig: ÄŒe nimate pravic pisanja v sistemske mape lahko preklopite v " "uporabniÅ¡ko pot v nastavitvah tega programa." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Da" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Da, za vse" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Ne" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Ne, za vse" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Zavrzi" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Zavrzi" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Besedilo" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR (Open standard OCR)" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "O programu gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      GrafiÄno vmesnik za tesseract-ocr

      Spletna stran

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Zasluge" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licenca" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "V masovnem naÄinu se vsak vhod obdeluje loÄeno in izhod shrani v isto mapo " "kot je vhod." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Sistemsko" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Kodiranje besedilne datoteke:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Program se je sesul

      OpraviÄujemo se za nevÅ¡eÄnosti. ÄŒe želite pomagati pri " "izpopolnjevanju programa, lahko javite napako na manisandro@gmail.com. Pri tem poizkusite opisati, kaj ste delali, preden se je program sesul. " "VkljuÄite tudi spodnje podatke. Hvala.

      " #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "Tesseract je prekinil z delom\n" "\n" "Tesseract (OCR mehanizem) je bil prekinjen med prepoznavo besedila. To se " "lahko zgodi, Äe so uporabljeni vadbeni podatki poÅ¡kodovani ali " "nekompatibilni z verzijo trenutno uporabljenega Tesseract-a, ali zaradi " "hroÅ¡Äa v Tesseract-u.\n" "\n" "Iz podatkov sklada spodaj, boste morebiti lahko ugotovili bolj toÄen vir " "težave.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Ploskovna miza" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "Samodejni podajalec spredaj" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "Samodejni podajalec zadaj" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "Obojestranski samodejni podajalec" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Približaj" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Oddalji" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normalna velikost" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "NajboljÅ¡e ujemanje" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Zasukaj levo" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Zasukaj levo" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Zasukaj desno" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Zasukaj desno" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Kontrolniki slike" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Samodejno zaznaj razporeditev" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Preklopi prikaz rezultata" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "Izvoz v PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Generator:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "NavpiÄno" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Vodoravno" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Spodletelo pisanje v datoteko" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: ponuja veÄ možnosti kopresije slike, a ne " "zmore zahtevnih skript.
      • QPrinter: podpira le JPEG kompresijo za " "hrambo slik, a zmore zahtevne scripts.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Shrani kot besedilo hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "PoiÅ¡Äi in zamenjaj" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Pokaži predogled" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "NameÅ¡Äene so bile naslednje datoteke slovarjev:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Ni nedavno odprtih datotek" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "IzbriÅ¡i datoteke" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Navedenih datotek ni bilo mogoÄe prejeti ali odstraniti:\n" "%1\n" "\n" "Preverite internetno povezavo ali dovoljenja mape.\n" "Namig: ÄŒe nimate pravice pisanja v sistemske mape lahko preklopite v " "uporabniÅ¡ko pot v nastavitvah tega programa." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Rezultat" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "NaÄin OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Dodaj mapo" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Prilepi" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Posnemi zaslon" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Odstrani sliko" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "ZbriÅ¡i sliko" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "PoÄisti spisek" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Odstrani prelome vrstic" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Shrani rezultat" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "PoÄisti rezultat" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Vrsta:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Datoteka z imenom \"%1\" že obstaja. Ali ste prepriÄani, da jo želite " #~ "prepisati?" #~ msgid "Overwrite File?" #~ msgstr "Naj bo datoteka prepisana?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Dokument" #~ msgid "Recent" #~ msgstr "Nedavno" #~ msgid "Failed to create output" #~ msgstr "Ustvarjanje rezultata spodletelo" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Ustvarjenje rezultata spodletelo. PriÅ¡lo je do sledeÄe napake: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Program se je " #~ "sesul

      OpraviÄujemo se za nevÅ¡eÄnosti. ÄŒe želite pomagati pri " #~ "izpopolnjevanju programa, lahko javite napako na manisandro@gmail.com. Pri tem poizkusite opisati, kaj ste delali, preden se je program " #~ "sesul. VkljuÄite tudi spodnje podatke. Hvala.

      " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract je bil " #~ "prekinjen

      Tesseract (OCR pogon) je prekinil med prepoznavo " #~ "besedila. To se lahko zgodi, Äe se vadbene datoteke poÅ¡kodovane ali " #~ "nekompatibilne z uporabljano verzijo tesseract ali zaradi hroÅ¡Äa v " #~ "tesseract-u.

      Spodanji sklad vam morebiti da dodatno informacijo, " #~ "kje toÄno je priÅ¡lo do sesutja.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Primer:1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Neoblikovano besedilo" #~ msgid "Multiple sources" #~ msgstr "VeÄ virov" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Stran %1: prikaz strani spodletel" #~ msgid "The following errors occurred:%1" #~ msgstr "PriÅ¡lo je do naslednjih napak: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Naslednje datoteke bodo izbrisane: %1" #~ msgid "Failed to open file" #~ msgstr "Odpiranje datoteke spodletelo" #~ msgid "The file could not be opened: %1." #~ msgstr "Datoteke ni bilo mogoÄe odpreti: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Neveljavna datoteka hOCR" #~ msgid "The application has crashed" #~ msgstr "Program se je sesul" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract se je sesul s sledeÄim opisom napake:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Do tega pride obiÄajno zaradi naslednjih razlogov:\n" #~ "- uporabe zastarelih datotek za uÄenje;\n" #~ "- manjkajoÄih pomožnih datotek z jezikovnimi podatki;\n" #~ "- poÅ¡kodovanih datotek z jezikovnimi podatki.\n" #~ "\n" #~ "Poskrbite, da bodo vaÅ¡e jezikovne datoteke veljavne in združljive s " #~ "pogonom tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Branje %1 ni bilo možno: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Pisava dokumenta:" #~ msgid "Scale:" #~ msgstr "Merilo:" #~ msgid "Errors occurred" #~ msgstr "Pojavile so se napake" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Naslednjih strani ni bilo mogoÄe prikazati:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "spisek_zamenjav.txt" #~ msgid "Detect script and orientation" #~ msgstr "Zaznaj besedilo in postavitev" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Za upravljanje jezikovnih paketov tesseract je potreben PackageKit, ki pa " #~ "ga ni bilo mogoÄe najti. Uporabite upravljalnik paketov vaÅ¡ega " #~ "operacijskega sistema in namestite jezikovne pakete." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tPrednastavljanje zaÄelja tesseract spodletelo" gImageReader-3.4.0/po/sq.po000066400000000000000000002433751417507262200154570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-05-27 08:41+0000\n" "Last-Translator: Fisnik Shabani \n" "Language-Team: Albanian \n" "Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR aplikacion" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ridetekto Gjuhët" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Menaxhoni gjuhët" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Preferencat" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Ndihmë" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Rreth" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Dil" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Lista e bardhë / lista e zezë e karakterëve" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Përjashtoni këto karaktere që të njihen (lista e zezë):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Vendosni një varg karakteresh..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Lejoni vetëm karakterët e mëposhtëm që të njihen (lista e bardhë):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientimi i kornizës dalëse:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontal" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertikal" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Query për të instaluar fjalorët e drejtshkrimit që mungojnë" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Kontrolloni automatikisht për versionet e reja të programit" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Përkufizime të paracaktuara gjuhësore:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Përkufizime gjuhësore shtesë:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Prefiksi i skedarit të të dhënave të gjuhës tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefiks" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Kodi i gjuhës ISO 639-1 i ndjekur nga kodi i vendit" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO Kodi" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Emri i gjuhës" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Emri" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Anulo" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Fonti i panelit të daljes:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Parazgjedhur" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Vendndodhjet e të dhënave gjuhësore:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Rruga e përkufizimeve të gjuhës:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Rruga e fjalorëve drejtshkrues:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Shtigjet në të gjithë sistemin" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Shtigjet e përdoruesit" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" "Automatikisht hapni dokumentet e eksportuara me aplikacionin e paracaktuar" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Rigjeneroni backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Aplikacioni ka rënë\n" "\n" "Ju kërkojmë falje për shqetësimin. Për të ndihmuar në përmirësimin e " "aplikacionit, ju lutemi merrni parasysh raportimin e problemit në manisandro@gmail.com. Ju lutemi provoni " "të përshkruani se çfarë po bënit përpara se të rrëzohej aplikacioni. " "Gjithashtu, përfshini informacionin më poshtë. Ju faleminderit." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract ka abortuar\n" "\n" "Tesseract (motori OCR) ka abortuar gjatë njohjes së tekstit. Kjo mund të " "ndodhë nëse të dhënat e përdorura të trajnuara janë të korruptuara ose " "jokompatibile me versionin e tesseract në përdorim, ose për shkak të një " "gabimi në tesseract.\n" "\n" "Stacktrace më poshtë mund të sigurojë informacione shtesë se ku ndodhi " "aksidenti.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Zbato" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Mbylle" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Zgjidhni skedarin..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Formati:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Dalje:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Modaliteti i daljes:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Nuk ka skedarë të fundit" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Opsione të tjera" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Përfshini panelin dalës" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Rrotullo faqen aktuale" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rrotullo të gjitha faqet" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Burimet" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Shto imazhe" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Shto imazhe" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Largo imazhin nga lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Fshije imazhin" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Pastro listën" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Fotografi" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Skedarët" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Pajisje:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Rifresko" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Dalje:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Modaliteti:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Ngjyra" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Shkalla gri" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Rezolucioni:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skano" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Burimi:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Skano" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Shkëlqimi" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrasti" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Rezolucioni" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Ngjyra të kundërta" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Zmadhoje" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Zvogëloje" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Madhësia normale" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Përshtatja më e mirë" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Rrotullo faqen" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Zgjidhni mënyrën e rrotullimit" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Zgjidhni modalitetin e vendosjes" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Zgjedhni faqen" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Kontrollet e imazhit" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Teksti i thjeshtë" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Detektimi automatik i orarit" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Njihni të gjithë" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Zgjedh gjuhën" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Eksporto" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Fronti grafik për tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Modaliteti i serisë" #: ../gtk/data/MainWindow.ui.h:43 #, fuzzy msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Në modalitetin e serisë, secili burim i hyrjes përpunohet veçmas dhe dalja " "ruhet krah për krah në skedarin e hyrjes." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Dalja ekzistuese:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Shtoni numrat e faqeve në tekstin dalës" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Gjeje në mënyrë automatike pamjen e faqes" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Gama e faqes" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Gama e faqes:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Shembull: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Hapësira njohëse:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Faqja e tërë" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Njohje automatike" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Ngjite në tekstin dalës:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Emri i skedarit burimorë" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Faqja burimore" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "PDF i mbrojtur" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Faqja aktuale" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Më shumë faqe..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Modaliteti i serisë..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Shto fjalë" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Shkruaj fjalë:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Shtoni dalje të re pas faqes së fundit" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Vendosni daljen e re para faqes aktuale" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Eksportoni në tekst të thjeshtë" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Eksportoni në PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Eksportoni në ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Shtojeni dokumentin pas faqes së fundit" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Vendosni dokumentin para faqes aktuale" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Hapni hOCR skedarin" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Ruani daljen" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Eksporto" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Pastro daljen" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Gjeni dhe zëvendësoni" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Trego vlerat e besimit" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Shfaq parashikimin" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Ardhshëm (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Mëparshëm (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Zgjero të gjitha" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Fshihe" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Vetitë" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Burimi" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Shtoni në tekstin aktual" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Shtoni te kursori" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Zëvendësoni tekstin aktual" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Mbaje rreshtin e ri nëse..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Etiketa e mëparshme (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Të paraprijshme ose të suksesshme me etiketë" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Opsione të tjera" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Bashko fjalët e ndara" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Kolabo hapsirën e bardhë" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Mbroj paragrafet" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Ndihma vizuele" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Vizato hapësirën e bardhë" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Hapni hOCR skedarin" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Largo ndarjet e rreshtit në tekstin e selektuar" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Zhbëj" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Ribëj" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Modaliteti i daljes:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF me mbivendosje të tekstit të padukshëm" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Kompresioni:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Kualiteti i kompresimit:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Algoritëm për dithering:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Parametrat e imazhit:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Uniformizoni ndarjen e vijës dhe fjalëve" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Mbingarko familjen e fontit:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Tërhiq familjen e fontit:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Mbingarko madhësinë e fontit:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Shkallëzimi i fontit:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Ruani hapësirat më të gjera se:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "karaktere" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Pastro vijat para rreshtit të ri" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Cilësimet e tekstit:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Madhësia e letrës:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Gjerësia" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Lartësia" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Trajtoni burimet e imazhit si DPI të vërtetë:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Themelor" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF version:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Fjalëkalimi:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Konfirmoni fjalëkalimin:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Enkriptim (opsionale):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Autori:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titulli:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Subjekti:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Krijuesi:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Prodhues:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Fjalët kyçe:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Informacion shtesë (opsionale):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importo nga burimi aktual" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Përparuar" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Gjeje" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Zëvendëso" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Zëvendëso të gjitha" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Gjeje të mëparshmin" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Gjeje të ardhshmin" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Të përputhshme" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Zëvendësimet" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Fshije" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Renditja:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Njihni" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Njihe në klipbord" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Ruaje si imazh" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Hape" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Ruaje" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Pastro" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Shto" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Fshije" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Menaxheri i Tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Menaxho gjuhët e instaluara:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Imazhet" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Zgjedhni emrin e skedarit dalës..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Dështoi në inicializimin e sfondit të skanimit." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skanimi dështoi" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Nuk u detektua asnjë skanues." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Fillo skanimin..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Duke e hapur pajisjen..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Vendosja e opsioneve..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Marrja e parametrave..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Transferimi i të dhënave ..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Duke anuluar skanimin..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Prefiksi i emrit të skedarit" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kodi" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Emri amë" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skriptë" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Drejtuesiu i Rrëzimit" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Puna juaj është ruajtur nën % 1 ." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Nuk kishte punë të paruajtur." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Nuk arriti të merrte backtrace. A është i instaluar GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Dështoi në ngarkimin e imazhit" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Skedari mund të mos jetë një imazh ose të jetë i korruptuar:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Faqja %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG imazhe" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Ruaje imazhin e zgjedhur" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Njihni të gjithë" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Njihni përzgjedhjen" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Duke kryer analizën e orarit" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Zgjidhni skedarin..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Asnjë sugjerim" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Shtoni në fjalor" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Injoroni fjalë" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Faqja" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Blloku i tekstit" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragraf" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Linja e tekstit" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafike" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Eksportimi dështoi" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Eksporti ODT dështoi: në pamundësi për të shkruar skedarin e daljes." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Duke e eksportuar në ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Operacioni u anulua" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Dështoi të jepte faqen% 1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Duke eksportuar në PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Eksportimi në PDF dështoi: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Biblioteka PDF nuk mund të ngarkonte fontin '% 1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monokrom" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Pragu (ngjyra më e afërt)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Difuze" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (pa humbje)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (pa humbje)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (me humbje)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Njejtë sikur burimi" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Përshtatshme" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "in" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" "Eksporti i tekstit dështoi: në pamundësi për të shkruar skedarin e daljes." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Bllok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Rresht" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Fjalë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Fjalë e gabuar" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Trego vlerat e besimit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Faqet e mëposhtme nuk mund të përpunohen:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Gabimet e njohjes" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Vlera të shumëfishta" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Bashkim" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Ndaje nga prindi" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Shkëmbim" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Shtoni regjionin grafik" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Shtoni bllokun e tekstit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Shtoni paragraf" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Shtoni linjë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Shtoni fjalë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML skedarë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Hapni skedarin hOCR" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Skedarët e mëposhtëm nuk mund të hapen:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Skedarët e mëposhtëm nuk janë hOCR HTML të vlefshëm:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Në pamundësi për të hapur skedarë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "dalja" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Ruani hOCR daljen..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Dështoi të ruaj daljen" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Kontrolloni nëse keni leje shkrimi në dosjen e zgjedhur." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Tekst Dokumente" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Ruaje ODT daljen..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF Skedarë" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Ruani PDF daljen..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Dalje e pavlefshme" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" "Nuk mund të mbivendoset një skedar i cili është një imazh burimi i këtij " "dokumenti." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Skedarët e tekstit" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Ruani daljen e tekstit..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Dalja nuk është ruajtur" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Ruani daljen para se të vazhdoni?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Duke zëvendësuar..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Duke aplikuar zëvendësimet..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Shkurtesat e tastierës" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Linjat para:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Linjat pas:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" " < / tr> " " " " < td> " "Bashkimi me fjalën e mëparshme " " " " " "
      Tab Fusha tjetër
      Shift + Tab " " Fusha e mëparshme
      Poshtë Linja " "tjetër
      Up Linja e mëparshme
      Ctrl + Hapësirë Sugjerime Drejtshkrimi
      Ctrl + Enter Shtoni fjalë në fjalor
      " "Ctrl + B Ndërroni të guximshme
      Ctrl + I Ndryshoni italic < / td>
      Ctrl + D Ndani " "fjalën në pozicionin e kursorit
      Ctrl + M
      Ctrl + Shift + M Bashkimi me fjalën tjetër
      Ctrl + Delete Fshij fjalën
      Ctrl + {Majtas, Djathtas} Rregulloni skajin e majtë të kutisë lidhëse
      Ctrl " "+ Shift + {Majtas, Djathtas td Rregulloni skajin e djathtë të " "kutisë lidhëse
      Ctrl + {Lart, Poshtë} " "Rregulloni skajin e sipërm të kutisë lidhëse
      Ctrl + " "Shift + {Up, Down Down Rregulloni skajin e poshtëm të kutisë " "lidhëse
      Ctrl ++ Rritja e madhësisë së " "fontit
      Ctrl + - Zvogëlimi i madhësisë së " "fontit " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Shkurtoret e tastierës" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Besim: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Duke përdorur tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Zgjedhni një imazh pët të filluar..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Burime të shumëfishta (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Gati" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Version i ri" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader% 1 është në dispozicion" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Shkarko" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Ditari i ndryshimeve" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Mos njofto përsëri" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Mos u shfaq përsëri" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Instalo" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Fjalori drejtshkrimor mungon" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Fjalori i drejtshkrimit për % 1 nuk është i instaluar" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Instalimi i fjalorit drejtshkrimor për '% 1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Gabim" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Dështoi në instalimin e fjalorit drejtshkrimor:% 1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Dështoi për të krijuar direktorium për fjalorët drejtshkrues." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Nuk mund të lexohet %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Duke shkarkuar '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Fjalorët e mëposhtëm nuk mund të shkarkohen:\n" "% 1\n" "\n" "Kontrolloni lidhjen dhe të drejtat mbi manipulimin e direktoriumit.\n" "Këshillë: Nëse nuk keni leje shkrimi në dosjet e sistemit, mund të kaloni në " "shtigjet e përdoruesve në dialogun e cilësimeve." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Fjalorët u instaluan" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Fjalorët e mëposhtëm u instaluan:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Asnjë fjalor drejtshkrimor nuk u gjet për '% 1'." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Faqja: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Ngjitur % 1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Dalja nuk është ruajtur" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Ruani daljen para se të vazhdoni?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Duke larguar ndarjet e rreshtit..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Kontrolloni drejtshkrimin" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Skedari: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Faqja: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Dështoi të njohë faqen% 1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Zgjidhni skedarët" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Ruaje daljen..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Asnjë gjuhë në dispozicion" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Asnjë gjuhë tesseract nuk është në dispozicion për t'u përdorur. Njohja nuk " "do të funksionojë." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Shumëgjuhësor" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Segmentimi automatik i faqeve" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Segmentimi i faqes me orientim dhe detektim të skriptës" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Supozoni kolonën e vetme të tekstit" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Supozoni një bllok të vetëm të tekstit të përafruar vertikalisht" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Supozoni një bllok të vetëm unik të tekstit" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Supozoni një rresht teksti" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Supozoni një fjalë të vetme" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Supozoni një fjalë të vetme në një rreth" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Tekst i rrallë në asnjë rend të veçantë" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Rralli tekstin me orientim dhe detektim të skriptës" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Modaliteti i segmentimit të faqes" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Lista e bardhë / zezë e karaktereve..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Menaxhoni gjuhët ..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Rishkruani daljen ekzistuese" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Anashkaloni burimin e përpunimit" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Zgjedhja aktuale" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Kanë ndodhur gabime të njohjes" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Dështoi për të inicializuar tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Njohja e faqes% 1 (% 2 nga % 3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Faqja% 1: dështoi të renderojë faqen" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Duke e njohur..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "-% 1:% 2: dështoi të renderojë faqen" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "-% 1: dalja tashmë ekziston, po e anashkalojmë" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "-% 1: nuk arriti të krijojë skedarin e daljes" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Gabimet e mëposhtme kanë ndodhur:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skanimi u anulua" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Asnjë skaner i specifikuar" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Nuk mund të lidhet me skanerin" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Në pamundësi për të filluar skanimin" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Gabim gjatë komunikimit me skanerin" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Dështoi të ruaj imazhin" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Operacioni është anuluar." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Pajisja është e zënë." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Kapaku është i hapur." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Prurësi i dokumentit është i bllokuar." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Prurësi i dokumenteve nuk ka dokumente." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Qasja në skaner është refuzuar." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Shkruani fjalëkalimin për skedarin '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF me tekst" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Skedari PDF përmban tashmë tekstin:\n" "% 1\n" "Hapni atë pavarësisht?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Imazhe dhe PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Gabim në klipboard" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Nuk arriti të lexojë clipboard-in." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Ngjitur % 1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Gabim gjatë fotografimit të ekranit" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Nuk arriti të merrte pamjen e ekranit." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Pamja e ekranit %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Duke e ruajtur imazhin..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Nuk mund të shkruaj skedarin" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Nuk mund të shkruaj në % 1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Fshini skedarin?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Fshini skedarët e mëposhtëm?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Hapni daljen" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Që të dyja, dalja e tekstit dhe hOCR dalja janë gjetur. Cilën dëshironi ta " "hapni?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Skedari që mungon" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Skedari i mëposhtëm është fshirë ose zhvendosur:\n" "% 1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Kërko për" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Zëvendëso me" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Lista e zëvendësimeve" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Hap listën e zëvendësimeve" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Gabim gjatë leximit të skedarit" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Në pamundësi për të lexuar '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Ndodhën gabime gjatë leximit të skedarit" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Disa shënime të listës së zëvendësimeve nuk mund të lexohen." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Ruaje listën e zëvendësimeve" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Gabim gjatë ruajtjes së skedarit" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Në pamundësi për të shkruar tek '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Ruaje listën?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "A dëshironi ta ruani listën aktuale?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Nevojitet lidhje sesioni me PackageKit për menaxhimin e paketave gjuhësore " "tesseract të sistemit, por i njejti nuk u gjet. Ky shërbim zakonisht ofrohet " "nga një aplikacion për menaxhimin e programeve kompjuterike siç është Gnome " "Software. Ju lutemi instaloni softuer i cili siguron ndërfaqen e nevojshme " "PackageKit, përdorni program tjetër për menaxhimin e paketave softuerike për " "të menaxhuar paketat gjuhësore të tessarect, ose kaloni në përdorimin e " "tessdata rrugës së përdoruesit në dialogun e konfigurimit." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Duke marrë gjuhët në dispozicion" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Nuk arriti të marr listën e gjuhëve të disponueshme: % 1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Gabim gjatë parsimit: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Duke aplikuar ndryshimet..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Dështoi të krijojë direktorinë për skedarët tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Duke shkarkuar %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Skedarët e mëposhtëm nuk mund të shkarkohen ose hiqen:\n" "% 1\n" "\n" "Kontrolloni lidhjen dhe të drejtat mbi manipulimin e direktoriumit.\n" "\n" "Këshillë: Nëse nuk keni leje shkrimi në dosjet e sistemit, mund të kaloni në " "shtigjet e përdoruesve në dialogun e cilësimeve." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Po" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Po për të gjithë" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Jo" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Jo për të gjithë" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Mos e merr parasysh" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Mos e merr parasysh" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Tekst" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Rreth gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      Frontend grafik për tesseract-ocr

      Uebfaqja

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Kredite" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Liçensa" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Në modalitetin e serisë, secili burim i hyrjes përpunohet veçmas dhe dalja " "ruhet krah për krah në skedarin e hyrjes." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Enkodimi i sistemit" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Enkodimi i skedarit të tekstit:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "Aplikacioni ka rënë\n" "\n" "Ju kërkojmë falje për shqetësimin. Për të ndihmuar në përmirësimin e " "aplikacionit, ju lutemi merrni parasysh raportimin e problemit në manisandro@gmail.com. Ju lutemi provoni " "të përshkruani se çfarë po bënit përpara se të rrëzohej aplikacioni. " "Gjithashtu, përfshini informacionin më poshtë. Ju faleminderit." #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "Tesseract ka abortuar\n" "\n" "Tesseract (motori OCR) ka abortuar gjatë njohjes së tekstit. Kjo mund të " "ndodhë nëse të dhënat e përdorura të trajnuara janë të korruptuara ose " "jokompatibile me versionin e tesseract në përdorim, ose për shkak të një " "gabimi në tesseract.\n" "\n" "Stacktrace më poshtë mund të sigurojë informacione shtesë se ku ndodhi " "aksidenti.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Flatbed" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF Përpara" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF Prapa" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF Dupleks" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Zmadhoje" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Zvogëloje" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Madhësi normale" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Pershtatja më e mire" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rrotulloje majtas" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rrotulloje majtas" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rrotulloje djathtas" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rrotulloje djathtas" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Kontrollet e imazhit" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Detekto orarin në mënyrë automatike" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Ndrysho panelin dalës" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF eksport" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Backend:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Portret" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Peizazh" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Dështoi të shkruaj në skedar" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: ofron më shumë mundësi për kompresimin " "e imazheve, por nuk merret me skriptet komplekse.
      • QPrinter: " "mbështet vetëm kompresimin JPEG për ruajtjen e imazheve, por mbështet " "skriptet komplekse.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Ruaje si hOCR tekst" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Gjeni dhe zëvendësoni" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Shfaq parashikimin" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Skedarët e mëposhtëm të fjalorit u instaluan:\n" "% 1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Nuk ka skedarë të fundit" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Fshi skedarët" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Skedarët e mëposhtëm nuk mund të shkarkohen ose hiqen:\n" "% 1\n" "\n" "Kontrolloni lidhjen dhe të drejtat mbi manipulimin e direktoriumit.\n" "Këshillë: Nëse nuk keni leje shkrimi në dosjet e sistemit, mund të kaloni në " "shtigjet e përdoruesve në dialogun e cilësimeve." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Dalja" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Modaliteti OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Shto direktorium" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Ngjit" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Merrni pamjen e ekranit" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Largoje imazhin" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Fshije imazhin" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Pastro listën" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Largo ndarjet e rreshtit" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Ruaje dalejn" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Pastroje daljen" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Formati:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Një skedar i quajtur \"% 1\" ekziston tashmë. A jeni i sigurtë që doni ta " #~ "rishkruani atë?" #~ msgid "Overwrite File?" #~ msgstr "Rishkruani skedarin?" #~ msgid "Recent" #~ msgstr "Të fundit" #~ msgid "Failed to create output" #~ msgstr "Dështoi të krijojë dalje" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Dështoi të krijojë dalje. Gabimi kthyes ishte: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Aplikacioni ka " #~ "rënë

      Ju kërkojmë falje për shqetësimin. Për të ndihmuar në " #~ "përmirësimin e aplikacionit, ju lutemi merrni parasysh raportimin e " #~ "problemit në manisandro@gmail.com. Ju lutemi " #~ "provoni të përshkruani se çfarë po bënit përpara se të rrëzohej " #~ "aplikacioni. Gjithashtu, përfshini informacionin më poshtë. Ju " #~ "faleminderit.

      " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract ka " #~ "abortuar

      Tesseract (motori OCR) ka abortuar gjatë njohjes së " #~ "tekstit. Kjo mund të ndodhë nëse të dhënat e përdorura të trajnuara janë " #~ "të korruptuara ose jokompatibile me versionin e tesseract në përdorim, " #~ "ose për shkak të një gabimi në tesseract.

      Stacktrace më poshtë mund " #~ "të sigurojë informacione shtesë se ku ndodhi aksidenti.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Shembull: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Teksti i thjeshtë" #~ msgid "Multiple sources" #~ msgstr "Burime të shumta" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "-Faqja % 1: dështoi të jepte faqe" #~ msgid "The following errors occurred:%1" #~ msgstr "Ndodhën gabimet e mëposhtme:% 1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Skedarët e mëposhtëm do të fshihen:% 1" gImageReader-3.4.0/po/sr_CS.po000066400000000000000000001762461417507262200160470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-03-27 21:29+0000\n" "Last-Translator: Vlada Penić \n" "Language-Team: Serbian \n" "Language: sr_CS\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.6-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR program" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Ponovi prepoznavanje jezika" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Upravljaj jezicima" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "LiÄna podeÅ¡avanja" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Pomoć" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Info" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Odustani" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "U redu" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orijentacija rezultata:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horizontalno" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertikalno" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Zatraži instaliranje nedostajuÄih pravopisnih reÄnika" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Automatski traži nove verzije programa" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Predefinisane jeziÄke definicije:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Dodatne definicije jezika:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Orijentacija rezultata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/sr_Cyrl.po000066400000000000000000001762351417507262200164510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-04-03 08:34+0000\n" "Last-Translator: Darija Cholakova \n" "Language-Team: Serbian (cyrillic) \n" "Language: sr_Cyrl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.0-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR апликација" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Повторно препознавање на јазици" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Управување Ñо јазици" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ПодеÑувања" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Помош" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "За" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Излези" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "ОК" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Ориентација на излезниот панел:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Ориентација на излезниот панел:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/sr_Latn.po000066400000000000000000001756051417507262200164360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2019-09-07 18:24+0000\n" "Last-Translator: Mihajlo Djordjevic \n" "Language-Team: Serbian (latin) \n" "Language: sr_Latn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 3.9-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR aplikacija" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 msgid "Low confidence word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" gImageReader-3.4.0/po/sv.po000066400000000000000000002375741417507262200154700ustar00rootroot00000000000000# Swedish translations for gImageReader package # Swedish messages for gImageReader. # Copyright (C) 2010-2014 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # # 2014-12-02: Translation corrected :John Kehl # # # Sandro Mani , 2010-2011, 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" "Project-Id-Version: gImageReader-3.2.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2020-08-20 10:36+0000\n" "Last-Translator: Luna Jernberg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR-program" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Identifiera språk på nytt" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Hantera språk" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Inställningar" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Hjälp" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Om" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Avsluta" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Teckenvitlista/-svartlista" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Undanta dessa tecken från att tolkas (Svartlista):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Ange en sträng med tecken..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Tillåt endast följande ord att tolkas (Vitlista):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "OK" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Orientering för utdatapanel:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Horisontellt" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Vertikalt" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Föreslå installation av saknade rättstavningsordböcker" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Sök automatiskt efter nya programversioner" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Fördefinierade språkdefinitioner:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Övriga språkdefinitioner:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "Prefix för tesseract's språkdatafil" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Prefix" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 språkkod, följt av landskod" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO-kod" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Språkets namn" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Namn" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "Avbryt" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Teckensnitt för utdatapanel:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Standard" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Språkdataplatser:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Lagringsplats för språkdefinitioner:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Sökväg till rättstavningslexikon:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Systemövergripande sökväg" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Användarsökvägar" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Öppna automatiskt exporterade dokument med standardprogrammet" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Återskapa bakåtspårning" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to
      manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Programmet har kraschat\n" "\n" "Ber om ursäkt för problemet. För att bidra till att förbättra programmet, " "kan du överväga att rapportera frågan till manisandro@gmail.com. Försök att " "beskriva vad du gjorde innan programmet kraschade. Lägg dessutom till " "nedanstående information. Tack." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract har avbrutits\n" "\n" "Tesseract (OCR-motorn) har avbrutits under textidentifiering. Detta kan " "inträffa om aktuell trained-data är skadad eller inkompatibel med nuvarande " "version av Tesseract, eller om det är något fel på Tesseract.\n" "\n" "Stacktrace nedan kan ge ytterligare information om var kraschen inträffade.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Tillämpa" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Stäng" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "Välj mapp..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Format:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "Utdata:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "Utdataläge:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "Källfilnamn" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "Andra alternativ" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Visa/stäng utgångsfönstret" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Rotera aktuell text" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Rotera alla sidor" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Källor" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Lägg till bilder" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Infoga bilder" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Ta bort bild från lista" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Radera bild" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Töm lista" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Tumnaglar" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Filer" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Enhet:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Uppdatera" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Utdata:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Läge:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Färg" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Gråskala" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Upplösning:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Skanna" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Källa:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Skanner" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Ljusstyrka" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Kontrast" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Upplösning" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Invertera färger" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Zooma in" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Zooma ut" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normal storlek" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Bästa passning" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Rotera sida" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Välj rotationsläge" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Välj infogningsläge" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Välj sida" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Bildanpassning" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Oformaterad text" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Känn igen layout automatiskt" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Tolka allt" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Välj språk" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "Exportera" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Ett grafiskt gränssnitt för tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "Matcha skiftläge" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "Förbered för att skriva ut text:" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "Känn igen layout automatiskt" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Sidintervall" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Sidintervall:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Exempel: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Tolkningsområde:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Hela sidan" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Automatisk identifiering" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Förbered för att skriva ut text:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Källfilnamn" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Källsida" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Skyddad PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Aktuell Sida" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Flera sidor ..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Lägg till ord" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Ange ord:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "Rotera aktuell text" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Exportera till oformaterad text" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "Exportera till PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "Exportera till ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "Lägg till efter aktuell text" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Öppna hOCR-fil" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Spara utdata" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Exportera" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Rensa utdata" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Sök och ersätt" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Visa konfidensvärden" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Visa förhandsgranskning" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Nästa (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Föregående (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Expandera alla" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Komprimera alla" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Egenskaper" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Källa" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Lägg till efter aktuell text" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Infoga vid markören" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Ersätt aktuell text" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Behåll radbrytning om..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Föregås av sluttecken (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Föregången eller efterträdd av citattecken" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Andra alternativ" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Sammanfoga avstavade ord" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Ta bort blanksteg" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Bevara stycken" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Visuella hjälpmedel" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Rita blanksteg" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "Öppna hOCR-fil" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Ta bort radbrytningar i markerad text" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Ångra" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Upprepa" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Utdataläge:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF-export" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF med osynligt textöverdrag" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Kompression:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Kompressionskvalitet:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Gitteralgoritm:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Bildinställning:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Gör rad och ordavstånd enhetliga" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Åsidosätt teckensnitt:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Reservteckensnitt:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Åsidosätt teckenstorlek:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Teckenskalning:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Behåll tomrum större än:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "tecken" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Sanera bindestreck före radbrytningar" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Textinställning:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Pappersstorlek:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Bredd" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Höjd" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Behandla bildkällor som verklig DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Grundläggande" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF-version:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Lösenord:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Bekräfta lösenord:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Kryptering (valfritt):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Författare:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Titel:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Ämne:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Skapare:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Producent:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Nyckelord:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Mer information (valfritt):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Importera från aktuell källa" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Avancerat" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Sök" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Ersätt" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Ersätt allt" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Sök föregående" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Sök nästa" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Matcha skiftläge" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Ersättningar" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Ta bort" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Ordning:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Tolka text" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Tolka text till urklipp" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Spara som bild" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Öppna" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Spara" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Rensa" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Lägg till" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Ta bort" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata-hanterare" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Hantera installerade språk:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "skanna.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Bilder" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Välj filnamn för utdatafilen..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Det gick inte att starta skannerns serverdel." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Skanningen misslyckades" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Ingen skanner hittades." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Startar skanning..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Öppnar enhet..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Inställningsalternativ..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Hämtar parametrar..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Överför data..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Skanning avbröts..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Filnamnsprefix" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kod" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Ursprungligt namn" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Skript" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Kraschhanterare" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Ditt arbete har sparats under %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Inget osparat arbete." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Det gick inte att erhålla bakåtspårning. Är gdb installerad?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Kunde inte läsa in bild" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Filen kanske inte är en bild eller kan vara skadad:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Sida %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG-bilder" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Spara utvald bild" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "bildval.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Tolka allt" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Tolka markerat" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Utför layoutanalys" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Välj mapp..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Inga förslag" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Lägg till i ordlista" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ignorera ord" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Sida" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Textblock" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Stycke" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Textrad" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafisk" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Export misslyckades" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "OTD-export misslyckades: Kunde inte skriva utdatafil." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "Exporterar till ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Åtgärden avbröts" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Kunde inte tolka sidan %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "Exporterar till PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "PDF-export misslyckades: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF-biblioteket kunde inte läsa in teckensnittet \"%1\"." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Monokrom" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Tröskelvärde (närmaste färg)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Diffus" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (förlustfri)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grupp 4 (förlustfri)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (med förlust)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Samma som källan" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Anpassat" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "i" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Textexport misslyckades: Kunde inte skriva utdatafil." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Block" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Rad" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Felstavade ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Visa konfidensvärden" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Följande sidor kunde inte bearbetas:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Tolkningsfel" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Flera värden" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Sammanfoga" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Avdela från överordnad" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Växla" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Lägg till grafisk region" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Lägg till textblock" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Lägg till stycke" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Lägg till rad" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Lägg till ord" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML-filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Öppna hOCR-fil" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Följande filer kunde inte öppnas:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Filen verkar inte innehålla giltig hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Kan inte öppna filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Spara hOCR utdata..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Kunde inte spara utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Kontrollera att du har skrivbehörighet i den valda mappen." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Text Documents" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Spara ODT-utdata..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-filer" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Spara PDF utdata..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Ogiltig utdata" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Kan inte skriva över en fil som är en källbild i detta dokument." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Textfiler" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Spara textutdata..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Utdata har inte sparats" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Vill du spara utdata innan du fortsätter?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Ersätter..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Tillämpa ersättningar..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Tangentbordsgenvägar" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Tangentbordsgenvägar" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Aktuell tesseract-version" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Välj en bild för att börja..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Flera källor (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Klar" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Ny version" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 är tillgänglig" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Ladda ner" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Ändringslogg" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Avisera inte igen" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Visa inte igen" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Installera" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Rättstavningsordlista saknas" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Ordbok för %1 är inte installerad" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Installerar stavningsordlistan för \"%1\"" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Fel" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Kunde inte installera rättstavningsordbok: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Kunde inte skapa mapp för rättstavningsordböcker." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Kunde inte läsa %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "Laddar ner '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Följande ordböcker kunde inte laddas ner:\n" "%1\n" "\n" "Kontrollera anslutning och mappbehörigheter.\n" "Tips: Om du inte har skrivbehörighet i systemmappar kan du växla till " "Användarsökväg i inställningarna." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Rättstavningsordböcker installerade" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Följande ordböcker installerades:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Ingen rättstavningsordbok hittades för \"%1\"." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Sida: %1\n" #: ../gtk/src/OutputEditorText.cc:129 #, fuzzy msgid "Close document" msgstr "Dokumentera" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Klistrade in %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Utdata har inte sparats" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Vill du spara utdata innan du fortsätter?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Tar bort radbrytningar..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Kontrollera stavning" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Fil: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Sida: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Kunde inte tolka sidan %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Välj filer" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Spara utdata..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Dokumentera" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Inga tillgängliga språk finns" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Inga tesseract-språk är tillgängliga för användning. Tolkning kommer inte " "att fungera." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Flerspråkig" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Automatisk sidsegmentering" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Sidsegmentering med orientering och skriptidentifiering" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Antas vara en kolumn med text" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Antas vara ett block med vertikalt ordnad text" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Antas vara ett enhetligt block med text" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Antas vara en rad med text" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Antas vara endast ett ord" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Antas vara endast ett ord i cirkel" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Gles text utan särskild ordning" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Gles text med orientering och skriptidentifiering" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Sidsegmeteringsläge" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Teckenvitlista/-svartlista..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Hantera språk..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Aktuell markering" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Tolkningsfel inträffade" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Tesseract kunde inte startas" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Tolkar sida %1 (%2 av %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 #, fuzzy msgid "- Page %1: failed to render page" msgstr "" "\n" "- Sidan %1: Kunde inte rendera sidan" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Tolkar..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 #, fuzzy msgid "- %1:%2: failed to render page" msgstr "" "\n" "- Sidan %1: Kunde inte rendera sidan" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "Kunde inte skapa utdata" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Följande fel har inträffat:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Skanning avbröts" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Ingen skanner specificerad" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Kan inte ansluta till skanner" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Kan inte starta skanningen" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Fel vid kommunikation med skannern" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Kunde inte inte spara bilden" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Åtgärden avbröts." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Enheten är upptagen." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Omslag är öppna." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Dokumentmataren har fastnat." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Dokumentmataren har slut på dokument." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Åtkomst till skanner nekades." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Ange lösenord för filen \"%1\":" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF med text" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Dessa PDF-filer innehåller redan text:\n" "%1" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Bilder och PDF-filer" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Urklippsfel" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Kunde inte läsa urklipp." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Klistrade in %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Skärmklippsfel" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Kunde inte ta skärmdump." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Skärmklipp %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Bilden sparas..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Kan inte skriva filen" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Det gick inte att skriva till %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Ta bort fil?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Ta bort följande filer?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "Spara utdata" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Fil saknas" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Följande fil har tagits bort eller flyttats:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Söker efter" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Ersätt med" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Ersättningslista" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Öppna ersättningslista" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Fel vid läsning av fil" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Kan inte läsa '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Fel vid läsning av fil" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Vissa poster i ersättningslistan kunde inte läsas." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Spara ersättningslistan" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Fel när filen sparades" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Kan inte skriva till \"%1\"." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Vill du spara listan?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Vill du spara den aktuella listan?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "En sessionsanslutning till PackageKits serverdel, krävs för att hantera " "systemövergripande tesseract språkpaket, men kunde inte hittas. Den här " "tjänsten tillhandahålls vanligtvis av ett program hanteringsprogram som " "Gnome Software. Installera programvara som tillhandahåller det nödvändiga " "PackageKit-gränssnittet, använd andra pakethanteringsprogram för att hantera " "tesseract språkpaket direkt, eller växla till att använda användarens " "tessdata-sökväg i konfigurationsdialogen." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Hämtar tillgängliga språk" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Det gick inte att hämta listan över tillgängliga språk: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Tolkningsfel: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Tillämpar ändringar..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Det gick inte att skapa katalog för tessdatafiler." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "Laddar ner %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Följande filer kunde inte hämtas eller tas bort:\n" "%1\n" "\n" "Kontrollera anslutningen och mappbehörigheterna.\n" "\n" "Tips: Om du inte har skrivbehörighet i systemmappar kan du växla till " "Användarsökväg i inställningarna." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Ja" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Ja till alla" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Nej" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Nej till alla" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Förkasta" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Förkasta" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Text" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Om gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      Ett grafiskt gränssnitt för tesseract-" "ocr

      Webbplats

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Erkännanden" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Licens" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Systemkodning" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Kodning av textfil:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Programmet har " "kraschat

      Ber om ursäkt för besväret. För att bidra till att " "förbättra programmet, kan du överväga att rapportera frågan till manisandro@gmail.com. Försök att beskriva " "vad du gjorde innan programmet kraschade. Lägg också till nedanstående " "information. Tack.

      " #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "Tesseract har avbrutits\n" "\n" "Tesseract (OCR-motorn) har avbrutits under textidentifiering. Detta kan " "inträffa om aktuell trained-data är skadad eller inkompatibel med nuvarande " "version av Tesseract, eller om det är något fel på Tesseract.\n" "\n" "Stacktrace nedan kan ge ytterligare information om var kraschen inträffade.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Flatbädd" #: ../qt/data/MainWindow.ui.h:19 #, fuzzy msgid "ADF Front" msgstr "ADF Front" #: ../qt/data/MainWindow.ui.h:20 #, fuzzy msgid "ADF Back" msgstr "ADF Back" #: ../qt/data/MainWindow.ui.h:21 #, fuzzy msgid "ADF Duplex" msgstr "ADF Duplex" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Zooma In" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Zooma ut" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normal storlek" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Bästa passning" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Rotera vänster" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Rotera vänster" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Rotera höger" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Rotera höger" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Bildanpassning" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Känn igen layout automatiskt" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Visa/stäng utgångsfönstret" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF-export" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Serverdel:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Stående" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Liggande" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Kunde inte skriva till filen" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Spara som hOCR-text" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Sök och ersätt" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Visa förhandsgranskning" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Följande ordboksfiler installerades:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "Källfilnamn" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Ta bort filer" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Följande filer kunde inte hämtas eller tas bort:\n" "%1\n" "\n" "Kontrollera anslutning och mappbehörigheter.\n" "\n" "Tips: Om du inte har skrivbehörighet i systemmappar kan du växla till " "Användarsökväg i inställningarna." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Utdata" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR-läge:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Lägg till mapp" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Klistra in" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ta ett skärmklipp" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Ta bort bild" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Radera bild" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Töm Lista" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Ta bort radbrytningar" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Spara utdata" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Rensa utdata" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "Format:" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "En fil med namnet \"%1\" finns redan. Vill du verkligen skriva över den?" #~ msgid "Overwrite File?" #~ msgstr "Vill du skriva över filen?" #, fuzzy #~ msgid "New document %1" #~ msgstr "Dokumentera" #~ msgid "Recent" #~ msgstr "Nyligen öppnad" #~ msgid "Failed to create output" #~ msgstr "Kunde inte skapa utdata" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Kunde inte skapa utdata. Felmeddelandet var: %1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      Applikationen har " #~ "kraschat

      Ber om ursäkt för olägenheten. För att bidra till " #~ "att förbättra programmet, kan du överväga att rapportera felet till manisandro@gmail.com.Försök att " #~ "beskriva vad du gjorde innan programmet kraschade. Inkludera dessutom " #~ "informationen nedan. Tack.

      " #, fuzzy #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Tesseract har " #~ "avbrutits

      Tesseract (OCR-motorn) har avbrutits under " #~ "textidentifiering. Detta kan inträffa om aktuell trained-data är skadad " #~ "eller inkompatibel med nuvarande version av Tesseract, eller om det är " #~ "något fel på Tesseract.

      Bakåtspårningen nedan kan ge ytterligare " #~ "information om var kraschen inträffade.

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "Exempel: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "Oformaterad text" #~ msgid "Multiple sources" #~ msgstr "Flera källor" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Sidan %1: Kunde inte rendera sidan" #~ msgid "The following errors occurred:%1" #~ msgstr "Följande fel har inträffat:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Följande filer kommer att tas bort:%1" #~ msgid "Failed to open file" #~ msgstr "Kunde inte att öppna filen" #~ msgid "The file could not be opened: %1." #~ msgstr "Filen kunde inte öppnas: %1." #~ msgid "Invalid hOCR file" #~ msgstr "Ogiltig hOCR-fil" #~ msgid "The application has crashed" #~ msgstr "Applikationen har kraschat" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract kraschade med följande meddelande:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Detta händer typiskt för en av följande orsaker:\n" #~ "- Föråldrade traineddata-filer används.\n" #~ "- Stöd för språkdatafiler saknas.\n" #~ "- Korrupta språkdatafiler.\n" #~ "\n" #~ "Se till att dina språkdatafiler är giltiga och förenliga med tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Kunde inte läsa %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Dokument-teckensnitt:" #~ msgid "Scale:" #~ msgstr "Skala" #~ msgid "Errors occurred" #~ msgstr "Fel har inträffat" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Följande sidor kunde inte återges:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "ersättnings_lista.txt" #~ msgid "Detect script and orientation" #~ msgstr "Identifiera skript och orientering" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "PackageKit krävs för att hantera Tesseract språkpaket, men det kunde inte " #~ "hittas. Använd system-paketets programvara för att hantera Tesseract's " #~ "språkpaket." gImageReader-3.4.0/po/tr.po000066400000000000000000002476251417507262200154630ustar00rootroot00000000000000# Sandro Mani , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-18 02:54+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.11-dev\n" "X-POOTLE-MTIME: 1441292742.000000\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "Optik karakter tanıma (OCR) uygulaması" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Dilleri Yeniden Algıla" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Dilleri Yönet" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "Tercihler" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Yardım" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Hakkında" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Çık" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Karakter beyaz/kara listesi" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Bu karakterlerin tanınmasını engelle (kara liste):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Bir karakter dizisi girin..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Yalnızca aşağıdaki karakterlerin tanınmasına izin ver (beyaz liste):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Tamam" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "Çıktı bölmesi yönelimi:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Yatay" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Dikey" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Eksik imla denetimi sözlüklerini yüklemek için sorgu" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Yeni program sürümlerini paketlerini otomatik olarak denetle" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Öntanımlı dil tanımlamaları:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Ek dil tanımlamaları:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "tesseract dil veri dosyasının ön eki" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "Ön ek" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 dil kodu ve ardından ülke kodu" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO Kodu" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Dilin adı" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Ad" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "İptal" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Çıktı bölmesi yazı tipi:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Varsayılan" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Dil veri konumları:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Dil tanımlama yolu:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Yazım denetimi sözlüğü yolu:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "Sistem geneli yolları" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "Kullanıcı yolları" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Dışa aktarılan belgeleri öntanımlı uygulamayla otomatik olarak aç" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Geri dönük izlemeyi yeniden oluştur" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Uygulama çöktü\n" "\n" "Rahatsızlık için özür dilerim. Uygulamayı iyileştirmeye yardımcı olmak için " "lütfen sorunu manisandro@gmail.com adresine bildirmeyi " "düşünün. Lütfen uygulama çökmeden önce ne yaptığınızı açıklamaya çalışın. " "Ayrıca aşağıdaki bilgileri de ekleyin. Teşekkürler." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract iptal edildi\n" "\n" "Tesseract (OCR motoru), metni tanıma sırasında durduruldu. Bu, kullanılan " "öğrenme verileri bozuksa, kullanımdaki tesseract sürümüyle uyumsuzsa veya " "tesseract'taki bir hata nedeniyle meydana gelebilir.\n" "\n" "Aşağıdaki yığın izleme, çökmenin nerede meydana geldiği hakkında ek bilgi " "sağlayabilir.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "HOCR Toplu Dışa Aktar" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "Uygula" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Kapat" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Kaynak klasörü seç:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Biçim:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "N en düşük seviyenin çıktılarını gruplandır:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Girdi:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "Çıktı ön izleme:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Girdi dosyaları" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Dışa aktarma seçenekleri" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Çıktı bölmesini değiştir" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Mevcut sayfayı döndür" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Tüm sayfaları döndür" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Kaynaklar" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Resim ekle" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Resim Ekle" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Resmi listeden çıkar" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Resmi sil" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "Listeyi temizle" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Küçük resimler" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Dosyalar" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "Aygıt:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Tazele" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Çıktı:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Kip:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Renk" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Gri tonlama" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Çözünürlük:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Tara" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Kaynak:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "Edin" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "Parlaklık" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "Karşıtlık" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Çözünürlük" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "Renkleri tersine çevir" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Yakınlaştır" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Uzaklaştır" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Normal boyut" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "En uygun" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Sayfayı döndür" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Döndürme kipini seç" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Ekleme kipini seç" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Sayfayı seç" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "Resim denetimleri" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Düz metin" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "Yerleşimi otomatik algıla" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Tümünü tanı" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Dili seç" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Toplu Dışa Aktar" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocr komutu için bir grafiksel arayüz" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Toplu İşlem Modu" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Toplu işlem modunda, her girdi kaynağı ayrı olarak işlenir ve çıktı, " "girdi dosyasına yan yana kaydedilir." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "Var olan çıktı:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Sayfa numaralarını çıktı metninin başına ekle" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "Sayfa yerleşimini otomatik algıla" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Sayfa Aralığı" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Sayfa aralığı:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Örnek: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "Tanıma alanı:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Tüm sayfa" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "Otomatik Algıla" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Çıktı metninin başına ekle:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Kaynak dosya adı" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Kaynak sayfa" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Korumalı PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Geçerli Sayfa" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Çoklu Sayfalar..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Toplu işlem modu..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Sözcük Ekle" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Sözcük girin:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Yeni çıktıyı son sayfadan sonra ekle" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Yeni çıktıyı geçerli sayfadan önce ekle" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "Düz metin olarak dışa aktar" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "PDF olarak dışa aktar" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ODT olarak dışa aktar" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Belgeyi son sayfadan sonra ekle" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Belgeyi geçerli sayfadan önce ekle" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "hOCR dosyasını aç" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Çıktıyı kaydet" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "Dışa aktar" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "Çıktıyı temizle" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Bul ve değiştir" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Güven değerlerini göster" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Ön izlemeyi göster" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "Sonraki (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Önceki (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Genişlet" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Daralt" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "Özellikler" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Kaynak" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Mevcut metne ekle" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "İmleç konumuna ekle" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Mevcut metni değiştir" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Satır sonlarını koru..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Nokta öncesinde gelen (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Tırnak işareti öncesi veya sonrasında ise" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Diğer seçenekler" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Tire ile ayrılmış sözcükleri birleştir" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "Boşlukları daralt" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Paragrafları koru" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Görsel yardım" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Boşluk çiz" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Dosya aç" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Seçili metinden satır sonlarını çıkart" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "Geri al" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Yeniden yap" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Yeni sekme" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Çıktı kipi:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "Görünmeyen metinlerle birlikte PDF" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "Sıkıştırma:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "Sıkıştırma kalitesi:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Dithering algoritması:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "Resim ayarları:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "Satır ve sözcük aralıklarını tek tip yap" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "Yazı tipi ailesini geçersiz kıl:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "Yedek yazı tipi ailesi:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "Yazı tipi boyutunu geçersiz kıl:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "Yazı tipi ölçekleme:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "puan" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Bundan geniş aralıkları koru:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "Karakterler" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Satır sonlarından önce kısa çizgileri temizle" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "Metin ayarları:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Kağıt boyutu:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Genişlik" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "Yükseklik" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Resim kaynaklarını gerçek DPI değerine sahipmiş gibi ele al:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Temel" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF sürümü:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Parola:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Parolayı onayla:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Şifreleme (isteğe bağlı):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Yazar:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Başlık:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Konu:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Oluşturan:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Üreten:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Anahtar sözcükler:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Ek bilgiler (isteğe bağlı):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Geçerli kaynaktan içe aktar" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Gelişmiş" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Bul" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Değiştir" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Tümünü değiştir" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Öncekini bul" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Sonrakini bul" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Büyük Küçük Harf eşleştir" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Yerine Koyma" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Sil" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "Sıralama:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Tanı" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Taşıma panosuna tanıt" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Resim olarak kaydet" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Aç" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Kaydet" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "Temizle" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Ekle" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Çıkar" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata Yöneticisi" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "Kurulu dilleri yönet:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "tarama.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "Resimler" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Çıktı Dosya Adını Seçin..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Tarama uygulaması başlatılamadı." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Tarama başarısız oldu" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Hiç tarayıcı bulunamadı." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "Tarama başlatılıyor..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Aygıt açılıyor..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Seçenekler ayarlanıyor..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "Parametreler alınıyor..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Veri aktarılıyor..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "Tarama iptal ediliyor..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "Dosya adı ön eki" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Kod" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Doğal isim" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Betiği" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Çökme İşleyici" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Çalışmanız %1 altına kaydedildi." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Kaydedilmemiş çalışma yok." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Geri izleme alınamadı. GDB kurulu mu?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Resim yüklenemedi" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Bu bir resim dosyası değil veya bozulmuş:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Sayfa %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG Resimleri" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Seçim Resmini Kaydet" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "secim.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Tümünü tanı" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Seçimi tanı" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "Yerleşim çözümlemesi yapılıyor" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "Geçici dosyalar" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Klasör seç..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Öneri yok" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Sözlük ekle" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Sözcüğü yok say" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Sayfa" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Metin bloğu" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Paragraf" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "Metin" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Grafik" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Dışa aktarma başarısız oldu" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ODT olarak dışa aktarma başarısız oldu: çıktı dosyası yazılamıyor." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ODT olarak dışa aktarılıyor..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "İşlem iptal edildi" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "%1 sayfası oluşturulamadı" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "PDF olarak dışa aktarılıyor..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "PDF olarak dışa aktarma başarısız oldu: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF kütüphanesi '%1' yazı tipini yükleyemedi." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Siyah beyaz" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Eşik (en yakın renk)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "Yayılmış" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (kayıpsız)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Grup 4 (kayıpsız)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (kayıplı)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Kaynakla aynı" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "Özel" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "cm" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "inç" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Metin olarak dışa aktarma başarısız oldu: çıktı dosyası yazılamıyor." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Blok" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "Satır" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Sözcük" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Yanlış yazılmış sözcük" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Güven değerlerini göster" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Aşağıdaki sayfalar işlenemedi:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Tanıma hataları" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Çoklu değer" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Birleştir" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Ana ögeden ayır" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "Takas et" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Grafik alanı ekle" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Metin bloğu ekle" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Paragraf ekle" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Satır ekle" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Sözcük ekle" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML Dosyaları" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "hOCR Dosyasını Aç" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Aşağıdaki dosyalar açılamadı:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Aşağıdaki dosyalar geçerli hOCR HTML değil:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Dosyalar açılamadı" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "çıktı" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "oOCR Çıktısını Kaydet..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Çıktının kaydedilmesi başarısız oldu" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "Seçilen klasöre yazma hakkınız olduğundan emin olun." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument Metin Belgeleri" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "ODT Çıktısını Kaydet..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF Dosyaları" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "PDF Çıktısını Kaydet..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "Geçersiz Çıktı" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Bu belgenin kaynak resmi olan bir dosyanın üzerine yazılamaz." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "Metin Dosyaları" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Metin Çıktısını Kaydet..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Çıktı kaydedilmedi" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Devam etmeden çıktı kaydedilsin mi?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Değiştiriliyor..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "Değişiklikler uygulanıyor..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Klavye kısayolları" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "Önceki satırlar:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "Sonraki satırlar:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabSonraki alan
      Shift+TabÖnceki alan
      Aşağı Ok TuşuSonraki satır
      Yukarı Ok TuşuÖnceki satır
      Ctrl+Boşluk TuşuYazım önerileri
      Ctrl+EnterSözlüğe sözcük ekle
      Ctrl+BKalın yazma geçişi
      Ctrl+IEğik yazma geçişi
      Ctrl+DSözcüğü imleç konumunda böl
      Ctrl+MÖnceki sözcükle birleştir
      Ctrl+Shift+MSonraki sözcükle birleştir
      Ctrl+DeleteSözcüğü sil
      Ctrl+{Sol,Sağ} " "Ok TuşuSol sınırlayıcı kutu kenarını ayarla
      Ctrl+Shift+{Sol,Sağ} Ok TuşuSağ sınırlayıcı kutu " "kenarını ayarla
      Ctrl+{Yukarı,Aşağı} Ok TuşuYukarı " "sınırlayıcı kutu kenarını ayarla
      Ctrl+Shift+{Yukarı,Aşağı} " "Ok TuşuAşağı sınırlayıcı kutu kenarını ayarla
      Ctrl+" "+Yazı boyutunu arttır
      Ctrl+-Yazı boyutunu " "azalt
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Güven: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "Kullanılan Tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Başlamak için bir resim seçin..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Çoklu kaynak (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Hazır" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Yeni sürüm" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 kullanılabilir durumda" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "İndir" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "Değişim günlüğü" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Tekrar uyarma" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Tekrar gösterme" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Kur" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Yazım denetimi sözlüğü eksik" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "%1 için yazım denetimi sözlüğü kurulmadı" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "'%1' için yazım denetimi sözlüğü kuruluyor" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Hata" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Yazım denetimi sözlüğü kurulamadı: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Yazım denetimi sözlüğü kurulamadı." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "%1 okunamadı: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "'%1' indiriliyor..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Aşağıdaki sözlükler indirilemedi veya kaldırılamadı:\n" "%1\n" "\n" "Bağlantı ve dizin izinlerini gözden geçirin.\n" "İpucu: Sistem klasörlerine yazma izniniz yoksa, ayarlar iletişim kutusundan " "kullanıcı yollarına geçebilirsiniz." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Sözlükler kuruldu" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Aşağıdaki sözlükler kuruldu:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "'%1' için yazım denetimi sözlüğü bulunamadı." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Sayfa: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Belgeyi kapat" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "Başlıksız %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "Belge kaydedilmedi" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "Devam etmeden önce belge kaydedilsin mi?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Satır sonları çıkartılıyor..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "Vurgulama yok" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "Vurgulama modu" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Yazım denetimi yap" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "%1 örnek değiştirildi" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Dosya: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Sayfa: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Sayfanın tanınması başarısız oldu %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Dosyaları Seçin" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Çıktıyı Kaydet..." #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "Kaydedilmeyen belgeler" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" "Aşağıdaki belgelerde kaydedilmeyen değişiklikler var. Devam etmeden önce " "hangi belgeleri kaydetmek istiyorsunuz?" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Kullanılabilir dil yok" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "Kullanılacak hiç tesseract dili yok. Tanıma çalışmayacak." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Çokdilli" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Otomatik sayfa bölümlendirme" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Yönlendirme ve komut dosyası algılama ile sayfa bölümleme" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Tek sütünlu metin olarak kabul et" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Dikey olarak hizalanan metnin tek blok olduğunu varsay" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Tek bir metin bloğu varsay" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Bir satırlık metin varsay" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Tek bir sözcük varsay" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Çember içinde tek bir sözcük varsay" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Düzenli bir sırası olmayan aralıklı metin" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Yönlendirme ve komut dosyası algılama özellikli metin" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Sayfa parçalama kipi" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Karakter beyaz/kara listesi..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Dilleri yönet..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "Var olan çıktının üzerine yaz" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "Kaynağı işlemeyi atla" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Mevcut seçim" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "Tanıma hataları oluştu" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "tesseract başlatılamadı" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Kaynak zaten tanındı" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Seçilen bir veya daha fazla kaynak zaten tanındı. Yine de devam edilsin mi?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Tanınan sayfa %1 (%2 of %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Sayfa %1: sayfa oluşturma başarısız oldu" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Tanınıyor..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: sayfa oluşturma başarısız oldu" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: çıktı zaten var, atlanıyor" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: çıktı dosyası oluşturma başarısız oldu" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "Aşağıdaki hatalar oluştu:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Tarama iptal edildi" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Trayıcı belirtilmedi" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Tarayıcıya bağlanılamadı" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Tarama başlatılamadı" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Tarayıcı ile iletişim kurma hatası" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Resim kaydedilemedi" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "İşlem iptal edildi." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "Aygıt meşgul." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Kapak açıldı." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Belge besleyici sıkıştı." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Belge besleyicide belge yok." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "Tarayıcıya erişim reddedildi." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "'%1' dosyası için parolayı girin:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "Metin içeren PDF" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "PDF dosyası zaten metin içeriyor:\n" "%1\n" "Ne olursa olsun açılsın mı?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Resimler ve PDF dosyaları" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Geçici Taşıma Panosu Hatası" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Taşıma panosu okunamadı." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "%1 Yapıştırıldı" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Ekran Görüntüsü Hatası" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Ekran görüntüsü alınamadı." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Ekran Görüntüsü %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Resim kaydediliyor..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Dosya Yazılamıyor" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "%1 dosyasına yazılamadı." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Dosya Silinsin mi?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Aşağıdaki dosyalar silinsin mi?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Çıktıyı aç" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Hem bir metin hem de bir hOCR çıktısı bulundu. Hangisini açmak istiyorsunuz?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Eksik Dosya" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "Aşağıdaki dosya silinmiş veya taşınmış:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Ara" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Bununla değiştir" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "Değiştirme Listesi" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Değiştirme Listesini Aç" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Dosya Okunurken Hata" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "'%1' okunamadı." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "Dosya Okunurken Hatalar Oluştu" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Değiştirme listesindeki bazı girdiler okunamadı." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Değiştirme Listesini Kaydet" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Dosya Kaydetmede Hata" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "'%1' dosyasına yazılamadı." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Liste Kaydedilsin mi?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Mevcut listeyi kaydetmek istiyor musunuz?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Sistem genelinde tesseract dil paketlerini yönetmek için PackageKit arka " "ucuna bir oturum bağlantısı gerekir, ancak bulunamadı. Bu hizmet genellikle " "Gnome Software gibi bir yazılım yönetimi uygulaması tarafından sağlanır. " "Lütfen gerekli PackageKit arayüzünü sağlayan yazılımı kurun, tesseract dil " "paketlerini doğrudan yönetmek için diğer sistem paket yönetimi yazılımlarını " "kullanın veya yapılandırma iletişim kutusunda kullanıcı tessdata yolunu " "kullanmaya geçiş yapın." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Kullanılabilir diller getiriliyor" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Kullanılabilir dillerin listesi getirilemedi: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "İşleme hatası: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "Değişiklikler uygulanıyor..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Tessdata dosyaları için dizin oluşturulamadı." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "%1 indiriliyor..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Aşağıdaki dosyalar indirilemedi veya kaldırılamadı:\n" "%1\n" "\n" "Bağlantı ve dizin izinlerini gözden geçirin.\n" "\n" "İpucu: Sistem klasörlerine yazma izniniz yoksa, ayarlar iletişim kutusundan " "kullanıcı yollarına geçebilirsiniz." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Evet" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Tümüne evet" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "Hayır" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "Tümüne hayır" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Vazgeç" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "Hepsini at" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "Metin" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "gImageReader Hakkında" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      tesseract-ocr için grafiksel bir arayüz

      Web sitesi

       

      " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "Geliştirenler" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "Lisans" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "Toplu işlem modunda, her girdi kaynağı ayrı olarak işlenir ve çıktı, girdi " "dosyasına yan yana kaydedilir." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "Sistem kodlaması" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "Metin dosyası kodlaması:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Uygulama çöktü

      Anlayışınız için teşekkür ederiz. Uygulamanın gelişimine katkıda " "bulunmak için lütfen bu hatayımanisandro@gmail.com adresine bildirin. " "Lütfen çökme olmadan ne yaptığınızı ayrıntılı olarak tanımlayın. Aşağıdaki " "bilgiyi de ekleyin. Teşekkür ederiz.

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      Tesseract iptal " "edildi

      Tesseract (OCR motoru), metni tanıma sırasında " "durduruldu. Bu, kullanılan öğrenme verileri bozuksa, kullanımdaki tesseract " "sürümüyle uyumsuzsa veya tesseract'taki bir hata nedeniyle meydana gelebilir." "

      Aşağıdaki yığın izleme, çökmenin nerede meydana geldiği hakkında ek " "bilgi sağlayabilir.

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Düz Yatak" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF Ön" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF Arka" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF İki Taraflı" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Yaklaştır" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Uzaklaştır" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Normal Boyut" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "En Uygun" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Sola Döndür" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Sola döndür" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Sağa Döndür" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Sağa döndür" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Resim Denetimleri" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "Yerleşimi Otomatik Algıla" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Çıktı Bölmesini Değiştir" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "PDF Olarak Dışa Aktar" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Arka uç:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Dikey" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Yatay" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Dosyaya yazma başarısız oldu" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: daha fazla resim sıkıştırma seçeneÄŸi " "sunar, ancak karmaşık betikleri iÅŸlemez.
      • QPrinter: resimleri " "kaydetmek için yalnızca JPEG sıkıştırmayı destekler, ancak karmaşık " "betikleri destekler.
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "oOCR metni olarak kaydet" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Bul ve DeÄŸiÅŸtir" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "Düzeltme widget'ını göster" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "AÅŸağıdaki sözlük dosyaları kuruldu:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Son dosya yok" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Dosyaları Sil" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "AÅŸağıdaki dosyalar indirilemedi veya kaldırılamadı:\n" "%1\n" "\n" "BaÄŸlantı ve dizin izinlerini gözden geçirin.\n" "İpucu: Sistem klasörlerine yazma izniniz yoksa, ayarlar iletiÅŸim kutusundan " "kullanıcı yollarına geçebilirsiniz." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Çıktı" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR kipi:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Klasör ekle" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Yapıştır" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Ekran Görüntüsü Al" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Resmi Kaldır" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Resmi Sil" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "Listeyi Temizle" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Satır Sonlarını Çıkart" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Çıktıyı Kaydet" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "Çıktıyı Temizle" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "Sekme ekle" #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #~ msgid "Form" #~ msgstr "Biçim" #~ msgid "One or more selected sources were aready recognized. Proceed anyway?" #~ msgstr "" #~ "Seçilen bir veya daha fazla kaynak zaten tanındı. Yine de devam edilsin " #~ "mi?" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "DeÄŸiÅŸtirilenlerin sayısı: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "\"%1\" isimli bir dosya zaten var. Üzerine yazmak istediÄŸinizden emin " #~ "misiniz?" #~ msgid "Overwrite File?" #~ msgstr "Dosyanın Üstüne Yazılsın mı?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "KaydedilmemiÅŸ deÄŸiÅŸikliklere sahip %1 belge var" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Kapatmadan önce deÄŸiÅŸiklikler kaydedilsin mi? Kaydetmezseniz, tüm " #~ "deÄŸiÅŸiklikleriniz kalıcı olarak kaybolacak.\n" #~ "Kaydetmek istediÄŸiniz belgeleri seçin:" #~ msgid "New document %1" #~ msgstr "Yeni belge %1" #~ msgid "Recent" #~ msgstr "Son kullanılan" #~ msgid "Failed to create output" #~ msgstr "Çıktının oluÅŸturulması baÅŸarısız oldu" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Çıktı oluÅŸturma baÅŸarısız oldu. Alınan hata: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Uygulama çöktü</span></p><p>" #~ "Anlayışınız için teÅŸekkür ederiz. Uygulamanın geliÅŸimine katkıda bulunmak " #~ "için lütfen bu hatayı <a href="mailto:manisandro@gmail.com?" #~ "subject=gImageReader%20Crash">manisandro@gmail.com</a> " #~ "adresine bildirin. Lütfen uygulama çökmeden önce ne yaptığınızı " #~ "açıklamaya çalışın. AÅŸağıdaki bilgileri de ekleyin. TeÅŸekkür ederiz.</" #~ "p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract iptal edildi</span></p><" #~ "p>Tesseract (OCR motoru), metni tanıma sırasında durduruldu. Bu, " #~ "kullanılan traineddata'lar bozuksa, kullanımdaki tesseract sürümüyle " #~ "uyumsuzsa veya tesseract'taki bir hata nedeniyle meydana gelebilir.</" #~ "p><p>AÅŸağıdaki yığın izleme, çökmenin nerede meydana geldiÄŸi " #~ "hakkında ek bilgi saÄŸlayabilir.</p></body></html>" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Örnek:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Düz metin" #~ msgid "Multiple sources" #~ msgstr "Çoklu kaynak" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Sayfa %1: sayfa oluÅŸturma baÅŸarısız oldu" #~ msgid "The following errors occurred:%1" #~ msgstr "AÅŸağıdaki hatalar oluÅŸtu: %1" #~ msgid "The following files will be deleted:%1" #~ msgstr "AÅŸağıdaki dosyalar silinecek:%1" #~ msgid "Failed to open file" #~ msgstr "Dosya açılamadı" #~ msgid "The file could not be opened: %1." #~ msgstr "Bu dosya açılamadı:%1" #~ msgid "Invalid hOCR file" #~ msgstr "Geçersiz hOCR dosyası" #~ msgid "The application has crashed" #~ msgstr "Uygulama çöktü" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract, aÅŸağıdaki ileti ile çöktü:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Bu genellikle aÅŸağıdaki nedenlerden biriyle olur:\n" #~ "- Eski eÄŸitimli veri dosyaları kullanılır.\n" #~ "- Yardımcı dil veri dosyaları eksik.\n" #~ "- Bozuk dil verileri dosyaları.\n" #~ "\n" #~ "Dil verilerinizin geçerli olduÄŸundan ve %2 tesseract ile uyumlu " #~ "olduÄŸundan emin olun." #~ msgid "Could not read %1: %2" #~ msgstr "%1 okunamadı: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Belge yazı tipi:" #~ msgid "Scale:" #~ msgstr "Ölçek:" #~ msgid "Errors occurred" #~ msgstr "Hatalar oluÅŸtu" #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "AÅŸağıdaki dosyalar iÅŸlenemedi:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "degistirme_listesi.txt" #~ msgid "Detect script and orientation" #~ msgstr "Betik ve yönelimi algıla" #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\ttesseract baÅŸlatılamadı" #, fuzzy #~ msgid "So&urces" #~ msgstr "Kaynaklar" #, fuzzy #~ msgid "&Output" #~ msgstr "Çıktı" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Belirli alanları tanımak için dikdörtgenleri üzerlerine sürükleyin." #~ msgid "Rendering image..." #~ msgstr "Resim gerçekleniyor..." #~ msgid "en_US" #~ msgstr "tr_TR" gImageReader-3.4.0/po/uk.po000066400000000000000000003001131417507262200154330ustar00rootroot00000000000000# Ukrainian translations for gImageReader package # УкраїнÑький переклад Ð´Ð»Ñ gImageReader. # Copyright (C) 2010-2015 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # # Translator Yuriy Bahriy , 2015-11-02. # Sandro Mani , 2010-2011, 2013, 2014, 2015, 2016. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2021-11-28 09:14+0000\n" "Last-Translator: Tymofii Lytvynenko \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.10-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR-додаток" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "Повторно виÑвити мови" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "Керувати мовами" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "ÐалаштуваннÑ" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "Допомога" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "Про програму" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "Вихід" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "Білий / чорний ÑпиÑок Ñимволів" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "Виключити ці Ñимволи з Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ (чорний ÑпиÑок):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "Введіть Ñ€Ñдок Ñимволів..." #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "Дозволити Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ наÑтупних Ñимволів (білий ÑпиÑок):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "Гаразд" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "ÐžÑ€Ñ–Ñ”Ð½Ñ‚Ð°Ñ†Ñ–Ñ Ð¿Ð°Ð½ÐµÐ»Ñ– результатів:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "Горизонтально" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "Вертикально" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "Запит на вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñутніх орфографічних Ñловників" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "Ðвтоматично перевірÑти наÑвніÑть нових верÑій програми" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "Задані Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð²:" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "Додаткові Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð²:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "ÐŸÑ€ÐµÑ„Ñ–ÐºÑ Ð¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ файлу даних tesseract" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "ПрефікÑ" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "Код мови за ISO 639-1 з кодом країни" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "Код ISO" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "Ðазва мови" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "Ðазва" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "СкаÑувати" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "Шрифт панелі результатів:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "Типово" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð²Ð½Ð¸Ñ… даних:" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ мови:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð¸Ñ… Ñловників:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "ЗагальноÑиÑтемні шлÑхи" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "КориÑтувацькі шлÑхи" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "Ðвтоматично відкривати екÑпортовані документи у типовому додатку" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "Відновити зворотнє траÑуваннÑ" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "Додаток аварійно завершивÑÑ\n" "\n" "ПриноÑимо Ð²Ð¸Ð±Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° незручноÑті. Ð”Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ у покращенні додатку, будь " "лаÑка, напишіть про проблему на електронну пошту manisandro@gmail.com. ÐамагайтеÑÑ Ð¾Ð¿Ð¸Ñати, Ñкі дії ви виконували перед тим, Ñк додаток " "аварійно завершивÑÑ. Також додайте інформацію, розміщену нижче. ДÑкуємо." #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract зупинивÑÑ\n" "\n" "Tesseract (OCR-рушій) зупинивÑÑ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту. це може " "траплÑтиÑÑ, Ñкщо викориÑтовувані файли traineddata пошкоджені або неÑуміÑні " "з цією верÑією tesseract, або через помилку у tesseract.\n" "\n" "Стек-Ñ‚Ñ€ÐµÐ¹Ñ Ð½Ð¸Ð¶Ñ‡Ðµ може міÑтити додаткову інформацію про те, де ÑтавÑÑ Ð·Ð±Ñ–Ð¹.\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "Пакетний екÑпорт HOCR" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "ЗаÑтоÑувати" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "Закрити" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "Вибрати вихідний каталог..." #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "Формат:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 #, fuzzy msgid "Group outputs of N lowest levels:" msgstr "Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿ на рівні:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "Вхід:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "ПередоглÑд виводу:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "Вхідні файли" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "Опції екÑпорту" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "Показати/приховати панель результатів" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "Обернути поточну Ñторінку" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "Обернути уÑÑ– Ñторінки" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "Джерела" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "Додати зображеннÑ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "Додати зображеннÑ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "Видалити Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ñ– ÑпиÑку" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "Видалити зображеннÑ" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "ОчиÑтити ÑпиÑок" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "Мініатюри" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "Файли" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "ПриÑтрій:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "Оновити" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "Сканувати до теки:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "Режим:" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "Кольоровий" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "Відтінки Ñірого" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "Роздільна здатніÑть:" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "Сканувати" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "Джерело:" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "СкануваннÑ" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "ЯÑкравіÑть" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "КонтраÑÑ‚" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "Роздільна здатніÑть" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "ІнверÑÑ–Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñƒ" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "Збільшити" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "Зменшити" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "Звичайний розмір" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "Оптимальне заповненнÑ" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "Повернути Ñторінку" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "Обрати режим обертаннÑ" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "Обрати режим вÑтавки" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "Обрати Ñторінку" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñм" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "Звичайний текÑÑ‚" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCR, PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "ÐÐ²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÐºÐµÑ‚Ñƒ Ñторінки" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "Розпізнати вÑе" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "Обрати мову" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "Пакетний екÑпорт" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "Графічний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "Пакетний режим" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "У пакетному режимі кожне джерело Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÑєтьÑÑ Ð¾ÐºÑ€ÐµÐ¼Ð¾, а вихідні " "дані зберігаютьÑÑ Ð¿Ð¾Ñ€Ñд у вхідному файлі." #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "ÐаÑвні результати:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "Додати до текÑту номера Ñторінок" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "ÐÐ²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÐºÐµÑ‚Ñƒ Ñторінки" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "Діапазон Ñторінок" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "Діапазон Ñторінок:" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "Приклад: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "ОблаÑть розпізнаваннÑ:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "Ð’ÑÑ Ñторінка" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "ÐвтовизначеннÑ" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "Додати перед текÑтом, що виводитьÑÑ:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "Ім'Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¾Ð³Ð¾ файлу" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "Вихідна Ñторінка" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "Захищений PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "Поточна Ñторінка" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "Кілька Ñторінок..." #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "Пакетний режим..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "Додати Ñлово" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "Введіть Ñлово:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "Додати в кінець" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "Ð’Ñтавити перед поточною Ñторінкою" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "ЕкÑпорт у проÑтий текÑÑ‚" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "ЕкÑпорт у PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "ЕкÑпорт у ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "Додати в кінець" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "Ð’Ñтавити перед поточною Ñторінкою" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "Відкрити файл hORC" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "Зберегти результати" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "ЕкÑпорт" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "ОчиÑтити результати" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "Знайти Ñ– замінити" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "Відображати величини доÑтовірноÑті" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "Відображати попередній переглÑд" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "ÐаÑтупний (F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "Попередній (Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "Розгорнути уÑе" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "Згорнути уÑе" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "ВлаÑтивоÑті" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "Джерело" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "Додати до поточного текÑту" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "Ð’Ñтавити на міÑці курÑору" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "Замінити поточний текÑÑ‚" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "Зберігати розрив Ñ€Ñдка, Ñкщо..." #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "Перед ним Ñ” знак ÐºÑ–Ð½Ñ†Ñ Ñ€ÐµÑ‡ÐµÐ½Ð½Ñ (.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "Перед ним або піÑÐ»Ñ Ð½ÑŒÐ¾Ð³Ð¾ Ñ” лапки" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "Інші опції" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "Об'єднати перенеÑені Ñлова" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "СтиÑкати пробіли" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "Зберігати поділ на абзаци" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "Візуальні підказки" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "Відобразити пробіли" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "Відкрити файл" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "Видалити розриви Ñ€Ñдків у вибраному текÑті" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "СкаÑувати" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "Повторити" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "Ðова вкладка" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "Режим виводу:" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "PDF з невидимим текÑтовим шаром" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "СтиÑненнÑ:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "ЯкіÑть ÑтиÑненнÑ:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI (точок на дюйм):" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "Ðлгоритм згладжуваннÑ:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ:" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "ВирівнÑти інтервали між Ñ€Ñдками Ñ– Ñловами" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "ПримуÑово викориÑтовувати ÑімейÑтво шрифтів:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "ЗапаÑне ÑімейÑтво шрифтів:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "ПримуÑово викориÑтовувати розмір шрифту:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñƒ:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt (точок)" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "Зберігати пробіли, ширші за:" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "Ñимволів" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "Видалити Ñимволи переноÑу перед розривами Ñ€Ñдка" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "Розмір Ñторінки:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "Ширина" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "ВиÑота" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "Вважати, що вихідні Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°ÑŽÑ‚ÑŒ Ñправжній DPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "Базовий" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF-верÑÑ–Ñ:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "Пароль:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "Підтвердіть пароль:" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "Ð¨Ð¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ (необов'Ñзково):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "Ðвтор:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "Заголовок:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "Тема:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "Творець:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "Виробник:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "Ключові Ñлова:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "Додаткова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ (необов'Ñзково):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "Імпортувати з поточного джерела" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "Розширені" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "Знайти" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "Замінити" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "Замінити вÑе" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "Знайти попереднє" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "Знайти наÑтупне" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "Враховувати регіÑтр" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "Заміни" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "Видалити" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "ПорÑдок:" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "Розпізнати" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "Розпізнати в буфер обміну" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "Зберегти Ñк зображеннÑ" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "Відкрити" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "Зберегти" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "ОчиÑтити" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "Додати" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "Видалити" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Менеджер tessdata" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñтановленими мовами:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "ЗображеннÑ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "Ð”Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð¶Ñ–Ñ‚ÑŒ ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ..." #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "Помилка ініціалізації програми ÑкануваннÑ." #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "Сканери не виÑвлено." #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "ЗапуÑк ÑкануваннÑ..." #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ñтрою..." #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ..." #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²..." #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "Передача даних..." #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "СкаÑÑƒÐ²Ð°Ð½Ð½Ñ ÑкануваннÑ..." #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "ÐŸÑ€ÐµÑ„Ñ–ÐºÑ Ñ–Ð¼ÐµÐ½Ñ– файлу" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "Код" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "Рідна назва" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "Шрифт" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "Обробник збоїв" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "Ваша робота була збережена у %1." #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "Ðезбережена робота відÑутнÑ." #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "Зворотне траÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ. Чи вÑтановлено gdb?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ зображеннÑ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "Файл, можливо, не Ñ” зображеннÑм або він пошкоджений:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "Сторінка %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ñ PNG" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "Зберегти виділене" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "Розпізнати вÑе" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "Розпізнати виділене" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "ВиконуєтьÑÑ Ð°Ð½Ð°Ð»Ñ–Ð· макету Ñторінки" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "ТимчаÑові файли" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "Вибрати каталог..." #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "Ðемає пропозицій" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "Додати у Ñловник" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "Ігнорувати Ñлово" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "Сторінка" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "Блок текÑту" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "Ðбзац" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "РÑдок текÑту" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "Графіка" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати ODT: неможливо запиÑати цільовий файл." #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "ЕкÑпорт у ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "Операцію було ÑкаÑовано" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð·ÑƒÐ°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñторінку %1" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "ЕкÑпортую у PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати у PDF: %1." #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "Бібліотека PDF не може завантажити шрифт '%1'." #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "Монохромний" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "Поріг (найближчий колір)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "РозÑÑ–Ñний" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip (без втрат)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT Group 4 (без втрат)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg (з втратами)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "Як джерело" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "КориÑтувацький" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "Ñм" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "дюйм" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати текÑÑ‚: неможливо запиÑати цільовий файл." #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "Блок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "РÑдок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "Слово" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "Слово з помилкою" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "Відображати величини доÑтовірноÑті" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "Ðеможливо опрацювати наÑтупні Ñторінки:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "Помилки розпізнаваннÑ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "Кілька значень" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "Об'єднати" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "Виокремити з батьківÑького об'єкту" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "ОбмінÑти" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "Додати облаÑть графіки" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "Додати текÑтовий блок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "Додати абзац" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "Додати Ñ€Ñдок" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "Додати Ñлово" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "Файли hOCR HTML" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "Відкрити файл hORC" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "Ðеможливо відкрити такі файли:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "Файл не міÑтить коректного вміÑту hORC HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "Ðеможливо відкрити файли" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "результати" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "Зберегти результати в hOCR..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "Зберегти результати не вдалоÑÑ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "ПереконайтеÑÑ, що у Ð²Ð°Ñ Ñ” дозвіл на Ð·Ð°Ð¿Ð¸Ñ Ð² обрану теку." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "ТекÑтові документи OpenDocument" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "Зберегти результати в ODT..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF-файли" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "Зберегти результати в PDF..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "ÐеприпуÑтимий результат" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "Ðеможливо перезапиÑати файл, Ñкий Ñ” вихідним Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ документу." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "ТекÑтові файли" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "Зберегти результати Ñк текÑÑ‚..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "Результати не збережено" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "Зберегти результати, перш ніж продовжити?" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "Заміна..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ñтановок..." #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "РÑдки перед:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "РÑдки піÑлÑ:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      TabÐаÑтупне поле
      Shift+TabПопереднє поле
      УнизÐаÑтупний Ñ€Ñдок
      ВверхПопередній Ñ€Ñдок
      Ctrl+ПробілПропозиції напиÑаннÑ
      Ctrl+EnterДодати Ñлово " "в Ñловник
      Ctrl+BЖирний шрифт
      Ctrl+IКурÑив
      Ctrl+DРозділити " "Ñлово в позиції вказівника
      Ctrl+MОб'єднати з " "попереднім Ñловом
      Ctrl+Shift+MОб'єднати з " "наÑтупним Ñловом
      Ctrl+DeleteВидалити Ñлово
      Ctrl+{Ліворуч,Праворуч}ÐšÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð²Ð¾Ñ— межі
      Ctrl+Shift+{Ліворуч,Праворуч}ÐšÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¾Ñ— межі
      Ctrl+{Угору,Униз}ÐšÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€Ñ…Ð½ÑŒÐ¾Ñ— межі
      Ctrl+Shift+{Угору,Униз}ÐšÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¸Ð¶Ð½ÑŒÐ¾Ñ— межі
      Ctrl++Збільшити розмір шрифту
      Ctrl+-Зменшити розмір шрифту
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "Ð¡Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "Довіра: %1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "З викориÑтаннÑм tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "Щоб розпочати, виберіть зображеннÑ..." #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "Кілька джерел (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "Готовий" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "Ðова верÑÑ–Ñ" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "ДоÑтупний gImageReader %1" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "Завантажити" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "СпиÑок змін" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "Більше не Ñповіщувати" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "Більше не показувати" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "Ð’Ñтановити" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "Орфографічний Ñловник відÑутній" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "Орфографічний Ñловник Ð´Ð»Ñ %1 не вÑтановлено" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "Ð’ÑтановлюєтьÑÑ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð¸Ð¹ Ñловник Ð´Ð»Ñ '%1'" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "Помилка" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "Ðе вдалоÑÑ Ð²Ñтановити орфографічний Ñловник: %1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "Ðе вдалоÑÑ Ñтворити теку Ð´Ð»Ñ Ð¾Ñ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð¸Ñ… Ñловників." #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "Ðеможливо прочитати %1: %2." #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "ЗавантажуєтьÑÑ '%1'..." #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ наÑтупні Ñловники:\n" "%1\n" "\n" "Перевірте мережеве з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ‚Ð° права доÑтупу до теки.\n" "Порада: Якщо ви не маєте дозволу на Ð·Ð°Ð¿Ð¸Ñ Ñƒ ÑиÑтемні теки, ви можете " "перемкнутиÑÑ Ð½Ð° кориÑтувацькі шлÑхи у ÐалаштуваннÑÑ…." #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "Словники вÑтановлено" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "Було вÑтановлено наÑтупні Ñловники:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "Орфографічні Ñловники Ð´Ð»Ñ '%1' не знайдено." #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "Сторінка: %1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "Закритий документ" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "Ð’Ñтавлено %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "Результати не збережено" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "Зберегти результати, перш ніж продовжити?" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ñ–Ð² Ñ€Ñдків..." #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 #, fuzzy msgid "Highlight mode" msgstr "Режим підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÑинтакÑиÑу:" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "Перевірити орфографію" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 #, fuzzy msgid "%1 occurrences replaced" msgstr "КількіÑть випадків заміни: %1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "Файл: %1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "Сторінка: %1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ Ñторінку %1]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "Виберіть файли" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "Зберегти результати..." #: ../gtk/src/OutputEditorText.cc:584 #, fuzzy msgid "Unsaved documents" msgstr "Закритий документ" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "Ðемає доÑтупних мов" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "" "Ðемає доÑтупних Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð¾Ð² tesseract. Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ðµ працюватиме." #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "Багатомовний" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "Ðвтоматична ÑÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ Ñторінки" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "Ð¡ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ Ñторінки з визначеннÑм орієнтації та шрифту" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "Вважати текÑтом в один Ñтовпець" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "Вважати блоком текÑту, вирівнÑного вертикально" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "Вважати однорідним блоком текÑту" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "Вважати Ñ€Ñдком текÑту" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "Вважати окремим Ñловом" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "Вважати окремим Ñловом в колі" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "Розріджений неупорÑдочений текÑÑ‚" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "Розріджений текÑÑ‚ з визначеннÑм орієнтації та шрифту" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "Режим Ñегментації Ñторінки" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "Білий / чорний ÑпиÑок Ñимволів..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "Керувати мовами..." #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "ПерезапиÑати" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "ПропуÑтити обробку" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "Поточне виділеннÑ" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "СталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ при розпізнаванні" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "Помилка ініціалізації tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "Джерело вже розпізнано" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 #, fuzzy msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" "Одне чи кілька вибраних джерел уже було розпізнано. Ð’Ñе одно продовжити?" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñторінки %1 (%2 із %3)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- Сторінка %1: не вдалоÑÑ Ð²Ñ–Ð´Ð¼Ð°Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ñторінку" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "Триває розпізнаваннÑ..." #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- Сторінка %1: не вдалоÑÑ Ð²Ñ–Ð·ÑƒÐ°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñторінку" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: результат уже Ñ–Ñнує, пропуÑк" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: неможливо Ñтворити вихідний файл" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "ВідбулиÑÑ Ñ‚Ð°ÐºÑ– помилки:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑкаÑовано" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "Сканер не вказано" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "Ðеможливо під'єднатиÑÑ Ð´Ð¾ Ñканера" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "Ðеможливо розпочати ÑкануваннÑ" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "Помилка зв'Ñзку зі Ñканером" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ зображеннÑ" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "Операцію ÑкаÑовано." #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "ПриÑтрій зайнÑтий." #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "Кришка відкрита." #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "Подавач документів заклинило." #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "Подавач документів порожній." #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "ДоÑтуп до Ñканеру заборонено." #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "Введіть пароль Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ '%1':" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "PDF-файли з текÑтом" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "Ці PDF-файли вже міÑÑ‚Ñть текÑÑ‚:\n" "%1\n" "Однаково відкрити?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– файли PDF" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "Помилка буфера обміну" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ буфера обміну." #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "Ð’Ñтавлено %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "Помилка Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ñ–Ð¼ÐºÐ° екрану" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ знімок екрану." #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "Знімок екрану %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ..." #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "Ðеможливо запиÑати файл" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "Ðеможливо запиÑати в %1." #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "Видалити файл?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "Видалити такі файли?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "Відкрити результати" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" "Були знайдені Ñк текÑÑ‚, так Ñ– вивід hOCR. Який з них ви хочете відкрити?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "Файл відÑутній" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "ÐаÑтупний файл було видалено або переміщено:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "Шукати" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "Замінити на" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "СпиÑок замін" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "Відкрити ÑпиÑок замін" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "Ðеможливо прочитати '%1'." #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "СталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ при читанні файлу" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ певні елементи ÑпиÑку замін." #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "Зберегти ÑпиÑок замін" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "Ðеможливо запиÑати в '%1'." #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "Зберегти ÑпиÑок?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "Ви хочете зберегти поточний ÑпиÑок?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾ÑиÑтемними мовними пакетами tesseract потрібен " "PackageKit, однак він не був знайдений. PackageKit можна вÑтановити за " "допомогою GNOME Software - заÑобу Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑунків Ñ– оновлень. " "Будь лаÑка, або вÑтановіть необхідний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ PackageKit, або " "викориÑтовуйте ÑиÑтемний пакетний менеджер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¼Ð¾Ð²Ð½Ð¸Ð¼Ð¸ пакетами " "tesseract, або перейдіть на призначений Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача шлÑÑ… до tessdata в " "діалозі конфігурації." #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ñтупних мов" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ перелік доÑтупних мов: %1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "Помилка аналізу: %1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½..." #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "Ðе вдалоÑÑ Ñтворити теку Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² tessdata." #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "ЗавантажуєтьÑÑ %1..." #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "ÐаÑтупні файли не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ чи вилучити:\n" "%1\n" "\n" "Перевірте мережеве з'Ñ”Ð´Ð°Ð½Ð½Ñ Ñ‚Ð° права доÑтупу до тек.\n" "\n" "Порада: Якщо ви не маєте дозволу на Ð·Ð°Ð¿Ð¸Ñ Ñƒ ÑиÑтемні теки, ви можете " "перемкнутиÑÑ Ð½Ð° кориÑтувацькі шлÑхи у ÐалаштуваннÑÑ…." #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "Так" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "Так, Ð´Ð»Ñ Ð²ÑÑ–Ñ…" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "ÐÑ–" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "ÐÑ–, Ð´Ð»Ñ Ð²ÑÑ–Ñ…" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "Відхилити" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "Відхилити" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "ТекÑÑ‚" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "Про програму gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "<html><head/><body><p>&nbsp;</p><p> " "Графічний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ tesseract-ocr</p><p><a href="" "https://github.com/manisandro/gImageReader/">Website</a></" "p><p>&nbsp;</p></body></html>" #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "ПодÑки" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "ЛіцензіÑ" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "У пакетному режимі кожне джерело оброблÑєтьÑÑ Ð¾ÐºÑ€ÐµÐ¼Ð¾ Ñ– вÑÑ– результати " "зберігаютьÑÑ Ñƒ вхідний файл." #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "СиÑтемне кодуваннÑ" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑтового файлу:" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      Програма зазнала " "аварії

      ПриноÑимо Ð²Ð¸Ð±Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° незручноÑті. Ð”Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ у " "покращенні додатку, будь лаÑка, напишіть про проблему на електронну пошту manisandro@gmail.com. ÐамагайтеÑÑ " "опиÑати, Ñкі дії ви виконували перед тим, Ñк додаток аварійно завершивÑÑ. " "Також додайте інформацію, розміщену нижче. ДÑкуємо.

      " #: ../qt/data/CrashHandler.ui.h:3 #, fuzzy msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "Tesseract зупинивÑÑ\n" "\n" "Tesseract (OCR-рушій) зупинивÑÑ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту. це може " "траплÑтиÑÑ, Ñкщо викориÑтовувані файли traineddata пошкоджені або неÑуміÑні " "з цією верÑією tesseract, або через помилку у tesseract.\n" "\n" "Стек-Ñ‚Ñ€ÐµÐ¹Ñ Ð½Ð¸Ð¶Ñ‡Ðµ може міÑтити додаткову інформацію про те, де ÑтавÑÑ Ð·Ð±Ñ–Ð¹.\n" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "Планшетний" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF лицьова" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF зворотнÑ" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF дуплекÑ" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "Збільшити" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "Зменшити" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "Справжній розмір" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "Оптимальний розмір" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "Обернути вліво" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "Обернути вліво" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "Обернути вправо" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "Обернути вправо" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "Елементи ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñм" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "ÐÐ²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÐºÐµÑ‚Ñƒ" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "Показати/приховати панель результатів" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "ЕкÑпорт у PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "Метод екÑпорту:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "Портретний" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "Ðльбомний" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати у файл" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: більше можливоÑтей Ð´Ð»Ñ ÑтиÑÐ½ÐµÐ½Ð½Ñ " "зображень, але немає підтримки Ñкладних ÑиÑтем пиÑемноÑті.
      • QPrinter: " "доÑтупне тільки ÑтиÑÐ½ÐµÐ½Ð½Ñ JPEG, але Ñкладні ÑиÑтеми пиÑемноÑті підтримуютьÑÑ." "
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "Зберегти Ñк текÑÑ‚ hOCR" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "Знайти Ñ– замінити" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "Відображати попередній переглÑд" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "Було вÑтановлено наÑтупні файли Ñловників:\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "Ðемає оÑтанніх файлів" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "Видалити файли" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "ÐаÑтупні файли не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ чи вилучити:\n" "%1\n" "\n" "Перевірте мережеве з'Ñ”Ð´Ð°Ð½Ð½Ñ Ñ‚Ð° права доÑтупу до тек.\n" "Порада: Якщо ви не маєте дозволу на Ð·Ð°Ð¿Ð¸Ñ Ñƒ ÑиÑтемні теки, ви можете " "перемкнутиÑÑ Ð½Ð° кориÑтувацькі шлÑхи у ÐалаштуваннÑÑ…." #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "Результати" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "Режим Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ OCR:" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "Додати каталог" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "Ð’Ñтавити" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "Зробити знімок екрану" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "Видалити зображеннÑ" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "Видалити зображеннÑ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "ОчиÑтити ÑпиÑок" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "Видалити розриви Ñ€Ñдків" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "Зберегти результати" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "ОчиÑтити результати" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #~ msgid "actionBatchExport" #~ msgstr "actionBatchExport" #~ msgid "Form" #~ msgstr "Форма" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "КількіÑть випадків заміни: %1" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "" #~ "Файл з ім'Ñм \"%1\" вже Ñ–Ñнує. Ви впевнені, що хочете його перезапиÑати?" #~ msgid "Overwrite File?" #~ msgstr "ПерезапиÑати файл?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "ÐаÑвно %1 документів із незбереженими змінами" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "Зберегти зміни перед закриттÑм? Якщо ви не збережете, уÑÑ– ваші зміни буде " #~ "втрачено назавжди.\n" #~ "Виберіть документи, Ñкі потрібно зберегти:" #~ msgid "New document %1" #~ msgstr "Ðовий документ %1" #~ msgid "Recent" #~ msgstr "Ðедавні файли" #~ msgid "Failed to create output" #~ msgstr "Ðе вдалоÑÑ Ñтворити результат" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "Ðе вдалоÑÑ Ñтворити результат. Помилка: %1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Програма зазнала аварії</span></p><" #~ "p>Прошу Ð²Ð¸Ð±Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° незручноÑті. Ð”Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— роботи програми будь " #~ "лаÑка напишіть про проблему на електронну пошту <a href="mailto:" #~ "manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. ÐамагайтеÑÑ Ð¾Ð¿Ð¸Ñати, Ñкі дії ви " #~ "виконували перед тим Ñк програма зазнала аварії. Також додайте " #~ "інформацію, розміщену нижче. ДÑкую.</p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "

      Роботу tesseract " #~ "перервано

      Робота tesseract (модуль Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту) " #~ "була перервана під Ñ‡Ð°Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту. Це могло ÑтатиÑÑ Ñ‡ÐµÑ€ÐµÐ· " #~ "викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð²Ñ‡ÐµÐ½Ð¸Ñ… наборів даних, пошкоджених або неÑуміÑних з " #~ "викориÑтовуваною верÑією tesseract, або через внутрішню помилку tesseract." #~ "

      У наведеному нижче траÑуванні Ñтека можуть бути додаткові " #~ "відомоÑті про причини збою.

      " #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "" #~ "<small><b>Пример:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "Звичайний текÑÑ‚" #~ msgid "Multiple sources" #~ msgstr "Кілька джерел" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- Сторінка %1: не вдалоÑÑ Ð²Ñ–Ð·ÑƒÐ°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñторінку" #~ msgid "The following errors occurred:%1" #~ msgstr "СталиÑÑ Ð½Ð°Ñтупні помилки:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "Буде видалено наÑтупні файли:%1" #~ msgid "Failed to open file" #~ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл" #~ msgid "The file could not be opened: %1." #~ msgstr "Файл не можна відкрити :%1." #~ msgid "Invalid hOCR file" #~ msgstr "Ðекоректний файл hORC" #~ msgid "The application has crashed" #~ msgstr "Додаток аварійно завершивÑÑ" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract аварійно завершивÑÑ Ð· наÑтупним повідомленнÑм:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "Це зазвичай траплÑєтьÑÑ Ð· однієї з наÑтупних причин:\n" #~ "- ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ñтарілих файлів traineddata.\n" #~ "- ВідÑутні файли даних додаткових мов.\n" #~ "- Файли даних мов пошкоджені.\n" #~ "\n" #~ "ПереконайтеÑÑ, що ваші файли даних мов дійÑні Ñ– ÑуміÑні з tesseract %2." #~ msgid "Could not read %1: %2" #~ msgstr "Ðеможливо прочитати %1: %2" #~ msgid "gImageReader" #~ msgstr "gImageReader" #~ msgid "Document font:" #~ msgstr "Шрифт документа:" #, fuzzy #~ msgid "Errors occurred" #~ msgstr "СталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ при розпізнаванні" #, fuzzy #~ msgid "" #~ "The following pages could not be rendered:\n" #~ "%1" #~ msgstr "" #~ "Ðеможливо відкрити наÑтупні файли:\n" #~ "%1" #~ msgid "substitution_list.txt" #~ msgstr "ÑпиÑок_замін.txt" #, fuzzy #~ msgid "Detect script and orientation" #~ msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ– результатів:" #~ msgid "" #~ "PackageKit is required for managing tesseract language packs, but it was " #~ "not found. Please use the system package management software to manage " #~ "the tesseract language packs." #~ msgstr "" #~ "Ð”Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñтановленими мовними пакунками tesseract потрібен " #~ "PackageKit, але його не знайдено. Будь лаÑка, ÑкориÑтайтеÑÑ ÑиÑтемним " #~ "менеджером програм, щоб вÑтановити потрібні мовні пакунки." #~ msgid "" #~ "\n" #~ "\tFailed to initialize tesseract" #~ msgstr "" #~ "\n" #~ "\tПомилка ініціалізації tesseract" #, fuzzy #~ msgid "So&urces" #~ msgstr "Джерела" #, fuzzy #~ msgid "&Output" #~ msgstr "Сканувати" #~ msgid "To recognize specific areas, drag rectangles over them." #~ msgstr "Щоб розпізнати певні ділÑнки, обведіть Ñ—Ñ… рамкою." #~ msgid "Rendering image..." #~ msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ..." #~ msgid "en_US" #~ msgstr "uk_UA" #, fuzzy #~ msgid "So&urces" #~ msgstr "Джерела" #, fuzzy #~ msgid "&Output" #~ msgstr "Результати" #~ msgid "Configuration" #~ msgstr "ÐалаштуваннÑ" gImageReader-3.4.0/po/zh_CN.po000066400000000000000000002374121417507262200160300ustar00rootroot00000000000000# Simplified Chinese translations for gImageReader package # Copyright (C) 2017 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Timothy Lee , 2017-2018. # Sandro Mani , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2022-01-18 02:54+0000\n" "Last-Translator: Eric \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.11-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR 应用程åº" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "釿–°æ£€æµ‹è¯­è¨€" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "管ç†è¯­è¨€" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "选项" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "å助" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "关于" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "离开" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "字符白åå•/黑åå•" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "ä¸è¯†åˆ«è¿™äº›å­—符(黑åå•):" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 msgid "Enter a string of characters..." msgstr "输入一串字符…" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "åªå…许下列字符被识别 (白åå•):" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "确定" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "è¾“å‡ºé¢æ¿çš„æ–¹å‘:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "横å‘" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "纵å‘" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "æŸ¥æ‰¾é—æ¼å®‰è£…的拼写è¯å…¸" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "自动检查新版本" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "缺çœè¯­è¨€å®šä¹‰ï¼š" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "é¢å¤–语言定义:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "tesseract è¯­è¨€æ•°æ®æ¡£çš„å‰ç¼€" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "å‰ç¼€" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 语言代ç å¹¶å›½å®¶ä»£ç " #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO 代ç " #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "语言åç§°" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "åç§°" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "å–æ¶ˆ" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "è¾“å‡ºé¢æ¿å­—体:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "缺çœå€¼" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "语言数æ®ä½ç½®ï¼š" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "语言定义路径:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "拼写è¯å…¸è·¯å¾„:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "系统路径" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "用户路径" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "自动以缺çœåº”ç”¨ç¨‹åºæ‰“开输出的文件" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "é‡å»º backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "应用程åºå·²å´©æºƒ\n" "\n" "给您带æ¥çš„ä¸ä¾¿æ·±è¡¨æ­‰æ„。为了帮助改善应用程åºï¼Œè¯·è€ƒè™‘å‘邮件将这个问题报告给manisandro@gmail.comã€‚è¯·è¯•ç€æè¿°åœ¨åº”ç”¨ç¨‹åº" "崩溃之å‰ä½ åœ¨åšä»€ä¹ˆã€‚åŒæ—¶ï¼ŒåŒ…括下é¢çš„ä¿¡æ¯ã€‚谢谢你。" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" "Tesseract 中止\n" "\n" "识别文本时Tesseract (OCR引擎)中止。å‘ç”Ÿè¿™ç§æƒ…况å¯èƒ½æ˜¯å› ä¸ºè®­ç»ƒæ•°æ®æŸå或ä¸å…¼å®¹" "使用中的tesseract版本,或由于tesseract的错误。\n" "\n" "下é¢çš„堆栈踪迹å¯èƒ½æä¾›å…³äºŽå´©æºƒåœ¨ä½•处å‘生的附加信æ¯ã€‚\n" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "HOCR 批é‡å¯¼å‡º" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "应用" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "关闭" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 msgid "Select source folder:" msgstr "é€‰æ‹©æºæ–‡ä»¶å¤¹ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "æ ¼å¼ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "对 N 最低级别的输出进行分组:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 msgid "Input:" msgstr "输入:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 msgid "Output preview:" msgstr "输出预览:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 msgid "Input files" msgstr "输入文件" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 msgid "Export options" msgstr "导出选项" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "切æ¢è¾“å‡ºé¢æ¿" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "旋转现有文字" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "旋转所有页é¢" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "æ¥æº" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "新增图åƒ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "新增图åƒ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "从清å•删除图åƒ" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "删除图åƒ" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "清除清å•" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "缩略图" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "文件" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "设备:" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "æ›´æ–°" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "输出:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "模å¼ï¼š" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "彩色" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "ç°åº¦" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "è§£åƒåº¦ï¼š" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "扫æ" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "æ¥æºï¼š" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "æ•获" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "亮度" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "对比" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "è§£åƒåº¦" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "倒置色版" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "放大" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "缩å°" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "正常尺寸" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "最佳尺寸" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 msgid "Rotate page" msgstr "旋转页é¢" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "选择旋转模å¼" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "选用æ’入模å¼" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 msgid "Select page" msgstr "选择页é¢" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "å›¾åƒæŽ§åˆ¶" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "纯文本" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCRã€PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "自动检测布局" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "辨认全部" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "选择语言" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 msgid "Batch Export" msgstr "批é‡å¯¼å‡º" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocr 的图åƒç•Œé¢" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 msgid "Batch Mode" msgstr "æ‰¹é‡æ¨¡å¼" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" "æ‰¹å¤„ç†æ¨¡å¼ä¸‹ï¼Œå°†åˆ†åˆ«å¤„ç†æ¯ä¸ªè¾“å…¥æºï¼Œå¹¶å°†è¾“出并排ä¿å­˜åˆ°è¾“入文件中。" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "现有的输出:" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 msgid "Prepend page numbers to output text" msgstr "在输出文本å‰é™„加页ç " #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 msgid "Autodetect page layout" msgstr "自动检测页é¢å¸ƒå±€" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "页é¢èŒƒå›´" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "页é¢èŒƒå›´ï¼š" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "例如: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "辨认本地:" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "整页" #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "自动检测" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "é å…ˆè¼¸å‡ºæ–‡å­—:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "æºæ–‡ä»¶å" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "æ¥æºé¡µ" #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "å—ä¿æŠ¤ PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "现时页é¢" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "多页……" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "æ‰¹é‡æ¨¡å¼..." #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "新增字è¯" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "输入字è¯ï¼š" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "在最åŽä¸€é¡µåŽé¢è¿½åŠ æ–°çš„è¾“å‡º" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 msgid "Insert new output before current page" msgstr "在当å‰é¡µé¢ä¹‹å‰æ’入新的输出" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "输出为纯文本" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "输出至 PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "输出至 ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 msgid "Append document after last page" msgstr "在最åŽä¸€é¡µä¹‹åŽè¿½åŠ æ–‡ä»¶" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "在当å‰é¡µä¹‹å‰æ’入文档" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "打开 hOCR æ¡£" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "存储输出" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "输出" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "清除输出" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "寻找åŠå–代" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "显示å¯ä¿¡åº¦" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "显示预览" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "下一个(F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "上一个(Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "递归展开" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "递归折å " #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "属性" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "æ¥æº" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "附加到现有文字" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "于光标ä½ç½®æ’å…¥" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "å–代现有文字" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "ä¿ç•™æ¢è¡Œç¬¦å·ï¼Œå¦‚果……" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "以终结å·èµ·é¦–(.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "以引å·èµ·é¦–或结尾" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "其它选项" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "连接断字符å·å‰åŽçš„å­—" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "åˆå¹¶ç©ºæ ¼" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "ä¿ç•™æ®µè½" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "视觉辅助" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "绘画空格" #: ../gtk/data/OutputEditorText.ui.h:13 msgid "Open file" msgstr "打开文件" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "去除选择文字的æ¢è¡Œç¬¦å·" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "æ¢å¤" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "é‡åš" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "新标签" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "输出模å¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "包å«éšå½¢æ–‡å­—层的 PDF" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "压缩:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "压缩质é‡ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "递色演算法:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "图åƒè®¾ç½®ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "统一行è·åŠå­—è·" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "改写字体:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "åŽå¤‡å­—体:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "改写字体尺寸:" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "字体缩放:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "è‘¡è„牙语" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "ä¿ç•™ç©ºæ ¼å¤§äºŽï¼š" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "字符" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "æ¸…æ´æ¢è¡Œå‰çš„连字符" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "文本设置:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "纸张尺寸:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "阔度" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "高度" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "å°†å›¾åƒæºè§†ä¸ºå…·æœ‰çœŸDPI:" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "基本" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF 版本:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "å£ä»¤ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "确认å£ä»¤ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "加密(选择性):" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "作者:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "å称:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "主题:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "创建者:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "å‘行者:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "关键字:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "附加的信æ¯(å¯é€‰):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "è¾“å…¥çŽ°æœ‰æ¥æº" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "高级" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "寻找" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "全部å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "寻找å‰ä¸€ä¸ª" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "寻找下一个" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "尺寸写å»åˆ" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "替æ¢å€¼" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "删除" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "排åºï¼š" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "辨认" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "辨认至剪贴æ¿" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "存储为图åƒ" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "打开" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "存储" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "清除" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "新增" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "删除" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata 管ç†å‘˜" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "管ç†å·²å®‰è£…的语言:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "扫æ.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "图åƒ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "选择输出文件å……" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "ä¸èƒ½åˆå§‹åŒ–æ‰«ææœåŠ¡ã€‚" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "ä¸èƒ½æ‘ºæ‰«æ" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "检测ä¸åˆ°æ‰«æå™¨ã€‚" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "开始扫æâ€¦â€¦" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "打开设备……" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "设置选项……" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "获å–傿•°â€¦â€¦" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "转输数æ®â€¦â€¦" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "å–æ¶ˆæ‰«æâ€¦â€¦" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "文件åå‰ç¼€" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "代ç " #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "原生åç§°" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "脚本" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "异常终止处ç†å™¨" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "你的工作已存储于 %1。" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "没有未存储的工作。" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "获å–回溯失败。 是å¦å®‰è£…了GDB?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "ä¸èƒ½è£…入图åƒ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "该文件å¯èƒ½ä¸æ˜¯å›¾åƒæˆ–已被æŸå:\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 msgid "Page %1" msgstr "é¡µé¢ %1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG 图åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "存储选择图åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "选择.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "辨认全部" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "辨认选择区" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "进行布局分æž" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "临时文件" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "ODT" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 msgid "Select folder..." msgstr "选择文件夹…" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "没有推è" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "新增至è¯å…¸" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "忽略字è¯" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "页é¢" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "文字å—" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "段è½" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "文字" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "图åƒ" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "ä¸èƒ½è¾“出" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "ä¸èƒ½è¾“出 ODT:ä¸èƒ½åˆ›å»ºè¾“出档。" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "输出至 ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "已喿¶ˆæ“作" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "ä¸èƒ½ç»˜ç”»ç¬¬ %1 页" #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "输出至 PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "ä¸èƒ½è¾“出 PDF:%1。" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF åº“ä¸æ”¯æŒæ‰€é€‰æ‹©å­—体 '%1'。" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "黑白" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "定é™ï¼ˆæœ€æŽ¥è¿‘颜色)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "扩散" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip(无æŸï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT 第 4 组(无æŸï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg(失真)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "ä¸Žæ¥æºç›¸åŒ" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "自定" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "厘米" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "在" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "ä¸èƒ½è¾“出文本:ä¸èƒ½åˆ›å»ºè¾“出档。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "æ–¹å—" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "线æ¡" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "å­—è¯" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "错拼字è¯" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "显示å¯ä¿¡åº¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "ä¸èƒ½å¤„ç†ä¸‹åˆ—页é¢ï¼š\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "辨认时出现错误" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "多个数值" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "åˆå¹¶" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "从上层分拆出æ¥" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "对æ¢" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "æ–°å¢žå›¾åƒæœ¬åœ°" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "新增文字方å—" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "新增段è½" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "新增线æ¡" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "新增字è¯" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML æ¡£" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "打开 hOCR æ¡£" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "" "The following files could not be opened:\n" "%1" msgstr "" "无法打开下列文件:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "" "ä¸‹åˆ—æ–‡ä»¶ä¸æ˜¯æœ‰æ•ˆçš„ hOCR HTML:\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "ä¸èƒ½æ‰“开文件" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "输出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "存储 hOCR 输出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "ä¿å­˜è¾“出失败" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "请检查你在所选择数æ®å¤¹æ‹¥æœ‰å†™å…¥æƒé™ã€‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument 文件档" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "存储 ODT 输出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF æ¡£" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "存储 PDF 输出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "无效输出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "ä¸èƒ½æ”¹å†™æ­¤æ–‡ä»¶çš„æ¥æºå›¾åƒæ¡£ã€‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "文本" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "存储文字输出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "未存储输出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "先存储输出å†ç»§ç»­ï¼Ÿ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "å–代中……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "正在套用替æ¢å€¼â€¦â€¦" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "键盘快æ·é”®" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "冒å·å†…容之å‰çš„行:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "冒å·å†…容之åŽçš„行:" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" "
      Tab下个字段
      Shift+Tab上个字" "段
      Down下一行
      Up上一行
      Ctrl+Space拼写建议
      Ctrl+Enter添加å•è¯åˆ°å­—å…¸
      Ctrl+B切æ¢ç²—体
      Ctrl+Iåˆ‡æ¢æ–œä½“
      Ctrl+D在光标ä½ç½®" "分è¯
      Ctrl+M与上一å•è¯åˆå¹¶
      Ctrl+Shift+M与下个å•è¯åˆå¹¶
      Ctrl+Delete删除å•è¯
      Ctrl+{Left,Right}调整左边框
      Ctrl+Shift+{Left,Right}调整å³è¾¹æ¡†
      Ctrl+{Up,Down}调整顶部边框
      Ctrl+Shift+{Up,Down}调整底部边框
      Ctrl+" "+增加字体大å°
      Ctrl+-é™ä½Žå­—体大å°
      " #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "键盘快æ·é”®" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "置信度:%1" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "采用 tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "请选择图åƒä½œä¸ºå¼€å§‹â€¦â€¦" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 msgid "Multiple sources (%1)" msgstr "å¤šä¸ªæ¥æº (%1)" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "就绪" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "新版本" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 å·²é¢ä¸–" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "下载" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "修改日志" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "ä¸å†æç¤º" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "ä¸å†æ˜¾ç¤º" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "安装" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "é—æ¼æ‹¼å†™è¯å…¸" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "未安装 %1 的拼写è¯å…¸" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "正在安装 '%1' 的拼写è¯å…¸" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "错误" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "ä¸èƒ½å®‰è£…拼写è¯å…¸ï¼š%1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "ä¸èƒ½åˆ›å»ºæ‹¼å†™è¯å…¸ç›®å½•。" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "ä¸èƒ½è¯»å…¥ %1:%2。" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "正在下载 '%1'……" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "ä¸èƒ½ä¸‹è½½æˆ–删除下列è¯å…¸ï¼š\n" "%1\n" "\n" "请检查连接åŠç›®å½•æƒé™ã€‚\n" "æç¤ºï¼šå¦‚果您在系统数æ®å¤¹ä¸­æ²¡æœ‰å†™å…¥æƒé™ï¼Œæ‚¨å¯ä»¥åœ¨è®¾ç½®å¯¹è¯æ¡†ä¸­åˆ‡æ¢åˆ°ç”¨æˆ·è·¯å¾„。" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "已安装è¯å…¸" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "已安装下列è¯å…¸ï¼š\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "找ä¸åˆ° '%1' 的拼写è¯å…¸ã€‚" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 msgid "Page: %1\n" msgstr "页é¢ï¼š%1\n" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "关闭文档" #: ../gtk/src/OutputEditorText.cc:133 msgid "Untitled %1" msgstr "无标题 %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Document not saved" msgstr "文档未ä¿å­˜" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 msgid "Save document before proceeding?" msgstr "å…ˆä¿å­˜æ–‡æ¡£å†ç»§ç»­ï¼Ÿ" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "去除æ¢è¡Œç¬¦å·â€¦â€¦" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "无高亮" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "高亮模å¼" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "检查拼写" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "æ›¿æ¢æ•°ï¼š%1" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "文件:%1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "页é¢ï¼š%1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[ä¸èƒ½è¾¨è®¤ç¬¬ %1 页]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "选择文件" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "存储输出……" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "未ä¿å­˜çš„æ–‡æ¡£" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "以下文档有未ä¿å­˜çš„æ›´æ”¹ã€‚继续之å‰ï¼Œä½ å¸Œæœ›ä¿å­˜å“ªäº›æ–‡æ¡£ï¼Ÿ" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "没有å¯ç”¨è¯­è¨€" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "没有å¯ç”¨çš„ tesseract 语言。辨认将会失败。" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "多语言" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "自动分割页é¢" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "分割页é¢å¹¶æ£€æµ‹æ–¹å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "å‡è®¾åªæœ‰ä¸€æ æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "å‡è®¾åªæœ‰ä¸€æ®µçºµå‘对整的文字" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "å‡è®¾åªæœ‰ä¸€æ®µå‡åŒ€çš„æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "å‡è®¾åªæœ‰ä¸€è¡Œæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "å‡è®¾åªæœ‰ä¸€ä¸ªå­—" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "å‡è®¾æ˜¯åœ†åœˆå†…的一个字" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "没有特定次åºçš„ç¨€ç–æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "æ£€æµ‹ç¨€ç–æ–‡å­—的方å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "åˆ†å‰²é¡µé¢æ¨¡å¼" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "字符白åå•/黑åå•..." #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "管ç†è¯­è¨€â€¦â€¦" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "覆盖现有的输出" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "è·³è¿‡å¤„ç†æº" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "现有选择区" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "辨认时出现错误" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "ä¸èƒ½åˆå§‹åŒ– tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "已识别æº" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "å·²è¯†åˆ«äº†ä¸€ä¸ªæˆ–å¤šä¸ªé€‰å®šçš„æ¥æºã€‚ ä»è¦ç»§ç»­ï¼Ÿ" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "辨认第 %1 页(%3 之 %2)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 msgid "- Page %1: failed to render page" msgstr "- 第 %1 页:未能渲染页é¢" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "辨认中……" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 msgid "- %1:%2: failed to render page" msgstr "- %1:%2: 未能渲染页é¢" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "- %1: 输出已ç»å­˜åœ¨ï¼Œæ­£åœ¨è·³è¿‡" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 msgid "- %1: failed to create output file" msgstr "- %1: 未能创建输出文件" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 msgid "The following errors occurred:" msgstr "出现下列错误:" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "已喿¶ˆæ‰«æ" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "未指定扫æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "ä¸èƒ½è¿žæŽ¥è‡³æ‰«æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "ä¸èƒ½å¼€å§‹æ‰«æ" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "与扫æå™¨æ²Ÿé€šå‡ºçŽ°é”™è¯¯" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "ä¸èƒ½å­˜å‚¨å›¾åƒ" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "已喿¶ˆæ“作。" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "设备现正ç¹å¿™ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "机盖已打开。" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "进纸器å¡çº¸ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "进纸器缺文件。" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "访问扫æå™¨è¢«æ‹’ç»ã€‚" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "请为 '%1' 档输入å£ä»¤ï¼š" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "PDF with text" msgstr "嫿–‡å­—çš„ PDF" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "该 PDF æ¡£å·²åŒ…å«æ–‡å­—:\n" "%1\n" "ä¸è®ºå¦‚ä½•éƒ½è¦æ‰“开它?" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "图åƒä¸Ž PDF æ¡£" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "剪贴æ¿é”™è¯¯" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "ä¸èƒ½è¯»å…¥å‰ªè´´æ¿ã€‚" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "已贴上 %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "ç”»é¢æˆªå›¾é”™è¯¯" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "ä¸èƒ½æˆªå–ç”»é¢ã€‚" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "截图 %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "存储图åƒä¸­â€¦â€¦" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "ä¸èƒ½å†™å…¥æ–‡ä»¶" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "ä¸èƒ½å†™è¿› %1。" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "删除文件?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "删除以下文件?" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "Open output" msgstr "打开输出" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "åŒæ—¶æ‰¾åˆ°äº†æ–‡æœ¬å’ŒhOCR输出。你想开哪一个?" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "é—æ¼æ–‡ä»¶" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "下列文件已被删除或删除:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "寻找" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "å–代" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "æ›¿æ¢æ¸…å•" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "å¼€å§‹æ›¿æ¢æ¸…å•" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "读案错误" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "ä¸èƒ½è¯»å…¥ '%1'。" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "读入文件时出现错误" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "ä¸èƒ½è¯»å…¥æ›¿æ¢æ¸…å•内æŸäº›é¡¹ç›®ã€‚" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "å­˜å‚¨æ›¿æ¢æ¸…å•" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "存档错误" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "ä¸èƒ½å†™è¿› '%1'。" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "存储清å•?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "是å¦éœ€è¦å­˜å‚¨çŽ°æœ‰æ¸…å•?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "需è¦ä¸€ä¸ªåˆ°PackageKitåŽç«¯çš„会è¯è¿žæŽ¥æ¥ç®¡ç†ç³»ç»ŸèŒƒå›´çš„tesseract语言包,但是没有找" "到这个连接。这个æœåŠ¡é€šå¸¸ç”±è½¯ä»¶ç®¡ç†åº”用程åºå¦‚Gnome Softwareæä¾›ã€‚请安装æä¾›å¿…" "è¦PackageKit接å£çš„软件,使用其他系统包管ç†è½¯ä»¶ç›´æŽ¥ç®¡ç†tesseract语言包,或在é…" "ç½®å¯¹è¯æ¡†ä¸­åˆ‡æ¢åˆ°ä½¿ç”¨ç”¨æˆ·tessdata路径。" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "å–å¾—å¯ç”¨è¯­è¨€" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "ä¸èƒ½å–å¾—å¯ç”¨è¯­è¨€çš„æ¸…å•:%1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "分æžé”™è¯¯ï¼š%1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "正在套用改动……" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "ä¸èƒ½ä¸º tessdata 档创建目录。" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "正在下载 %1……" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "ä¸èƒ½ä¸‹è½½æˆ–删除下列文件:\n" "%1\n" "\n" "请检查连接åŠç›®å½•æƒé™ã€‚\n" "\n" "æç¤ºï¼šå¦‚果您在系统数æ®å¤¹ä¸­æ²¡æœ‰å†™å…¥æƒé™ï¼Œæ‚¨å¯ä»¥åœ¨è®¾ç½®å¯¹è¯æ¡†ä¸­åˆ‡æ¢åˆ°ç”¨æˆ·è·¯å¾„。" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "是" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "å…¨éƒ¨åŒæ„" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "å¦" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "全部ä¸åŒæ„" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "弃置" #: ../gtk/src/Utils.cc:145 msgid "Discard all" msgstr "放弃所有" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 msgid "Text" msgstr "文本" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 msgid "hOCR" msgstr "hOCR 标准" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "有关 gImageReader" #: ../qt/data/AboutDialog.ui.h:3 msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      tesseract-ocr 的图形å‰ç«¯

      网站

       " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "归功于" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "æ¡æ¬¾" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "æ‰¹å¤„ç†æ¨¡å¼ä¸‹ï¼Œå°†åˆ†åˆ«å¤„ç†æ¯ä¸ªè¾“å…¥æºï¼Œå¹¶å°†è¾“出并排ä¿å­˜åˆ°è¾“入文件中。" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "系统编ç " #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "文本编ç ï¼š" #: ../qt/data/CrashHandler.ui.h:2 #, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "

      程åºå´©æºƒäº†

      ä¸ä¾¿ä¹‹å¤„,敬请原谅。为了帮助改进程åºï¼Œè¯·è€ƒè™‘将问题报告给 manisandro@gmail.com。请æè¿°ä¸€ä¸‹åœ¨ç¨‹åºå´©æºƒ" "之å‰ä½ åœ¨åšä»€ä¹ˆã€‚此外,还应包括以下信æ¯ã€‚谢谢你ï¼

      " #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" "

      Tesseract 中止è¿è¡Œ

      Tesseract (OCR 引擎) 在识别文本时中止。如果使用的训练数æ®å·²æŸå或" "与正在使用的 tesseract 版本ä¸å…¼å®¹ï¼Œæˆ–由于 tesseract 中的错误,就å¯èƒ½å‡ºçŽ°è¿™ç§" "情况。

      下é¢çš„堆栈跟踪å¯ä»¥æä¾›å…³äºŽå´©æºƒå‘生ä½ç½®çš„é¢å¤–ä¿¡æ¯ã€‚

      " #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "å¹³æ¿" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF æ­£é¢" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF 背é¢" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF åŒé¢" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "放大" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "缩å°" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "正常尺寸" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "最佳尺寸" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "å‘左旋转" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "å‘左旋转" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "å‘峿—‹è½¬" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "å‘峿—‹è½¬" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "å›¾åƒæŽ§åˆ¶" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "自动检测布局" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "切æ¢è¾“å‡ºé¢æ¿" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "输出 PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "åŽç«¯ï¼š" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "纵å‘" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "横å‘" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "ä¸èƒ½å†™å…¥æ–‡ä»¶" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" "
      • PoDoFo: æä¾›æ›´å¤šçš„图åƒåŽ‹ç¼©é€‰é¡¹ï¼Œä½†ä¸å¤„ç†å¤æ‚的脚" "本。
      • QPrinter: åªæ”¯æŒJPEG压缩存储图åƒï¼Œä½†æ”¯æŒå¤æ‚的脚本。
      " #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "存储为 hOCR 文字" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "寻找åŠå–代" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 msgid "Show proofread widget" msgstr "显示校对å°éƒ¨ä»¶" #: ../qt/src/MainWindow.cc:624 msgid "" "The following dictionary files were installed:\n" "%1" msgstr "" "已安装下列è¯å…¸æ–‡ä»¶ï¼š\n" "%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 msgid "No recent files" msgstr "无最近文件" #: ../qt/src/SourceManager.cc:391 msgid "Delete Files" msgstr "删除文件" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "ä¸èƒ½ä¸‹è½½æˆ–删除下列文件:\n" "%1\n" "\n" "请检查连接åŠç›®å½•æƒé™ã€‚\n" "æç¤ºï¼šå¦‚果您在系统数æ®å¤¹ä¸­æ²¡æœ‰å†™å…¥æƒé™ï¼Œæ‚¨å¯ä»¥åœ¨è®¾ç½®å¯¹è¯æ¡†ä¸­åˆ‡æ¢åˆ°ç”¨æˆ·è·¯å¾„。" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "输出" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR 模å¼ï¼š" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 msgid "Add folder" msgstr "添加文件夹" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "贴上" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "ç”»é¢æˆªå›¾" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "删除图åƒ" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "删除图åƒ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "清除清å•" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "去除æ¢è¡Œç¬¦å·" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "存储输出" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "清除输出" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "添加标签" #~ msgid "actionBatchExport" #~ msgstr "批é‡å¯¼å‡ºæ“作" #~ msgid "Form" #~ msgstr "æ ¼å¼" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "å为 \"%1\" çš„æ–‡ä»¶å·²å­˜åœ¨ã€‚ä½ ç¡®å®šè¦æ”¹å†™å®ƒï¼Ÿ" #~ msgid "Overwrite File?" #~ msgstr "改写文件?" #~ msgid "There are %1 documents with unsaved changes" #~ msgstr "%1 个文档有未ä¿å­˜çš„æ›´æ”¹" #~ msgid "" #~ "Save changes before closing? If you don't save, all your changes will be " #~ "permanently lost.\n" #~ "Select the documents you want to save:" #~ msgstr "" #~ "关闭å‰ä¿å­˜æ›´æ”¹ï¼Ÿ 如果您ä¸ä¿å­˜ï¼Œæ‚¨çš„æ‰€æœ‰æ›´æ”¹éƒ½å°†æ°¸ä¹…丢失。\n" #~ "选择è¦ä¿å­˜çš„æ–‡æ¡£ï¼š" #~ msgid "New document %1" #~ msgstr "新文档 %1" #~ msgid "Recent" #~ msgstr "最近" #~ msgid "Amount of occurrences replaced: %1" #~ msgstr "æ›¿æ¢æ•°ï¼š%1" #~ msgid "One or more selected sources were aready recognized. Proceed anyway?" #~ msgstr "一个或多个选定的æºå·²è¢«è¯†åˆ«ã€‚ ä»è¦ç»§ç»­ï¼Ÿ" #, fuzzy #~ msgid "%1 occurrences replaces" #~ msgstr "æ›¿æ¢æ•°ï¼š%1" #~ msgid "Failed to create output" #~ msgstr "ä¸èƒ½åˆ›å»ºè¾“出" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "ä¸èƒ½åˆ›å»ºè¾“出。返回错误:%1" #, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">应用程åºå´©æºƒäº†</span></p><p>ä¸ä¾¿ä¹‹" #~ "处敬请原谅。 为了帮助改进应用程åºï¼Œè¯·è€ƒè™‘将问题报告给 <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. 请å°è¯•æè¿°åœ¨åº”用程åºå´©æºƒä¹‹å‰æ‚¨åœ¨åšä»€ä¹ˆã€‚ " #~ "此外,请包括以下信æ¯ã€‚ 谢谢你。</p></body></html>" #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract has aborted</span></p><p>" #~ "Tesseract (the OCR engine) has aborted while recognizing text. This may " #~ "occur if the used traineddatas are corrupt or incomplatible with the " #~ "version of tesseract in use, or due to a bug in tesseract.</p><" #~ "p>The stacktrace below may provide additional information about where " #~ "the crash occurred.</p></body></html>" #~ msgstr "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">Tesseract 已中止</span></p><p>" #~ "Tesseract(OCR 引擎)在识别文本时中止。 å‘ç”Ÿè¿™ç§æƒ…况的原因å¯èƒ½æ˜¯è®­ç»ƒæ•°æ®æŸ" #~ "åæˆ–与使用的 tesseract 版本ä¸å…¼å®¹ï¼Œæˆ–者由于 tesseract 中的错误。</p>" #~ "<p>下é¢çš„堆栈跟踪å¯èƒ½ä¼šæä¾›æœ‰å…³å´©æºƒå‘生ä½ç½®çš„å…¶ä»–ä¿¡æ¯ã€‚</p>" #~ "</body></html>" #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "<small><b>示例:</b> 1-10, 13, 14-18</small>" #, fuzzy #~ msgid "plain text" #~ msgstr "纯文本" #~ msgid "Multiple sources" #~ msgstr "å¤šä¸ªæ¥æº" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- 第 %1 页:ä¸èƒ½ç»˜ç”»é¡µé¢" #~ msgid "The following errors occurred:%1" #~ msgstr "出现下列错误:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "下列文件将会被删除:%1" #~ msgid "Failed to open file" #~ msgstr "ä¸èƒ½æ‰“开文件" #~ msgid "The file could not be opened: %1." #~ msgstr "ä¸èƒ½æ‰“开文件:%1。" #~ msgid "Invalid hOCR file" #~ msgstr "无效的 hOCR æ¡£" #~ msgid "The application has crashed" #~ msgstr "应用程åºå·²å¼‚常终止" #~ msgid "Could not read %1: %2" #~ msgstr "ä¸èƒ½è¯»å…¥ %1:%2。" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract 已异常终止åŠå‘出以下消æ¯ï¼š\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "出现这个情况一般有下列原因:\n" #~ "- 采用旧版的 traineddata 档。\n" #~ "- é—æ¼è¾…åŠ©è¯­è¨€æ•°æ®æ¡£ã€‚\n" #~ "- è¯­è¨€æ•°æ®æ¡£å·²æ¯å。\n" #~ "\n" #~ "请确ä¿ä½ çš„è¯­è¨€æ•°æ®æ¡£æ˜¯æ­£ç¡®çš„åŠå…¼å®¹ tesseract %2 。" gImageReader-3.4.0/po/zh_HK.po000066400000000000000000002254511417507262200160320ustar00rootroot00000000000000# Traditional Chinese (Hong Kong) translations for gImageReader package # Copyright (C) 2016 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Timothy Lee , 2017-2018. # Sandro Mani , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2018-05-29 20:23+0100\n" "Last-Translator: Sandro Mani \n" "Language-Team: Chinese \n" "Language: zh_HK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 2.0\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR 應用程å¼" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "釿–°åµæ¸¬èªžè¨€" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "管ç†èªžè¨€" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "é¸é …" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "å”助" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "關於" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "離開" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 #, fuzzy msgid "Enter a string of characters..." msgstr "ç²å–åƒæ•¸â€¦â€¦" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "確定" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "è¼¸å‡ºé¢æ¿çš„æ–¹å‘:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "æ©«å‘" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "縱å‘" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "æŸ¥æ‰¾éºæ¼å®‰è£çš„æ‹¼å­—詞典" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "自動檢查新版本" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "é è¨­èªžè¨€å®šç¾©ï¼š" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "é¡å¤–語言定義:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "tesseract 語言資料檔的å‰ç½®" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "å‰ç½®" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 語言代碼並國家代碼" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO 代碼" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "語言å稱" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "å稱" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "å–æ¶ˆ" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "è¼¸å‡ºé¢æ¿å­—型:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "é è¨­å€¼" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "語言資料ä½ç½®ï¼š" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "語言定義路徑:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "拼字詞典路徑:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "系統路徑" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "用戶路徑" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "自動以é è¨­æ‡‰ç”¨ç¨‹å¼é–‹å•ŸåŒ¯å‡ºçš„æ–‡ä»¶" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "é‡å»º backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, fuzzy, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯報給manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹å¼çµ‚" "æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "應用" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "關閉" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "é¸å–檔案" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "æ ¼å¼ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "輸出:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "輸出模å¼ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "ä¾†æºæª”å" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "å…¶ä»–é¸é …" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "切æ›è¼¸å‡ºé¢æ¿" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "æ—‹è½‰ç¾æœ‰æ–‡å­—" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "旋轉所有é é¢" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "來æº" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "新增圖åƒ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "新增圖åƒ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "從清單移除圖åƒ" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "刪除圖åƒ" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "清除清單" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "檔案" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "è£ç½®ï¼š" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "æ›´æ–°" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "輸出:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "模å¼ï¼š" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "彩色" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "ç°éšŽ" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "è§£åƒåº¦ï¼š" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "掃æ" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "來æºï¼š" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "æ“·å–" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "亮度" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "å°æ¯”" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "è§£åƒåº¦" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "å轉色版" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "放大" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "縮å°" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "正常大å°" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "最佳大å°" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 #, fuzzy msgid "Rotate page" msgstr "旋轉所有é é¢" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "é¸å–旋轉模å¼" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "é¸ç”¨æ’入模å¼" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 #, fuzzy msgid "Select page" msgstr "é¸å–語言" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "åœ–åƒæŽ§åˆ¶" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "純文字" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCRã€PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "辨èªå…¨éƒ¨" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "é¸å–語言" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "匯出" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocr 的圖åƒä»‹é¢" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "大å°å¯«å»åˆ" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "é å…ˆè¼¸å‡ºæ–‡å­—:" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "é é¢ç¯„åœ" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "é é¢ç¯„åœï¼š" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "例如: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "辨èªå€åŸŸï¼š" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "æ•´é " #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "è‡ªå‹•åµæ¸¬" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "é å…ˆè¼¸å‡ºæ–‡å­—:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "ä¾†æºæª”å" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "來æºé " #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "å—ä¿è­· PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "ç¾æ™‚é é¢" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "多é â€¦â€¦" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "新增字詞" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "輸入字詞" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "æ—‹è½‰ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "匯出為純文字" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "匯出至 PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "匯出至 ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "é™„åŠ åˆ°ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "開啟 hOCR 檔" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "儲存輸出" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "匯出" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "清除輸出" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "æœå°‹åŠå–代" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "顯示å¯ä¿¡åº¦" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "顯示é è¦½" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "下一個(F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "上一個(Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "展開" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "æ”¶èµ·" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "屬性" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "來æº" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "é™„åŠ åˆ°ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "於游標ä½ç½®æ’å…¥" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "å–ä»£ç¾æœ‰æ–‡å­—" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "ä¿ç•™æ›è¡Œç¬¦è™Ÿï¼Œå¦‚果……" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "以終çµè™Ÿèµ·é¦–(.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "以引號起首或çµå°¾" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "å…¶ä»–é¸é …" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "連接斷字符號å‰å¾Œçš„å­—" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "åˆä½µç©ºæ ¼" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "ä¿ç•™æ®µè½" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "視覺輔助" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "繪畫空格" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "開啟 hOCR 檔" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "去除é¸å–文字的æ›è¡Œç¬¦è™Ÿ" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "復原" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "é‡åš" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "輸出模å¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "包å«éš±å½¢æ–‡å­—層的 PDF" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "壓縮:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "壓縮å“質:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "éžè‰²æ¼”算法:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "圖åƒè¨­å®šï¼š" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "統一行è·åŠå­—è·" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "改寫字型:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "後備字型:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "改寫字型大å°ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "字型縮放:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "ä¿ç•™ç©ºæ ¼å¤§æ–¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "å­—å…ƒ" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "文字檔設定:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "紙張尺寸:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "闊度" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "高度" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "基本" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF 版本:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "密碼:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "確èªå¯†ç¢¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "åŠ å¯†ï¼ˆé¸æ“‡æ€§ï¼‰ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "作者:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "å稱:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "主題:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "創建者:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "發行者:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "é—œéµå­—:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "附加的資訊(å¯é¸):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "åŒ¯å…¥ç¾æœ‰ä¾†æº" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "進階" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "尋找" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "全部å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "尋找å‰ä¸€å€‹" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "尋找下一個" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "大å°å¯«å»åˆ" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "替æ›å€¼" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "刪除" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "排åºï¼š" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "辨èª" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "辨èªè‡³å‰ªè²¼ç°¿" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "儲存為圖åƒ" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "開啟" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "儲存" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "清除" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "新增" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "刪除" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata 管ç†å“¡" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "管ç†å·²å®‰è£çš„語言:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "圖åƒ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "é¸å–輸出檔å……" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "無法åˆå§‹åŒ–æŽƒææœå‹™ã€‚" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "無法摺掃æ" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "嵿¸¬ä¸åˆ°æŽƒæå™¨ã€‚" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "開始掃æâ€¦â€¦" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "開啟è£ç½®â€¦â€¦" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "設定é¸é ………" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "ç²å–åƒæ•¸â€¦â€¦" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "轉輸數據……" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "å–æ¶ˆæŽƒæâ€¦â€¦" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "檔åå‰ç½®" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "代碼" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "原生å稱" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "腳本" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "異常終止處ç†å™¨" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "你的工作已儲存於 %1。" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "沒有未儲存的工作。" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "無法å–å¾— backtraceã€‚å·²å®‰è£ gdb 嗎?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "無法載入圖åƒ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "該檔案å¯èƒ½ä¸æ˜¯åœ–åƒæˆ–已被æå£žï¼š\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 #, fuzzy msgid "Page %1" msgstr "é é¢ï¼š%1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG 圖åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "儲存é¸å–圖åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "辨èªå…¨éƒ¨" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "辨èªé¸å–å€" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "進行佈局分æž" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 #, fuzzy msgid "Select folder..." msgstr "é¸å–檔案" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "沒有建議" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "新增至詞典" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "忽略字詞" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "é é¢" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "文字å€å¡Š" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "段è½" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "文字" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "圖åƒ" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "無法匯出" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "無法匯出 ODT:無法建立輸出檔。" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "匯出至 ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "已喿¶ˆæ“作" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "無法繪畫第 %1 é " #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "匯出至 PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "無法匯出 PDF:%1。" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF 程å¼åº«ä¸æ”¯æ´æ‰€é¸å–å­—åž‹ '%1'。" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "黑白" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "定é™ï¼ˆæœ€æŽ¥è¿‘é¡è‰²ï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "æ“´æ•£" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip(無æï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT 第 4 組(無æï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg(失真)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "與來æºç›¸åŒ" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "自訂" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "在" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "無法匯出文字檔:無法建立輸出檔。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "å€å¡Š" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "ç·šæ¢" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "字詞" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "錯拼字詞" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "顯示å¯ä¿¡åº¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "無法處ç†ä¸‹åˆ—é é¢ï¼š\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "è¾¨èªæ™‚出ç¾éŒ¯èª¤" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "多個數值" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "åˆä½µ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "從上層分拆出來" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "å°æ›" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "新增圖åƒå€åŸŸ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "新增文字å€å¡Š" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "新增段è½" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "新增線æ¢" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "新增字詞" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "開啟 hOCR 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 #, fuzzy msgid "" "The following files could not be opened:\n" "%1" msgstr "無法開啟下列檔案:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 #, fuzzy msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "此檔案似乎並ä¸åŒ…嫿œ‰æ•ˆçš„ hOCR HTML:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "無法開啟檔案" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "儲存 hOCR 輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "無法儲存輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "請檢查你在所é¸å–è³‡æ–™å¤¾æ“æœ‰å¯«å…¥æ¬Šé™ã€‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument 文件檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "儲存 ODT 輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "儲存 PDF 輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "無效輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "無法改寫此文件的來æºåœ–åƒæª”。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "文字檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "儲存文字輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "未儲存輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "先儲存輸出å†ç¹¼çºŒï¼Ÿ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "å–代中……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "正在套用替æ›å€¼â€¦â€¦" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "採用 tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "è«‹é¸å–圖åƒä½œç‚ºé–‹å§‹â€¦â€¦" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 #, fuzzy msgid "Multiple sources (%1)" msgstr "多個來æº" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "就緒" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "新版本" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 å·²é¢ä¸–" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "下載" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "修改日誌" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "ä¸å†æç¤º" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "ä¸å†é¡¯ç¤º" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "安è£" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "éºæ¼æ‹¼å­—詞典" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "æœªå®‰è£ %1 的拼字詞典" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "æ­£åœ¨å®‰è£ '%1' 的拼字詞典" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "錯誤" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "ç„¡æ³•å®‰è£æ‹¼å­—詞典:%1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "無法建立拼字詞典目錄。" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "ç„¡æ³•è®€å– %1:%2。" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "正在下載 '%1'……" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "無法下載或刪除下列詞典:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "已安è£è©žå…¸" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "已安è£ä¸‹åˆ—詞典:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "找ä¸åˆ° '%1' 的拼字詞典。" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 #, fuzzy msgid "Page: %1\n" msgstr "é é¢ï¼š%1" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "已貼上 %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "未儲存輸出" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "先儲存輸出å†ç¹¼çºŒï¼Ÿ" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "去除æ›è¡Œç¬¦è™Ÿâ€¦â€¦" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "檢查拼字" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "檔案:%1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "é é¢ï¼š%1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[無法辨èªç¬¬ %1 é ]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "é¸å–檔案" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "儲存輸出……" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "沒有å¯ç”¨èªžè¨€" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "沒有å¯ç”¨çš„ tesseract 語言。辨èªå°‡æœƒå¤±æ•—。" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "多語言" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "自動分割é é¢" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "分割é é¢ä¸¦åµæ¸¬æ–¹å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "å‡è¨­åªæœ‰ä¸€æ¬„文字" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "å‡è¨­åªæœ‰ä¸€æ®µåž‚ç›´å°æ•´çš„æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "å‡è¨­åªæœ‰ä¸€æ®µå‡å‹»çš„æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "å‡è¨­åªæœ‰ä¸€è¡Œæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "å‡è¨­åªæœ‰ä¸€å€‹å­—" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "å‡è¨­æ˜¯åœ“圈內的一個字" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "沒有特定次åºçš„ç¨€ç–æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "嵿¸¬ç¨€ç–文字的方å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "分割é é¢æ¨¡å¼" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "管ç†èªžè¨€â€¦â€¦" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "ç¾æœ‰é¸å–å€" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "è¾¨èªæ™‚出ç¾éŒ¯èª¤" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "無法åˆå§‹åŒ– tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "辨èªç¬¬ %1 é ï¼ˆ%3 之 %2)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 #, fuzzy msgid "- Page %1: failed to render page" msgstr "" "\n" "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "辨èªä¸­â€¦â€¦" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 #, fuzzy msgid "- %1:%2: failed to render page" msgstr "" "\n" "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "無法建立輸出" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 #, fuzzy msgid "The following errors occurred:" msgstr "出ç¾ä¸‹åˆ—錯誤:%1" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "已喿¶ˆæŽƒæ" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "未指定掃æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "無法連線至掃æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "無法開始掃æ" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "與掃æå™¨æºé€šå‡ºç¾éŒ¯èª¤" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "無法儲存圖åƒ" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "已喿¶ˆæ“作。" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "è£ç½®ç¾æ­£ç¹å¿™ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "機蓋已打開。" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "進紙器å¡ç´™ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "進紙器缺文件。" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "å­˜å–æŽƒæå™¨è¢«æ‹’絕。" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "請為 '%1' 檔輸入密碼:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "嫿–‡å­—çš„ PDF" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "這些 PDF æª”å·²åŒ…å«æ–‡å­—:\n" "%1" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "圖åƒèˆ‡ PDF 檔" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "剪貼簿錯誤" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "無法讀å–剪貼簿。" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "已貼上 %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "ç•«é¢æˆªåœ–錯誤" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "無法截å–ç•«é¢ã€‚" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "截圖 %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "儲存圖åƒä¸­â€¦â€¦" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "無法寫入檔案" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "無法寫進 %1。" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "刪除檔案?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "儲存輸出" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "éºæ¼æª”案" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "下列檔案已被刪除或移除:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "尋找" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "å–代" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "é–‹å§‹æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "讀案錯誤" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "ç„¡æ³•è®€å– '%1'。" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "è®€å–æª”案時出ç¾éŒ¯èª¤" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "ç„¡æ³•è®€å–æ›¿æ›æ¸…單內æŸäº›é …目。" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "å„²å­˜æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "存檔錯誤" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "無法寫進 '%1'。" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "儲存清單?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "是å¦éœ€è¦å„²å­˜ç¾æœ‰æ¸…單?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 #, fuzzy msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "ç®¡ç† tesseract çš„ç³»çµ±èªžè¨€åŒ…é ˆè¦ PackageKit,但它並ä¸å­˜åœ¨ã€‚請利用系統的套件管" "ç†è»Ÿä»¶ä¾†ç®¡ç† tesseract 的語言包,或改用設置é é¢å…§çš„ tessdata 用戶路徑。" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "å–å¾—å¯ç”¨èªžè¨€" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "無法å–å¾—å¯ç”¨èªžè¨€çš„æ¸…單:%1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "剖æžéŒ¯èª¤ï¼š%1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "正在套用改動……" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "無法為 tessdata 檔建立目錄。" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "正在下載 %1……" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "無法下載或刪除下列檔案:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "是" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "å¦" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "棄置" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "棄置" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "文字" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCRã€PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "有關 gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      tesseract-ocr 的圖åƒä»‹é¢

      網站

       " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "歸功於" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "æ¢æ¬¾" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "系統編碼" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "文字檔編碼:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯報給manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹å¼çµ‚" "æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "å¹³æ¿" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF æ­£é¢" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF 背é¢" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF é›™é¢" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "放大" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "縮å°" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "正常大å°" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "最佳大å°" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "å‘左旋轉" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "å‘左旋轉" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "å‘峿—‹è½‰" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "å‘峿—‹è½‰" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "åœ–åƒæŽ§åˆ¶" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "切æ›è¼¸å‡ºé¢æ¿" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "匯出 PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "後端:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "縱å‘" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "æ©«å‘" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "無法寫入檔案" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "儲存為 hOCR 文字" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "尋找åŠå–代" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "顯示é è¦½" #: ../qt/src/MainWindow.cc:624 #, fuzzy msgid "" "The following dictionary files were installed:\n" "%1" msgstr "已安è£ä¸‹åˆ—詞典檔:%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "ä¾†æºæª”å" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "刪除檔案?" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "無法下載或刪除下列檔案:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "輸出:" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR 模å¼ï¼š" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "新增字詞" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "貼上" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "ç•«é¢æˆªåœ–" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "移除圖åƒ" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "刪除圖åƒ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "清除清單" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "去除æ›è¡Œç¬¦è™Ÿ" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "儲存輸出" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "清除輸出" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "æ ¼å¼ï¼š" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "å為 \"%1\" çš„æª”æ¡ˆå·²å­˜åœ¨ã€‚ä½ ç¢ºå®šè¦æ”¹å¯«å®ƒï¼Ÿ" #~ msgid "Overwrite File?" #~ msgstr "改寫檔案?" #~ msgid "Recent" #~ msgstr "最近" #~ msgid "Failed to create output" #~ msgstr "無法建立輸出" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "無法建立輸出。傳回錯誤:%1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      此應用程å¼å·²ç•°å¸¸çµ‚" #~ "æ­¢

      我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯" #~ "報給 manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹" #~ "å¼çµ‚æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "例如: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "純文字" #~ msgid "Multiple sources" #~ msgstr "多個來æº" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #~ msgid "The following errors occurred:%1" #~ msgstr "出ç¾ä¸‹åˆ—錯誤:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "下列檔案將會被刪除:%1" #~ msgid "Failed to open file" #~ msgstr "無法開啟檔案" #~ msgid "The file could not be opened: %1." #~ msgstr "無法開啟檔案:%1。" #~ msgid "Invalid hOCR file" #~ msgstr "無效的 hOCR 檔" #~ msgid "The application has crashed" #~ msgstr "應用程å¼å·²ç•°å¸¸çµ‚æ­¢" #~ msgid "Could not read %1: %2" #~ msgstr "ç„¡æ³•è®€å– %1:%2。" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract 已異常終止åŠç™¼å‡ºä»¥ä¸‹è¨Šæ¯ï¼š\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "出ç¾é€™å€‹æƒ…æ³ä¸€èˆ¬æœ‰ä¸‹åˆ—原因:\n" #~ "- 採用舊版的 traineddata 檔。\n" #~ "- éºæ¼è¼”助語言資料檔。\n" #~ "- èªžè¨€è³‡æ–™æª”å·²ææ¯€ã€‚\n" #~ "\n" #~ "請確ä¿ä½ çš„語言資料檔是正確的åŠå…¼å®¹ tesseract %2 。" gImageReader-3.4.0/po/zh_TW.po000066400000000000000000002255171417507262200160650ustar00rootroot00000000000000# Traditional Chinese (Taiwan) translations for gImageReader package # Copyright (C) 2017 THE GIMAGEREADER'S COPYRIGHT HOLDER # This file is distributed under the same license as the gImageReader package. # # Timothy Lee , 2017-2018. # Sandro Mani , 2016, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 23:16+0100\n" "PO-Revision-Date: 2018-07-17 13:15+0000\n" "Last-Translator: ezjerry liao \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 3.1-dev\n" #: ../data/gimagereader.desktop.in.h:1 msgid "OCR application" msgstr "OCR 應用程å¼" #: ../gtk/data/appmenu.ui.h:1 ../qt/src/Ui_MainWindow.hh:169 msgid "Redetect Languages" msgstr "釿–°åµæ¸¬èªžè¨€" #: ../gtk/data/appmenu.ui.h:2 ../qt/src/Ui_MainWindow.hh:172 msgid "Manage Languages" msgstr "管ç†èªžè¨€" #: ../gtk/data/appmenu.ui.h:3 ../gtk/data/ConfigDialog.ui.h:1 #: ../qt/data/ConfigDialog.ui.h:1 ../qt/src/Ui_MainWindow.hh:175 msgid "Preferences" msgstr "é¸é …" #: ../gtk/data/appmenu.ui.h:4 ../gtk/data/ConfigDialog.ui.h:2 #: ../gtk/src/MainWindow.cc:523 ../qt/src/MainWindow.cc:522 #: ../qt/src/Ui_MainWindow.hh:180 msgid "Help" msgstr "å”助" #: ../gtk/data/appmenu.ui.h:5 ../qt/data/AboutDialog.ui.h:2 #: ../qt/src/Ui_MainWindow.hh:183 msgid "About" msgstr "關於" #: ../gtk/data/appmenu.ui.h:6 msgid "Quit" msgstr "離開" #: ../gtk/data/CharacterListDialog.ui.h:1 ../qt/data/CharacterListDialog.ui.h:1 msgid "Character whitelist / blacklist" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:2 ../qt/data/CharacterListDialog.ui.h:2 msgid "Exclude these characters from being recognized (blacklist):" msgstr "" #: ../gtk/data/CharacterListDialog.ui.h:3 ../qt/data/CharacterListDialog.ui.h:3 #, fuzzy msgid "Enter a string of characters..." msgstr "ç²å–åƒæ•¸â€¦â€¦" #: ../gtk/data/CharacterListDialog.ui.h:4 ../qt/data/CharacterListDialog.ui.h:4 msgid "Only allow the following characters to be recognized (whitelist):" msgstr "" #: ../gtk/data/ConfigDialog.ui.h:3 ../gtk/data/MainWindow.ui.h:49 #: ../gtk/data/OutputEditorHOCR.ui.h:3 ../gtk/src/FileDialogs.cc:179 #: ../gtk/src/FileDialogs.cc:194 ../gtk/src/hocr/HOCRPdfExporter.cc:547 #: ../gtk/src/Utils.cc:124 ../qt/data/ConfigDialog.ui.h:26 msgid "OK" msgstr "確定" #: ../gtk/data/ConfigDialog.ui.h:4 msgid "Output pane orientation:" msgstr "è¼¸å‡ºé¢æ¿çš„æ–¹å‘:" #: ../gtk/data/ConfigDialog.ui.h:5 msgid "Horizontal" msgstr "æ©«å‘" #: ../gtk/data/ConfigDialog.ui.h:6 msgid "Vertical" msgstr "縱å‘" #: ../gtk/data/ConfigDialog.ui.h:7 ../qt/data/ConfigDialog.ui.h:18 msgid "Query to install missing spellcheck dictionaries" msgstr "æŸ¥æ‰¾éºæ¼å®‰è£çš„æ‹¼å­—詞典" #: ../gtk/data/ConfigDialog.ui.h:8 ../qt/data/ConfigDialog.ui.h:4 msgid "Automatically check for new program versions" msgstr "自動檢查新版本" #: ../gtk/data/ConfigDialog.ui.h:9 ../qt/data/ConfigDialog.ui.h:3 msgid "Predefined language definitions:" msgstr "é è¨­èªžè¨€å®šç¾©ï¼š" #: ../gtk/data/ConfigDialog.ui.h:10 ../qt/data/ConfigDialog.ui.h:12 msgid "Additional language definitions:" msgstr "é¡å¤–語言定義:" #: ../gtk/data/ConfigDialog.ui.h:11 ../qt/data/ConfigDialog.ui.h:20 msgid "The prefix of the tesseract language data file" msgstr "tesseract 語言資料檔的å‰ç½®" #: ../gtk/data/ConfigDialog.ui.h:12 ../qt/data/ConfigDialog.ui.h:21 msgid "Prefix" msgstr "å‰ç½®" #: ../gtk/data/ConfigDialog.ui.h:13 ../qt/data/ConfigDialog.ui.h:22 msgid "The ISO 639-1 language code followed by the country code" msgstr "ISO 639-1 語言代碼並國家代碼" #: ../gtk/data/ConfigDialog.ui.h:14 ../qt/data/ConfigDialog.ui.h:23 msgid "ISO Code" msgstr "ISO 代碼" #: ../gtk/data/ConfigDialog.ui.h:15 ../qt/data/ConfigDialog.ui.h:24 msgid "The name of the language" msgstr "語言å稱" #: ../gtk/data/ConfigDialog.ui.h:16 ../qt/data/ConfigDialog.ui.h:25 msgid "Name" msgstr "å稱" #: ../gtk/data/ConfigDialog.ui.h:17 ../gtk/data/MainWindow.ui.h:48 #: ../gtk/data/OutputEditorHOCR.ui.h:2 ../gtk/src/Acquirer.cc:34 #: ../gtk/src/FileDialogs.cc:178 ../gtk/src/FileDialogs.cc:193 #: ../gtk/src/hocr/HOCRPdfExporter.cc:548 ../gtk/src/Utils.cc:154 #: ../qt/data/ConfigDialog.ui.h:27 ../qt/data/MainWindow.ui.h:13 msgid "Cancel" msgstr "å–æ¶ˆ" #: ../gtk/data/ConfigDialog.ui.h:18 ../qt/data/ConfigDialog.ui.h:5 msgid "Output pane font:" msgstr "è¼¸å‡ºé¢æ¿å­—型:" #: ../gtk/data/ConfigDialog.ui.h:19 ../qt/data/ConfigDialog.ui.h:2 msgid "Default" msgstr "é è¨­å€¼" #: ../gtk/data/ConfigDialog.ui.h:20 ../qt/data/ConfigDialog.ui.h:6 msgid "Language data locations:" msgstr "語言資料ä½ç½®ï¼š" #: ../gtk/data/ConfigDialog.ui.h:21 ../qt/data/ConfigDialog.ui.h:13 msgid "Language definitions path:" msgstr "語言定義路徑:" #: ../gtk/data/ConfigDialog.ui.h:22 ../qt/data/ConfigDialog.ui.h:28 msgid "Spelling dictionaries path:" msgstr "拼字詞典路徑:" #: ../gtk/data/ConfigDialog.ui.h:23 ../qt/data/ConfigDialog.ui.h:10 msgid "System-wide paths" msgstr "系統路徑" #: ../gtk/data/ConfigDialog.ui.h:24 ../qt/data/ConfigDialog.ui.h:11 msgid "User paths" msgstr "用戶路徑" #: ../gtk/data/ConfigDialog.ui.h:25 ../qt/data/ConfigDialog.ui.h:29 msgid "Automatically open exported documents with default application" msgstr "自動以é è¨­æ‡‰ç”¨ç¨‹å¼é–‹å•ŸåŒ¯å‡ºçš„æ–‡ä»¶" #: ../gtk/data/CrashHandler.ui.h:1 ../qt/src/CrashHandler.cc:38 msgid "Regenerate backtrace" msgstr "é‡å»º backtrace" #: ../gtk/data/CrashHandler.ui.h:3 #, fuzzy, no-c-format msgid "" "The application has crashed\n" "\n" "Apologies for the inconvenience. To help improve the application, please " "consider reporting the issue to manisandro@gmail.com. Please try to " "describe what you were doing before the application crashed. Also, include " "the information below. Thank you." msgstr "" "我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯報給manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹å¼çµ‚" "æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚" #: ../gtk/data/CrashHandler.ui.h:6 msgid "" "Tesseract has aborted\n" "\n" "Tesseract (the OCR engine) has aborted while recognizing text. This may " "occur if the used traineddatas are corrupt or incomplatible with the version " "of tesseract in use, or due to a bug in tesseract.\n" "\n" "The stacktrace below may provide additional information about where the " "crash occurred.\n" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:1 #: ../qt/data/HOCRBatchExportDialog.ui.h:1 msgid "HOCR Batch Export" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:2 #: ../gtk/data/SubstitutionsManager.ui.h:7 ../gtk/data/TessdataManager.ui.h:2 msgid "Apply" msgstr "應用" #: ../gtk/data/HOCRBatchExportDialog.ui.h:3 #: ../gtk/data/SubstitutionsManager.ui.h:8 ../gtk/data/TessdataManager.ui.h:3 msgid "Close" msgstr "關閉" #: ../gtk/data/HOCRBatchExportDialog.ui.h:4 #: ../qt/data/HOCRBatchExportDialog.ui.h:6 #, fuzzy msgid "Select source folder:" msgstr "é¸å–檔案" #: ../gtk/data/HOCRBatchExportDialog.ui.h:5 ../gtk/data/PdfExportWidget.ui.h:5 #: ../qt/data/HOCRBatchExportDialog.ui.h:7 ../qt/data/PdfExportDialog.ui.h:16 #: ../qt/data/PdfExportWidget.ui.h:15 msgid "Format:" msgstr "æ ¼å¼ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:6 #: ../qt/data/HOCRBatchExportDialog.ui.h:5 msgid "Group outputs of N lowest levels:" msgstr "" #: ../gtk/data/HOCRBatchExportDialog.ui.h:7 #: ../qt/data/HOCRBatchExportDialog.ui.h:3 #, fuzzy msgid "Input:" msgstr "輸出:" #: ../gtk/data/HOCRBatchExportDialog.ui.h:8 #: ../qt/data/HOCRBatchExportDialog.ui.h:4 #, fuzzy msgid "Output preview:" msgstr "輸出模å¼ï¼š" #: ../gtk/data/HOCRBatchExportDialog.ui.h:9 #: ../qt/data/HOCRBatchExportDialog.ui.h:2 #, fuzzy msgid "Input files" msgstr "ä¾†æºæª”å" #: ../gtk/data/HOCRBatchExportDialog.ui.h:10 #: ../qt/data/HOCRBatchExportDialog.ui.h:8 #, fuzzy msgid "Export options" msgstr "å…¶ä»–é¸é …" #: ../gtk/data/MainWindow.ui.h:1 ../qt/data/MainWindow.ui.h:40 msgid "Toggle output pane" msgstr "切æ›è¼¸å‡ºé¢æ¿" #: ../gtk/data/MainWindow.ui.h:2 ../qt/src/Ui_MainWindow.hh:66 msgid "Rotate current page" msgstr "æ—‹è½‰ç¾æœ‰æ–‡å­—" #: ../gtk/data/MainWindow.ui.h:3 ../qt/src/Ui_MainWindow.hh:67 msgid "Rotate all pages" msgstr "旋轉所有é é¢" #. Remove & from some labels which designer insists in adding #: ../gtk/data/MainWindow.ui.h:4 ../qt/data/MainWindow.ui.h:22 #: ../qt/src/Ui_MainWindow.hh:49 msgid "Sources" msgstr "來æº" #: ../gtk/data/MainWindow.ui.h:5 ../qt/src/Ui_MainWindow.hh:201 msgid "Add images" msgstr "新增圖åƒ" #: ../gtk/data/MainWindow.ui.h:6 ../qt/src/Ui_MainWindow.hh:200 msgid "Add Images" msgstr "新增圖åƒ" #: ../gtk/data/MainWindow.ui.h:7 ../qt/src/Ui_MainWindow.hh:205 msgid "Remove image from list" msgstr "從清單移除圖åƒ" #: ../gtk/data/MainWindow.ui.h:8 ../qt/src/Ui_MainWindow.hh:208 msgid "Delete image" msgstr "刪除圖åƒ" #: ../gtk/data/MainWindow.ui.h:9 ../qt/src/Ui_MainWindow.hh:211 msgid "Clear list" msgstr "清除清單" #: ../gtk/data/MainWindow.ui.h:10 ../qt/data/MainWindow.ui.h:6 msgid "Thumbnails" msgstr "" #: ../gtk/data/MainWindow.ui.h:11 ../qt/data/MainWindow.ui.h:5 msgid "Files" msgstr "檔案" #: ../gtk/data/MainWindow.ui.h:12 ../qt/data/MainWindow.ui.h:9 msgid "Device:" msgstr "è£ç½®ï¼š" #: ../gtk/data/MainWindow.ui.h:13 ../gtk/data/TessdataManager.ui.h:4 #: ../qt/data/MainWindow.ui.h:8 ../qt/src/TessdataManager.cc:55 msgid "Refresh" msgstr "æ›´æ–°" #: ../gtk/data/MainWindow.ui.h:14 ../qt/data/MainWindow.ui.h:10 msgid "Output:" msgstr "輸出:" #: ../gtk/data/MainWindow.ui.h:15 ../qt/data/MainWindow.ui.h:14 msgid "Mode:" msgstr "模å¼ï¼š" #: ../gtk/data/MainWindow.ui.h:16 ../gtk/src/hocr/HOCRPdfExportWidget.cc:49 #: ../qt/data/MainWindow.ui.h:16 ../qt/src/hocr/HOCRPdfExportWidget.cc:60 msgid "Color" msgstr "彩色" #: ../gtk/data/MainWindow.ui.h:17 ../gtk/src/hocr/HOCRPdfExportWidget.cc:52 #: ../qt/data/MainWindow.ui.h:15 ../qt/src/hocr/HOCRPdfExportWidget.cc:61 msgid "Grayscale" msgstr "ç°éšŽ" #: ../gtk/data/MainWindow.ui.h:18 ../qt/data/MainWindow.ui.h:11 msgid "Resolution:" msgstr "è§£åƒåº¦ï¼š" #: ../gtk/data/MainWindow.ui.h:19 ../qt/data/MainWindow.ui.h:12 msgid "Scan" msgstr "掃æ" #: ../gtk/data/MainWindow.ui.h:20 ../qt/data/MainWindow.ui.h:17 msgid "Source:" msgstr "來æºï¼š" #: ../gtk/data/MainWindow.ui.h:21 ../qt/data/MainWindow.ui.h:7 msgid "Acquire" msgstr "æ“·å–" #: ../gtk/data/MainWindow.ui.h:22 ../qt/data/MainWindow.ui.h:1 msgid "Brightness" msgstr "亮度" #: ../gtk/data/MainWindow.ui.h:23 ../qt/data/MainWindow.ui.h:2 msgid "Contrast" msgstr "å°æ¯”" #: ../gtk/data/MainWindow.ui.h:24 ../qt/data/MainWindow.ui.h:3 msgid "Resolution" msgstr "è§£åƒåº¦" #: ../gtk/data/MainWindow.ui.h:25 ../qt/data/MainWindow.ui.h:4 msgid "Invert colors" msgstr "å轉色版" #: ../gtk/data/MainWindow.ui.h:26 ../qt/data/MainWindow.ui.h:24 msgid "Zoom in" msgstr "放大" #: ../gtk/data/MainWindow.ui.h:27 ../qt/data/MainWindow.ui.h:26 msgid "Zoom out" msgstr "縮å°" #: ../gtk/data/MainWindow.ui.h:28 ../qt/data/MainWindow.ui.h:28 msgid "Normal size" msgstr "正常大å°" #: ../gtk/data/MainWindow.ui.h:29 ../qt/data/MainWindow.ui.h:30 msgid "Best fit" msgstr "最佳大å°" #: ../gtk/data/MainWindow.ui.h:30 ../qt/src/Ui_MainWindow.hh:60 #, fuzzy msgid "Rotate page" msgstr "旋轉所有é é¢" #: ../gtk/data/MainWindow.ui.h:31 ../qt/src/Ui_MainWindow.hh:75 msgid "Select rotation mode" msgstr "é¸å–旋轉模å¼" #: ../gtk/data/MainWindow.ui.h:32 ../gtk/data/OutputEditorHOCR.ui.h:12 #: ../gtk/data/OutputEditorText.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:72 #: ../qt/src/Ui_OutputEditorText.hh:104 msgid "Select insert mode" msgstr "é¸ç”¨æ’入模å¼" #: ../gtk/data/MainWindow.ui.h:33 ../qt/src/Ui_MainWindow.hh:102 #, fuzzy msgid "Select page" msgstr "é¸å–語言" #: ../gtk/data/MainWindow.ui.h:34 ../qt/data/MainWindow.ui.h:36 msgid "Image controls" msgstr "åœ–åƒæŽ§åˆ¶" #: ../gtk/data/MainWindow.ui.h:35 ../gtk/src/hocr/HOCRBatchExportDialog.cc:51 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:42 ../qt/src/MainWindow.cc:166 msgid "Plain text" msgstr "純文字" #: ../gtk/data/MainWindow.ui.h:36 ../qt/src/MainWindow.cc:167 msgid "hOCR, PDF" msgstr "hOCRã€PDF" #: ../gtk/data/MainWindow.ui.h:37 ../qt/data/MainWindow.ui.h:38 msgid "Autodetect layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../gtk/data/MainWindow.ui.h:38 msgid "Recognize all" msgstr "辨èªå…¨éƒ¨" #: ../gtk/data/MainWindow.ui.h:39 msgid "Select language" msgstr "é¸å–語言" #: ../gtk/data/MainWindow.ui.h:40 ../qt/data/MainWindow.ui.h:41 #, fuzzy msgid "Batch Export" msgstr "匯出" #: ../gtk/data/MainWindow.ui.h:41 msgid "A graphical frontend to tesseract-ocr" msgstr "tesseract-ocr 的圖åƒä»‹é¢" #: ../gtk/data/MainWindow.ui.h:42 ../qt/data/BatchModeDialog.ui.h:1 #, fuzzy msgid "Batch Mode" msgstr "大å°å¯«å»åˆ" #: ../gtk/data/MainWindow.ui.h:43 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../gtk/data/MainWindow.ui.h:44 ../qt/data/BatchModeDialog.ui.h:3 msgid "Existing output:" msgstr "" #: ../gtk/data/MainWindow.ui.h:45 ../qt/data/BatchModeDialog.ui.h:2 #, fuzzy msgid "Prepend page numbers to output text" msgstr "é å…ˆè¼¸å‡ºæ–‡å­—:" #: ../gtk/data/MainWindow.ui.h:46 ../qt/data/BatchModeDialog.ui.h:5 #, fuzzy msgid "Autodetect page layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../gtk/data/MainWindow.ui.h:47 ../qt/data/PageRangeDialog.ui.h:1 msgid "Page Range" msgstr "é é¢ç¯„åœ" #: ../gtk/data/MainWindow.ui.h:50 ../qt/data/PageRangeDialog.ui.h:2 msgid "Page range:" msgstr "é é¢ç¯„åœï¼š" #: ../gtk/data/MainWindow.ui.h:51 ../qt/data/PageRangeDialog.ui.h:3 msgid "Example: 1-10, 13, 14-18" msgstr "例如: 1-10, 13, 14-18" #: ../gtk/data/MainWindow.ui.h:52 ../qt/data/PageRangeDialog.ui.h:4 msgid "Recognition area:" msgstr "辨èªå€åŸŸï¼š" #: ../gtk/data/MainWindow.ui.h:53 ../gtk/src/Recognizer.cc:121 #: ../qt/data/PageRangeDialog.ui.h:5 ../qt/src/Recognizer.cc:137 msgid "Entire page" msgstr "æ•´é " #: ../gtk/data/MainWindow.ui.h:54 ../qt/data/PageRangeDialog.ui.h:6 msgid "Autodetect" msgstr "è‡ªå‹•åµæ¸¬" #: ../gtk/data/MainWindow.ui.h:55 ../qt/data/PageRangeDialog.ui.h:7 msgid "Prepend to output text:" msgstr "é å…ˆè¼¸å‡ºæ–‡å­—:" #: ../gtk/data/MainWindow.ui.h:56 ../qt/data/PageRangeDialog.ui.h:8 msgid "Source filename" msgstr "ä¾†æºæª”å" #: ../gtk/data/MainWindow.ui.h:57 ../qt/data/PageRangeDialog.ui.h:9 msgid "Source page" msgstr "來æºé " #: ../gtk/data/MainWindow.ui.h:58 ../qt/src/SourceManager.cc:172 msgid "Protected PDF" msgstr "å—ä¿è­· PDF" #: ../gtk/data/MainWindow.ui.h:59 ../qt/src/Recognizer.cc:71 msgid "Current Page" msgstr "ç¾æ™‚é é¢" #: ../gtk/data/MainWindow.ui.h:60 ../qt/src/Recognizer.cc:74 msgid "Multiple Pages..." msgstr "多é â€¦â€¦" #: ../gtk/data/MainWindow.ui.h:61 ../qt/src/Recognizer.cc:77 msgid "Batch mode..." msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:1 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Add Word" msgstr "新增字詞" #: ../gtk/data/OutputEditorHOCR.ui.h:4 ../qt/src/hocr/OutputEditorHOCR.cc:720 msgid "Enter word:" msgstr "輸入字詞:" #. Output toolbar #: ../gtk/data/OutputEditorHOCR.ui.h:5 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:63 msgid "Append new output after last page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:6 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:64 #, fuzzy msgid "Insert new output before current page" msgstr "æ—‹è½‰ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorHOCR.ui.h:7 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:94 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:95 msgid "Export to plain text" msgstr "匯出為純文字" #: ../gtk/data/OutputEditorHOCR.ui.h:8 ../qt/src/hocr/Ui_OutputEditorHOCR.hh:97 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:98 msgid "Export to PDF" msgstr "匯出至 PDF" #: ../gtk/data/OutputEditorHOCR.ui.h:9 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:100 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:101 msgid "Export to ODT" msgstr "匯出至 ODT" #: ../gtk/data/OutputEditorHOCR.ui.h:10 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:76 #, fuzzy msgid "Append document after last page" msgstr "é™„åŠ åˆ°ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorHOCR.ui.h:11 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:77 msgid "Insert document before current page" msgstr "" #: ../gtk/data/OutputEditorHOCR.ui.h:13 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:85 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:86 msgid "Open hOCR file" msgstr "開啟 hOCR 檔" #: ../gtk/data/OutputEditorHOCR.ui.h:14 ../gtk/data/OutputEditorText.ui.h:14 #: ../qt/src/Ui_OutputEditorText.hh:125 msgid "Save output" msgstr "儲存輸出" #: ../gtk/data/OutputEditorHOCR.ui.h:15 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:105 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:106 msgid "Export" msgstr "匯出" #: ../gtk/data/OutputEditorHOCR.ui.h:16 ../gtk/data/OutputEditorText.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:110 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:111 #: ../qt/src/Ui_OutputEditorText.hh:127 msgid "Clear output" msgstr "清除輸出" #: ../gtk/data/OutputEditorHOCR.ui.h:17 ../gtk/data/OutputEditorText.ui.h:17 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:113 #: ../qt/src/Ui_OutputEditorText.hh:116 msgid "Find and replace" msgstr "æœå°‹åŠå–代" #: ../gtk/data/OutputEditorHOCR.ui.h:18 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:115 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:116 msgid "Show confidence values" msgstr "顯示å¯ä¿¡åº¦" #: ../gtk/data/OutputEditorHOCR.ui.h:19 ../gtk/data/PdfExportWidget.ui.h:1 #: ../qt/data/PdfExportDialog.ui.h:2 ../qt/data/PdfExportWidget.ui.h:1 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:121 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:122 msgid "Show preview" msgstr "顯示é è¦½" #: ../gtk/data/OutputEditorHOCR.ui.h:20 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:160 msgid "Next (F3)" msgstr "下一個(F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:21 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:161 msgid "Previous (Shift+F3)" msgstr "上一個(Shift+F3)" #: ../gtk/data/OutputEditorHOCR.ui.h:22 ../gtk/src/hocr/OutputEditorHOCR.cc:978 #: ../qt/src/hocr/OutputEditorHOCR.cc:852 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:165 msgid "Expand all" msgstr "éžè¿´å±•é–‹" #: ../gtk/data/OutputEditorHOCR.ui.h:23 ../gtk/src/hocr/OutputEditorHOCR.cc:981 #: ../qt/src/hocr/OutputEditorHOCR.cc:853 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:166 msgid "Collapse all" msgstr "éžè¿´æŠ˜ç–Š" #: ../gtk/data/OutputEditorHOCR.ui.h:24 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:187 msgid "Properties" msgstr "屬性" #: ../gtk/data/OutputEditorHOCR.ui.h:25 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:191 msgid "Source" msgstr "來æº" #. Output insert mode #: ../gtk/data/OutputEditorText.ui.h:1 ../qt/src/Ui_OutputEditorText.hh:61 msgid "Append to current text" msgstr "é™„åŠ åˆ°ç¾æœ‰æ–‡å­—" #: ../gtk/data/OutputEditorText.ui.h:2 ../qt/src/Ui_OutputEditorText.hh:62 msgid "Insert at cursor" msgstr "於游標ä½ç½®æ’å…¥" #: ../gtk/data/OutputEditorText.ui.h:3 ../qt/src/Ui_OutputEditorText.hh:63 msgid "Replace current text" msgstr "å–ä»£ç¾æœ‰æ–‡å­—" #. Output postprocessing #: ../gtk/data/OutputEditorText.ui.h:4 ../qt/src/Ui_OutputEditorText.hh:71 msgid "Keep line break if..." msgstr "ä¿ç•™æ›è¡Œç¬¦è™Ÿï¼Œå¦‚果……" #: ../gtk/data/OutputEditorText.ui.h:5 ../qt/src/Ui_OutputEditorText.hh:73 msgid "Preceded by end mark (.?!)" msgstr "以終çµè™Ÿèµ·é¦–(.?!)" #: ../gtk/data/OutputEditorText.ui.h:6 ../qt/src/Ui_OutputEditorText.hh:75 msgid "Preceded or succeeded by quote" msgstr "以引號起首或çµå°¾" #: ../gtk/data/OutputEditorText.ui.h:7 ../qt/src/Ui_OutputEditorText.hh:77 msgid "Other options" msgstr "å…¶ä»–é¸é …" #: ../gtk/data/OutputEditorText.ui.h:8 ../qt/src/Ui_OutputEditorText.hh:79 msgid "Join hyphenated words" msgstr "連接斷字符號å‰å¾Œçš„å­—" #: ../gtk/data/OutputEditorText.ui.h:9 ../qt/src/Ui_OutputEditorText.hh:81 msgid "Collapse whitespace" msgstr "åˆä½µç©ºæ ¼" #: ../gtk/data/OutputEditorText.ui.h:10 ../qt/src/Ui_OutputEditorText.hh:83 msgid "Preserve paragraphs" msgstr "ä¿ç•™æ®µè½" #: ../gtk/data/OutputEditorText.ui.h:11 ../qt/src/Ui_OutputEditorText.hh:85 msgid "Visual aids" msgstr "視覺輔助" #: ../gtk/data/OutputEditorText.ui.h:12 ../qt/src/Ui_OutputEditorText.hh:87 msgid "Draw whitespace" msgstr "繪畫空格" #: ../gtk/data/OutputEditorText.ui.h:13 #, fuzzy msgid "Open file" msgstr "開啟 hOCR 檔" #: ../gtk/data/OutputEditorText.ui.h:16 ../qt/src/Ui_OutputEditorText.hh:111 msgid "Strip line breaks on selected text" msgstr "去除é¸å–文字的æ›è¡Œç¬¦è™Ÿ" #: ../gtk/data/OutputEditorText.ui.h:18 ../qt/src/Ui_OutputEditorText.hh:118 #: ../qt/src/Ui_OutputEditorText.hh:119 msgid "Undo" msgstr "復原" #: ../gtk/data/OutputEditorText.ui.h:19 ../qt/src/Ui_OutputEditorText.hh:121 #: ../qt/src/Ui_OutputEditorText.hh:122 msgid "Redo" msgstr "é‡åš" #: ../gtk/data/OutputEditorText.ui.h:21 msgid "New tab" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:2 ../qt/data/PdfExportDialog.ui.h:4 #: ../qt/data/PdfExportWidget.ui.h:3 msgid "Output mode:" msgstr "輸出模å¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:3 #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:45 #: ../qt/data/PdfExportDialog.ui.h:6 ../qt/data/PdfExportWidget.ui.h:5 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:40 msgid "PDF" msgstr "PDF" #: ../gtk/data/PdfExportWidget.ui.h:4 ../qt/data/PdfExportDialog.ui.h:7 #: ../qt/data/PdfExportWidget.ui.h:6 msgid "PDF with invisible text overlay" msgstr "包å«éš±å½¢æ–‡å­—層的 PDF" #: ../gtk/data/PdfExportWidget.ui.h:6 ../qt/data/PdfExportDialog.ui.h:17 #: ../qt/data/PdfExportWidget.ui.h:16 msgid "Compression:" msgstr "壓縮:" #: ../gtk/data/PdfExportWidget.ui.h:7 ../qt/data/PdfExportDialog.ui.h:14 #: ../qt/data/PdfExportWidget.ui.h:13 msgid "Compression quality:" msgstr "壓縮å“質:" #: ../gtk/data/PdfExportWidget.ui.h:8 ../qt/data/PdfExportDialog.ui.h:15 #: ../qt/data/PdfExportWidget.ui.h:14 msgid "DPI:" msgstr "DPI:" #: ../gtk/data/PdfExportWidget.ui.h:9 ../qt/data/PdfExportDialog.ui.h:18 #: ../qt/data/PdfExportWidget.ui.h:17 msgid "Dithering algorithm:" msgstr "éžè‰²æ¼”算法:" #: ../gtk/data/PdfExportWidget.ui.h:10 ../qt/data/PdfExportDialog.ui.h:13 #: ../qt/data/PdfExportWidget.ui.h:12 msgid "Image settings:" msgstr "圖åƒè¨­å®šï¼š" #: ../gtk/data/PdfExportWidget.ui.h:11 ../qt/data/PdfExportDialog.ui.h:25 #: ../qt/data/PdfExportWidget.ui.h:24 msgid "Uniformize line and word spacing" msgstr "統一行è·åŠå­—è·" #: ../gtk/data/PdfExportWidget.ui.h:12 ../qt/data/PdfExportDialog.ui.h:21 #: ../qt/data/PdfExportWidget.ui.h:20 msgid "Override font family:" msgstr "改寫字型:" #: ../gtk/data/PdfExportWidget.ui.h:13 ../qt/data/PdfExportDialog.ui.h:27 #: ../qt/data/PdfExportWidget.ui.h:26 msgid "Fallback font family:" msgstr "後備字型:" #: ../gtk/data/PdfExportWidget.ui.h:14 ../qt/data/PdfExportDialog.ui.h:20 #: ../qt/data/PdfExportWidget.ui.h:19 msgid "Override font size:" msgstr "改寫字型大å°ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:15 ../qt/data/PdfExportDialog.ui.h:23 #: ../qt/data/PdfExportWidget.ui.h:22 msgid "Font scaling:" msgstr "字型縮放:" #: ../gtk/data/PdfExportWidget.ui.h:16 ../qt/data/PdfExportDialog.ui.h:26 #: ../qt/data/PdfExportWidget.ui.h:25 msgid "pt" msgstr "pt" #: ../gtk/data/PdfExportWidget.ui.h:17 ../qt/data/PdfExportDialog.ui.h:22 #: ../qt/data/PdfExportWidget.ui.h:21 msgid "Preserve spaces wider than:" msgstr "ä¿ç•™ç©ºæ ¼å¤§æ–¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:18 ../qt/data/PdfExportDialog.ui.h:24 #: ../qt/data/PdfExportWidget.ui.h:23 msgid "characters" msgstr "å­—å…ƒ" #: ../gtk/data/PdfExportWidget.ui.h:19 ../qt/data/PdfExportDialog.ui.h:28 #: ../qt/data/PdfExportWidget.ui.h:27 msgid "Sanitize hyphens before line breaks" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:20 ../qt/data/PdfExportDialog.ui.h:19 #: ../qt/data/PdfExportWidget.ui.h:18 msgid "Text settings:" msgstr "文字檔設定:" #: ../gtk/data/PdfExportWidget.ui.h:21 ../qt/data/PdfExportDialog.ui.h:10 #: ../qt/data/PdfExportWidget.ui.h:9 msgid "Paper size:" msgstr "紙張尺寸:" #: ../gtk/data/PdfExportWidget.ui.h:22 ../qt/data/PdfExportDialog.ui.h:11 #: ../qt/data/PdfExportWidget.ui.h:10 msgid "Width" msgstr "闊度" #: ../gtk/data/PdfExportWidget.ui.h:23 ../qt/data/PdfExportDialog.ui.h:12 #: ../qt/data/PdfExportWidget.ui.h:11 msgid "Height" msgstr "高度" #: ../gtk/data/PdfExportWidget.ui.h:24 ../qt/data/PdfExportDialog.ui.h:29 #: ../qt/data/PdfExportWidget.ui.h:28 msgid "Treat image sources as having true DPI:" msgstr "" #: ../gtk/data/PdfExportWidget.ui.h:25 ../qt/data/PdfExportDialog.ui.h:3 #: ../qt/data/PdfExportWidget.ui.h:2 msgid "Basic" msgstr "基本" #: ../gtk/data/PdfExportWidget.ui.h:26 ../qt/data/PdfExportDialog.ui.h:31 #: ../qt/data/PdfExportWidget.ui.h:30 msgid "PDF version:" msgstr "PDF 版本:" #: ../gtk/data/PdfExportWidget.ui.h:27 ../qt/data/PdfExportDialog.ui.h:33 #: ../qt/data/PdfExportWidget.ui.h:32 msgid "Password:" msgstr "密碼:" #: ../gtk/data/PdfExportWidget.ui.h:28 ../qt/data/PdfExportDialog.ui.h:34 #: ../qt/data/PdfExportWidget.ui.h:33 msgid "Confirm password:" msgstr "確èªå¯†ç¢¼ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:29 ../qt/data/PdfExportDialog.ui.h:32 #: ../qt/data/PdfExportWidget.ui.h:31 msgid "Encryption (optional):" msgstr "åŠ å¯†ï¼ˆé¸æ“‡æ€§ï¼‰ï¼š" #: ../gtk/data/PdfExportWidget.ui.h:30 ../qt/data/PdfExportDialog.ui.h:36 #: ../qt/data/PdfExportWidget.ui.h:35 msgid "Author:" msgstr "作者:" #: ../gtk/data/PdfExportWidget.ui.h:31 ../qt/data/PdfExportDialog.ui.h:38 #: ../qt/data/PdfExportWidget.ui.h:37 msgid "Title:" msgstr "å稱:" #: ../gtk/data/PdfExportWidget.ui.h:32 ../qt/data/PdfExportDialog.ui.h:40 #: ../qt/data/PdfExportWidget.ui.h:39 msgid "Subject:" msgstr "主題:" #: ../gtk/data/PdfExportWidget.ui.h:33 ../qt/data/PdfExportDialog.ui.h:37 #: ../qt/data/PdfExportWidget.ui.h:36 msgid "Creator:" msgstr "創建者:" #: ../gtk/data/PdfExportWidget.ui.h:34 ../qt/data/PdfExportDialog.ui.h:39 #: ../qt/data/PdfExportWidget.ui.h:38 msgid "Producer:" msgstr "發行者:" #: ../gtk/data/PdfExportWidget.ui.h:35 ../qt/data/PdfExportDialog.ui.h:41 #: ../qt/data/PdfExportWidget.ui.h:40 msgid "Keywords:" msgstr "é—œéµå­—:" #: ../gtk/data/PdfExportWidget.ui.h:36 ../qt/data/PdfExportDialog.ui.h:35 #: ../qt/data/PdfExportWidget.ui.h:34 msgid "Additional information (optional):" msgstr "附加的資訊(å¯é¸):" #: ../gtk/data/PdfExportWidget.ui.h:37 ../qt/data/PdfExportDialog.ui.h:42 #: ../qt/data/PdfExportWidget.ui.h:41 msgid "Import from current source" msgstr "åŒ¯å…¥ç¾æœ‰ä¾†æº" #: ../gtk/data/PdfExportWidget.ui.h:38 ../qt/data/PdfExportDialog.ui.h:30 #: ../qt/data/PdfExportWidget.ui.h:29 msgid "Advanced" msgstr "進階" #: ../gtk/data/SearchReplaceFrame.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:4 msgid "Find" msgstr "尋找" #: ../gtk/data/SearchReplaceFrame.ui.h:2 ../qt/data/SearchReplaceFrame.ui.h:2 msgid "Replace" msgstr "å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:3 ../qt/data/SearchReplaceFrame.ui.h:3 msgid "Replace all" msgstr "全部å–代" #: ../gtk/data/SearchReplaceFrame.ui.h:4 ../qt/data/SearchReplaceFrame.ui.h:5 msgid "Find previous" msgstr "尋找å‰ä¸€å€‹" #: ../gtk/data/SearchReplaceFrame.ui.h:5 ../qt/data/SearchReplaceFrame.ui.h:6 msgid "Find next" msgstr "尋找下一個" #: ../gtk/data/SearchReplaceFrame.ui.h:6 ../qt/data/SearchReplaceFrame.ui.h:7 msgid "Match case" msgstr "大å°å¯«å»åˆ" #: ../gtk/data/SearchReplaceFrame.ui.h:7 #: ../gtk/data/SubstitutionsManager.ui.h:1 ../qt/data/SearchReplaceFrame.ui.h:1 #: ../qt/src/SubstitutionsManager.cc:36 msgid "Substitutions" msgstr "替æ›å€¼" #: ../gtk/data/SelectionMenu.ui.h:1 ../qt/src/DisplayerToolSelect.cc:239 msgid "Delete" msgstr "刪除" #: ../gtk/data/SelectionMenu.ui.h:2 ../qt/src/DisplayerToolSelect.cc:225 msgid "Order:" msgstr "排åºï¼š" #: ../gtk/data/SelectionMenu.ui.h:3 ../gtk/src/hocr/DisplayerToolHOCR.cc:29 #: ../qt/src/DisplayerToolSelect.cc:240 ../qt/src/hocr/DisplayerToolHOCR.cc:31 msgid "Recognize" msgstr "辨èª" #: ../gtk/data/SelectionMenu.ui.h:4 ../qt/src/DisplayerToolSelect.cc:241 msgid "Recognize to clipboard" msgstr "辨èªè‡³å‰ªè²¼ç°¿" #: ../gtk/data/SelectionMenu.ui.h:5 ../qt/src/DisplayerToolSelect.cc:242 msgid "Save as image" msgstr "儲存為圖åƒ" #: ../gtk/data/SubstitutionsManager.ui.h:2 ../qt/src/SubstitutionsManager.cc:38 #: ../qt/src/SubstitutionsManager.cc:39 ../qt/src/Ui_OutputEditorText.hh:57 msgid "Open" msgstr "開啟" #: ../gtk/data/SubstitutionsManager.ui.h:3 ../gtk/src/Utils.cc:133 #: ../qt/src/SubstitutionsManager.cc:41 ../qt/src/SubstitutionsManager.cc:42 msgid "Save" msgstr "儲存" #: ../gtk/data/SubstitutionsManager.ui.h:4 ../qt/src/SubstitutionsManager.cc:44 #: ../qt/src/SubstitutionsManager.cc:45 msgid "Clear" msgstr "清除" #: ../gtk/data/SubstitutionsManager.ui.h:5 ../qt/data/ConfigDialog.ui.h:16 #: ../qt/src/SubstitutionsManager.cc:47 ../qt/src/SubstitutionsManager.cc:48 msgid "Add" msgstr "新增" #: ../gtk/data/SubstitutionsManager.ui.h:6 #: ../gtk/src/hocr/OutputEditorHOCR.cc:974 ../qt/data/ConfigDialog.ui.h:17 #: ../qt/src/hocr/OutputEditorHOCR.cc:849 ../qt/src/SubstitutionsManager.cc:50 #: ../qt/src/SubstitutionsManager.cc:51 msgid "Remove" msgstr "刪除" #: ../gtk/data/TessdataManager.ui.h:1 ../qt/src/TessdataManager.cc:45 msgid "Tessdata Manager" msgstr "Tessdata 管ç†å“¡" #: ../gtk/data/TessdataManager.ui.h:5 ../qt/src/TessdataManager.cc:47 msgid "Manage installed languages:" msgstr "管ç†å·²å®‰è£çš„語言:" #: ../gtk/src/Acquirer.cc:79 ../qt/src/Acquirer.cc:70 msgid "scan.png" msgstr "scan.png" #: ../gtk/src/Acquirer.cc:91 ../qt/src/Acquirer.cc:85 msgid "Images" msgstr "圖åƒ" #: ../gtk/src/Acquirer.cc:92 ../qt/src/Acquirer.cc:86 msgid "Choose Output Filename..." msgstr "é¸å–輸出檔å……" #: ../gtk/src/Acquirer.cc:106 ../qt/src/Acquirer.cc:100 msgid "Failed to initialize the scanning backend." msgstr "無法åˆå§‹åŒ–æŽƒææœå‹™ã€‚" #: ../gtk/src/Acquirer.cc:115 ../qt/src/Acquirer.cc:106 msgid "Scan failed" msgstr "無法摺掃æ" #: ../gtk/src/Acquirer.cc:133 ../qt/src/Acquirer.cc:122 msgid "No scanners were detected." msgstr "嵿¸¬ä¸åˆ°æŽƒæå™¨ã€‚" #: ../gtk/src/Acquirer.cc:150 ../gtk/src/Acquirer.cc:167 #: ../qt/src/Acquirer.cc:136 ../qt/src/Acquirer.cc:153 msgid "Starting scan..." msgstr "開始掃æâ€¦â€¦" #: ../gtk/src/Acquirer.cc:163 ../qt/src/Acquirer.cc:149 msgid "Opening device..." msgstr "開啟è£ç½®â€¦â€¦" #: ../gtk/src/Acquirer.cc:165 ../qt/src/Acquirer.cc:151 msgid "Setting options..." msgstr "設定é¸é ………" #: ../gtk/src/Acquirer.cc:169 ../qt/src/Acquirer.cc:155 msgid "Getting parameters..." msgstr "ç²å–åƒæ•¸â€¦â€¦" #: ../gtk/src/Acquirer.cc:171 ../qt/src/Acquirer.cc:157 msgid "Transferring data..." msgstr "轉輸數據……" #: ../gtk/src/Acquirer.cc:178 ../qt/src/Acquirer.cc:164 msgid "Canceling scan..." msgstr "å–æ¶ˆæŽƒæâ€¦â€¦" #: ../gtk/src/Config.cc:50 ../gtk/src/Config.cc:60 #: ../qt/data/ConfigDialog.ui.h:7 msgid "Filename prefix" msgstr "檔åå‰ç½®" #: ../gtk/src/Config.cc:51 ../gtk/src/Config.cc:61 #: ../qt/data/ConfigDialog.ui.h:8 msgid "Code" msgstr "代碼" #: ../gtk/src/Config.cc:52 ../gtk/src/Config.cc:62 #: ../qt/data/ConfigDialog.ui.h:9 msgid "Native name" msgstr "原生å稱" #: ../gtk/src/Config.cc:119 ../qt/src/Config.cc:104 msgid "Script" msgstr "腳本" #: ../gtk/src/CrashHandler.cc:25 ../gtk/src/CrashHandler.cc:41 #: ../qt/src/CrashHandler.cc:36 msgid "Crash Handler" msgstr "異常終止處ç†å™¨" #: ../gtk/src/CrashHandler.cc:43 ../qt/src/CrashHandler.cc:31 msgid "Your work has been saved under %1." msgstr "你的工作已儲存於 %1。" #: ../gtk/src/CrashHandler.cc:45 ../qt/src/CrashHandler.cc:33 msgid "There was no unsaved work." msgstr "沒有未儲存的工作。" #: ../gtk/src/CrashHandler.cc:106 ../qt/src/CrashHandler.cc:62 #, fuzzy msgid "Failed to obtain backtrace. Is GDB installed?" msgstr "無法å–å¾— backtraceã€‚å·²å®‰è£ gdb 嗎?" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "Failed to load image" msgstr "無法載入圖åƒ" #: ../gtk/src/Displayer.cc:254 ../qt/src/Displayer.cc:200 msgid "" "The file might not be an image or be corrupt:\n" "%1" msgstr "" "該檔案å¯èƒ½ä¸æ˜¯åœ–åƒæˆ–已被æå£žï¼š\n" "%1" #: ../gtk/src/Displayer.cc:770 ../qt/src/Displayer.cc:605 #, fuzzy msgid "Page %1" msgstr "é é¢ï¼š%1" #: ../gtk/src/DisplayerToolSelect.cc:138 ../qt/src/DisplayerToolSelect.cc:135 msgid "PNG Images" msgstr "PNG 圖åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "Save Selection Image" msgstr "儲存é¸å–圖åƒ" #: ../gtk/src/DisplayerToolSelect.cc:139 ../qt/src/DisplayerToolSelect.cc:135 msgid "selection.png" msgstr "selection.png" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize all" msgstr "辨èªå…¨éƒ¨" #: ../gtk/src/DisplayerToolSelect.cc:146 ../qt/src/DisplayerToolSelect.cc:142 msgid "Recognize selection" msgstr "辨èªé¸å–å€" #: ../gtk/src/DisplayerToolSelect.cc:186 ../qt/src/DisplayerToolSelect.cc:182 msgid "Performing layout analysis" msgstr "進行佈局分æž" #: ../gtk/src/FileTreeModel.cc:62 ../qt/src/FileTreeModel.cc:49 msgid "Temporary files" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:48 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:41 msgid "ODT" msgstr "" #: ../gtk/src/hocr/HOCRBatchExportDialog.cc:106 ../gtk/src/SourceManager.cc:268 #: ../qt/src/hocr/HOCRBatchExportDialog.cc:73 ../qt/src/SourceManager.cc:279 #, fuzzy msgid "Select folder..." msgstr "é¸å–檔案" #: ../gtk/src/hocr/HOCRDocument.cc:68 ../qt/src/hocr/HOCRDocument.cc:71 msgid "No suggestions" msgstr "沒有建議" #: ../gtk/src/hocr/HOCRDocument.cc:74 ../qt/src/hocr/HOCRDocument.cc:75 msgid "Add to dictionary" msgstr "新增至詞典" #: ../gtk/src/hocr/HOCRDocument.cc:80 ../qt/src/hocr/HOCRDocument.cc:79 msgid "Ignore word" msgstr "忽略字詞" #: ../gtk/src/hocr/HOCRDocument.cc:800 ../gtk/src/hocr/HOCRDocument.cc:839 #: ../gtk/src/hocr/OutputEditorHOCR.cc:351 ../qt/src/hocr/HOCRDocument.cc:692 #: ../qt/src/hocr/HOCRDocument.cc:729 ../qt/src/hocr/OutputEditorHOCR.cc:312 msgid "Page" msgstr "é é¢" #: ../gtk/src/hocr/HOCRDocument.cc:802 ../qt/src/hocr/HOCRDocument.cc:694 msgid "Text block" msgstr "文字å€å¡Š" #: ../gtk/src/hocr/HOCRDocument.cc:804 ../gtk/src/hocr/OutputEditorHOCR.cc:357 #: ../qt/src/hocr/HOCRDocument.cc:696 ../qt/src/hocr/OutputEditorHOCR.cc:314 msgid "Paragraph" msgstr "段è½" #: ../gtk/src/hocr/HOCRDocument.cc:806 ../qt/src/hocr/HOCRDocument.cc:698 msgid "Textline" msgstr "文字" #: ../gtk/src/hocr/HOCRDocument.cc:810 ../qt/src/hocr/HOCRDocument.cc:702 msgid "Graphic" msgstr "圖åƒ" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCROdtExporter.cc:49 #: ../qt/src/hocr/HOCRPdfExporter.cc:137 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "Export failed" msgstr "無法匯出" #: ../gtk/src/hocr/HOCROdtExporter.cc:63 ../gtk/src/hocr/HOCROdtExporter.cc:328 #: ../qt/src/hocr/HOCROdtExporter.cc:49 msgid "The ODT export failed: unable to write output file." msgstr "無法匯出 ODT:無法建立輸出檔。" #: ../gtk/src/hocr/HOCROdtExporter.cc:322 ../qt/src/hocr/HOCROdtExporter.cc:242 msgid "Exporting to ODT..." msgstr "匯出至 ODT..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:70 ../qt/src/hocr/HOCRPdfExporter.cc:80 msgid "The operation was cancelled" msgstr "已喿¶ˆæ“作" #: ../gtk/src/hocr/HOCRPdfExporter.cc:117 ../qt/src/hocr/HOCRPdfExporter.cc:126 msgid "Failed to render page %1" msgstr "無法繪畫第 %1 é " #: ../gtk/src/hocr/HOCRPdfExporter.cc:124 ../qt/src/hocr/HOCRPdfExporter.cc:133 msgid "Exporting to PDF..." msgstr "匯出至 PDF..." #: ../gtk/src/hocr/HOCRPdfExporter.cc:129 ../qt/src/hocr/HOCRPdfExporter.cc:137 msgid "The PDF export failed: %1." msgstr "無法匯出 PDF:%1。" #: ../gtk/src/hocr/HOCRPdfExporter.cc:397 ../qt/src/hocr/HOCRPdfExporter.cc:428 msgid "The PDF library could not load the font '%1'." msgstr "PDF 程å¼åº«ä¸æ”¯æ´æ‰€é¸å–å­—åž‹ '%1'。" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:55 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:62 msgid "Monochrome" msgstr "黑白" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:64 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:64 msgid "Threshold (closest color)" msgstr "定é™ï¼ˆæœ€æŽ¥è¿‘é¡è‰²ï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:67 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:65 msgid "Diffuse" msgstr "æ“´æ•£" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:76 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:66 msgid "Zip (lossless)" msgstr "Zip(無æï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:80 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:67 msgid "CCITT Group 4 (lossless)" msgstr "CCITT 第 4 組(無æï¼‰" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:84 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:68 msgid "Jpeg (lossy)" msgstr "Jpeg(失真)" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:97 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:74 msgid "Same as source" msgstr "與來æºç›¸åŒ" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:100 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:75 msgid "Custom" msgstr "自訂" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:114 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:71 msgid "cm" msgstr "公分" #: ../gtk/src/hocr/HOCRPdfExportWidget.cc:117 #: ../qt/src/hocr/HOCRPdfExportWidget.cc:72 msgid "in" msgstr "在" #: ../gtk/src/hocr/HOCRTextExporter.cc:31 ../qt/src/hocr/HOCRTextExporter.cc:34 msgid "The text export failed: unable to write output file." msgstr "無法匯出文字檔:無法建立輸出檔。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:354 #: ../qt/src/hocr/OutputEditorHOCR.cc:313 msgid "Block" msgstr "å€å¡Š" #: ../gtk/src/hocr/OutputEditorHOCR.cc:360 #: ../qt/src/hocr/OutputEditorHOCR.cc:315 msgid "Line" msgstr "ç·šæ¢" #: ../gtk/src/hocr/OutputEditorHOCR.cc:363 #: ../qt/src/hocr/OutputEditorHOCR.cc:316 msgid "Word" msgstr "單字" #: ../gtk/src/hocr/OutputEditorHOCR.cc:366 #: ../qt/src/hocr/OutputEditorHOCR.cc:317 msgid "Misspelled word" msgstr "錯拼字詞" #: ../gtk/src/hocr/OutputEditorHOCR.cc:369 #: ../qt/src/hocr/OutputEditorHOCR.cc:318 #, fuzzy msgid "Low confidence word" msgstr "顯示å¯ä¿¡åº¦" #: ../gtk/src/hocr/OutputEditorHOCR.cc:538 #: ../qt/src/hocr/OutputEditorHOCR.cc:420 msgid "" "The following pages could not be processed:\n" "%1" msgstr "" "無法處ç†ä¸‹åˆ—é é¢ï¼š\n" "%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:421 msgid "Recognition errors" msgstr "è¾¨èªæ™‚出ç¾éŒ¯èª¤" #: ../gtk/src/hocr/OutputEditorHOCR.cc:706 #: ../qt/src/hocr/OutputEditorHOCR.cc:180 #: ../qt/src/hocr/OutputEditorHOCR.cc:621 #: ../qt/src/hocr/OutputEditorHOCR.cc:633 msgid "Multiple values" msgstr "多個數值" #. Merging allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:901 #: ../qt/src/hocr/OutputEditorHOCR.cc:781 msgid "Merge" msgstr "åˆä½µ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:908 #: ../gtk/src/hocr/OutputEditorHOCR.cc:966 #: ../qt/src/hocr/OutputEditorHOCR.cc:783 #: ../qt/src/hocr/OutputEditorHOCR.cc:847 msgid "Split from parent" msgstr "從上層分拆出來" #. Swapping allowed #: ../gtk/src/hocr/OutputEditorHOCR.cc:918 #: ../qt/src/hocr/OutputEditorHOCR.cc:787 msgid "Swap" msgstr "å°æ›" #: ../gtk/src/hocr/OutputEditorHOCR.cc:941 #: ../qt/src/hocr/OutputEditorHOCR.cc:832 msgid "Add graphic region" msgstr "新增圖åƒå€åŸŸ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:944 #: ../qt/src/hocr/OutputEditorHOCR.cc:833 msgid "Add text block" msgstr "新增文字å€å¡Š" #: ../gtk/src/hocr/OutputEditorHOCR.cc:948 #: ../qt/src/hocr/OutputEditorHOCR.cc:835 msgid "Add paragraph" msgstr "新增段è½" #: ../gtk/src/hocr/OutputEditorHOCR.cc:952 #: ../qt/src/hocr/OutputEditorHOCR.cc:837 msgid "Add line" msgstr "新增線æ¢" #: ../gtk/src/hocr/OutputEditorHOCR.cc:956 #: ../qt/src/hocr/OutputEditorHOCR.cc:839 msgid "Add word" msgstr "新增字詞" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1015 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1098 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "hOCR HTML Files" msgstr "hOCR HTML 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1016 #: ../qt/src/hocr/OutputEditorHOCR.cc:914 msgid "Open hOCR File" msgstr "開啟 hOCR 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1064 ../gtk/src/OutputEditorText.cc:466 #: ../gtk/src/OutputEditorText.cc:516 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:954 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 #, fuzzy msgid "" "The following files could not be opened:\n" "%1" msgstr "無法開啟下列檔案:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1067 #: ../qt/src/hocr/OutputEditorHOCR.cc:957 #, fuzzy msgid "" "The following files are not valid hOCR HTML:\n" "%1" msgstr "此檔案似乎並ä¸åŒ…嫿œ‰æ•ˆçš„ hOCR HTML:%1" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1070 ../gtk/src/OutputEditorText.cc:467 #: ../gtk/src/OutputEditorText.cc:517 ../gtk/src/SourceManager.cc:170 #: ../qt/src/hocr/OutputEditorHOCR.cc:960 ../qt/src/OutputEditorText.cc:394 #: ../qt/src/SourceManager.cc:154 msgid "Unable to open files" msgstr "無法開啟檔案" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1095 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1161 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1197 #: ../gtk/src/hocr/OutputEditorHOCR.cc:1227 #: ../qt/src/hocr/OutputEditorHOCR.cc:987 #: ../qt/src/hocr/OutputEditorHOCR.cc:1049 #: ../qt/src/hocr/OutputEditorHOCR.cc:1083 #: ../qt/src/hocr/OutputEditorHOCR.cc:1112 msgid "output" msgstr "輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1099 #: ../qt/src/hocr/OutputEditorHOCR.cc:990 msgid "Save hOCR Output..." msgstr "儲存 hOCR 輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Failed to save output" msgstr "無法儲存輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1106 ../gtk/src/OutputEditorText.cc:539 #: ../qt/src/hocr/OutputEditorHOCR.cc:997 ../qt/src/OutputEditorText.cc:417 msgid "Check that you have writing permissions in the selected folder." msgstr "請檢查你在所é¸å–è³‡æ–™å¤¾æ“æœ‰å¯«å…¥æ¬Šé™ã€‚" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1164 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "OpenDocument Text Documents" msgstr "OpenDocument 文件檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1165 #: ../qt/src/hocr/OutputEditorHOCR.cc:1052 msgid "Save ODT Output..." msgstr "儲存 ODT 輸出..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1202 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "PDF Files" msgstr "PDF 檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1203 #: ../qt/src/hocr/OutputEditorHOCR.cc:1088 msgid "Save PDF Output..." msgstr "儲存 PDF 輸出……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Invalid Output" msgstr "無效輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1208 #: ../qt/src/hocr/OutputEditorHOCR.cc:1093 msgid "Cannot overwrite a file which is a source image of this document." msgstr "無法改寫此文件的來æºåœ–åƒæª”。" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1230 ../gtk/src/OutputEditorText.cc:457 #: ../gtk/src/OutputEditorText.cc:531 ../qt/src/hocr/OutputEditorHOCR.cc:1115 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/OutputEditorText.cc:410 msgid "Text Files" msgstr "文字檔" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1231 #: ../qt/src/hocr/OutputEditorHOCR.cc:1115 msgid "Save Text Output..." msgstr "儲存文字輸出..." #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Output not saved" msgstr "未儲存輸出" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1247 #: ../qt/src/hocr/OutputEditorHOCR.cc:1134 msgid "Save output before proceeding?" msgstr "先儲存輸出å†ç¹¼çºŒï¼Ÿ" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1367 ../gtk/src/OutputEditorText.cc:357 #: ../qt/src/hocr/OutputEditorHOCR.cc:1232 ../qt/src/OutputEditorText.cc:253 msgid "Replacing..." msgstr "å–代中……" #: ../gtk/src/hocr/OutputEditorHOCR.cc:1392 ../gtk/src/OutputEditorText.cc:373 #: ../qt/src/hocr/OutputEditorHOCR.cc:1255 ../qt/src/OutputEditorText.cc:265 msgid "Applying substitutions..." msgstr "正在套用替æ›å€¼â€¦â€¦" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:243 #: ../qt/src/hocr/HOCRProofReadWidget.cc:230 msgid "Keyboard shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:264 #: ../qt/src/hocr/HOCRProofReadWidget.cc:242 msgid "Lines before:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:272 #: ../qt/src/hocr/HOCRProofReadWidget.cc:256 msgid "Lines after:" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:529 #: ../qt/src/hocr/HOCRProofReadWidget.cc:457 msgid "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to " "dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge " "with previous word
      Ctrl+Shift+MMerge with next " "word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:556 #: ../qt/src/hocr/HOCRProofReadWidget.cc:478 msgid "Keyboard Shortcuts" msgstr "" #: ../gtk/src/hocr/wip_proofreadwidget/HOCRProofReadWidget.cc:571 #: ../qt/src/hocr/HOCRProofReadWidget.cc:493 msgid "Confidence: %1" msgstr "" #: ../gtk/src/MainWindow.cc:135 ../qt/src/MainWindow.cc:342 msgid "Using tesseract" msgstr "採用 tesseract" #: ../gtk/src/MainWindow.cc:184 ../qt/src/MainWindow.cc:209 msgid "Select an image to begin..." msgstr "è«‹é¸å–圖åƒä½œç‚ºé–‹å§‹â€¦â€¦" #: ../gtk/src/MainWindow.cc:329 ../qt/src/MainWindow.cc:325 #, fuzzy msgid "Multiple sources (%1)" msgstr "多個來æº" #: ../gtk/src/MainWindow.cc:331 ../qt/src/MainWindow.cc:327 msgid "Ready" msgstr "就緒" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "New version" msgstr "新版本" #: ../gtk/src/MainWindow.cc:483 ../qt/src/MainWindow.cc:464 msgid "gImageReader %1 is available" msgstr "gImageReader %1 å·²é¢ä¸–" #: ../gtk/src/MainWindow.cc:484 ../qt/src/MainWindow.cc:465 msgid "Download" msgstr "下載" #: ../gtk/src/MainWindow.cc:485 ../qt/src/MainWindow.cc:466 msgid "Changelog" msgstr "修改日誌" #: ../gtk/src/MainWindow.cc:486 ../qt/src/MainWindow.cc:467 msgid "Don't notify again" msgstr "ä¸å†æç¤º" #: ../gtk/src/MainWindow.cc:507 ../qt/src/MainWindow.cc:515 msgid "Don't show again" msgstr "ä¸å†é¡¯ç¤º" #: ../gtk/src/MainWindow.cc:508 ../gtk/src/MainWindow.cc:521 #: ../qt/src/MainWindow.cc:516 msgid "Install" msgstr "安è£" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "Spelling dictionary missing" msgstr "éºæ¼æ‹¼å­—詞典" #: ../gtk/src/MainWindow.cc:528 ../qt/src/MainWindow.cc:528 msgid "The spellcheck dictionary for %1 is not installed" msgstr "æœªå®‰è£ %1 的拼字詞典" #: ../gtk/src/MainWindow.cc:535 ../gtk/src/MainWindow.cc:564 #: ../qt/src/MainWindow.cc:534 msgid "Installing spelling dictionary for '%1'" msgstr "æ­£åœ¨å®‰è£ '%1' 的拼字詞典" #: ../gtk/src/MainWindow.cc:556 ../gtk/src/MainWindow.cc:577 #: ../gtk/src/MainWindow.cc:585 ../gtk/src/MainWindow.cc:633 #: ../gtk/src/MainWindow.cc:638 ../gtk/src/TessdataManager.cc:60 #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:339 #: ../qt/src/MainWindow.cc:553 ../qt/src/MainWindow.cc:566 #: ../qt/src/MainWindow.cc:575 ../qt/src/MainWindow.cc:621 #: ../qt/src/MainWindow.cc:626 ../qt/src/TessdataManager.cc:70 #: ../qt/src/TessdataManager.cc:80 ../qt/src/TessdataManager.cc:288 msgid "Error" msgstr "錯誤" #: ../gtk/src/MainWindow.cc:556 ../qt/src/MainWindow.cc:553 msgid "Failed to install spelling dictionary: %1" msgstr "ç„¡æ³•å®‰è£æ‹¼å­—詞典:%1" #: ../gtk/src/MainWindow.cc:577 ../qt/src/MainWindow.cc:566 msgid "Failed to create directory for spelling dictionaries." msgstr "無法建立拼字詞典目錄。" #: ../gtk/src/MainWindow.cc:585 ../qt/src/MainWindow.cc:575 msgid "Could not read %1: %2." msgstr "ç„¡æ³•è®€å– %1:%2。" #: ../gtk/src/MainWindow.cc:612 ../qt/src/MainWindow.cc:601 msgid "Downloading '%1'..." msgstr "正在下載 '%1'……" #: ../gtk/src/MainWindow.cc:633 ../qt/src/MainWindow.cc:621 msgid "" "The following dictionaries could not be downloaded:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "無法下載或刪除下列詞典:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../gtk/src/MainWindow.cc:636 ../qt/src/MainWindow.cc:624 msgid "Dictionaries installed" msgstr "已安è£è©žå…¸" #: ../gtk/src/MainWindow.cc:636 msgid "" "The following dictionaries were installed:\n" "%1" msgstr "" "已安è£ä¸‹åˆ—詞典:\n" "%1" #: ../gtk/src/MainWindow.cc:638 ../qt/src/MainWindow.cc:626 msgid "No spelling dictionaries found for '%1'." msgstr "找ä¸åˆ° '%1' 的拼字詞典。" #: ../gtk/src/OutputEditorText.cc:38 ../qt/src/OutputEditorText.cc:42 #, fuzzy msgid "Page: %1\n" msgstr "é é¢ï¼š%1" #: ../gtk/src/OutputEditorText.cc:129 msgid "Close document" msgstr "" #: ../gtk/src/OutputEditorText.cc:133 #, fuzzy msgid "Untitled %1" msgstr "已貼上 %1" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Document not saved" msgstr "未儲存輸出" #: ../gtk/src/OutputEditorText.cc:188 ../qt/src/OutputEditorText.cc:156 #, fuzzy msgid "Save document before proceeding?" msgstr "先儲存輸出å†ç¹¼çºŒï¼Ÿ" #: ../gtk/src/OutputEditorText.cc:298 ../qt/src/OutputEditorText.cc:238 msgid "Stripping line breaks..." msgstr "去除æ›è¡Œç¬¦è™Ÿâ€¦â€¦" #: ../gtk/src/OutputEditorText.cc:309 msgid "No highlight" msgstr "" #: ../gtk/src/OutputEditorText.cc:329 msgid "Highlight mode" msgstr "" #: ../gtk/src/OutputEditorText.cc:334 msgid "Check spelling" msgstr "檢查拼字" #: ../gtk/src/OutputEditorText.cc:364 ../qt/src/OutputEditorText.cc:256 msgid "%1 occurrences replaced" msgstr "" #: ../gtk/src/OutputEditorText.cc:412 ../qt/src/OutputEditorText.cc:301 msgid "File: %1" msgstr "檔案:%1" #: ../gtk/src/OutputEditorText.cc:415 ../qt/src/OutputEditorText.cc:304 msgid "Page: %1" msgstr "é é¢ï¼š%1" #: ../gtk/src/OutputEditorText.cc:428 ../gtk/src/Recognizer.cc:243 #: ../qt/src/Recognizer.cc:259 msgid "" "\n" "[Failed to recognize page %1]\n" msgstr "" "\n" "[無法辨èªç¬¬ %1 é ]\n" #: ../gtk/src/OutputEditorText.cc:458 ../gtk/src/SourceManager.cc:297 #: ../qt/src/OutputEditorText.cc:342 ../qt/src/SourceManager.cc:269 msgid "Select Files" msgstr "é¸å–檔案" #: ../gtk/src/OutputEditorText.cc:532 ../qt/src/OutputEditorText.cc:410 msgid "Save Output..." msgstr "儲存輸出……" #: ../gtk/src/OutputEditorText.cc:584 msgid "Unsaved documents" msgstr "" #: ../gtk/src/OutputEditorText.cc:585 ../qt/src/OutputEditorText.cc:462 msgid "" "The following documents have unsaved changes. Which documents do you want to " "save before proceeding?" msgstr "" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "No languages available" msgstr "沒有å¯ç”¨èªžè¨€" #: ../gtk/src/RecognitionMenu.cc:100 ../qt/src/RecognitionMenu.cc:76 msgid "" "No tesseract languages are available for use. Recognition will not work." msgstr "沒有å¯ç”¨çš„ tesseract 語言。辨èªå°‡æœƒå¤±æ•—。" #: ../gtk/src/RecognitionMenu.cc:153 ../qt/src/RecognitionMenu.cc:134 msgid "Multilingual" msgstr "多語言" #: ../gtk/src/RecognitionMenu.cc:205 ../qt/src/RecognitionMenu.cc:182 msgid "Automatic page segmentation" msgstr "自動分割é é¢" #: ../gtk/src/RecognitionMenu.cc:206 ../qt/src/RecognitionMenu.cc:183 msgid "Page segmentation with orientation and script detection" msgstr "分割é é¢ä¸¦åµæ¸¬æ–¹å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:207 ../qt/src/RecognitionMenu.cc:184 msgid "Assume single column of text" msgstr "å‡è¨­åªæœ‰ä¸€æ¬„文字" #: ../gtk/src/RecognitionMenu.cc:208 ../qt/src/RecognitionMenu.cc:185 msgid "Assume single block of vertically aligned text" msgstr "å‡è¨­åªæœ‰ä¸€æ®µåž‚ç›´å°æ•´çš„æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:209 ../qt/src/RecognitionMenu.cc:186 msgid "Assume a single uniform block of text" msgstr "å‡è¨­åªæœ‰ä¸€æ®µå‡å‹»çš„æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:210 ../qt/src/RecognitionMenu.cc:187 msgid "Assume a line of text" msgstr "å‡è¨­åªæœ‰ä¸€è¡Œæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:211 ../qt/src/RecognitionMenu.cc:188 msgid "Assume a single word" msgstr "å‡è¨­åªæœ‰ä¸€å€‹å­—" #: ../gtk/src/RecognitionMenu.cc:212 ../qt/src/RecognitionMenu.cc:189 msgid "Assume a single word in a circle" msgstr "å‡è¨­æ˜¯åœ“圈內的一個字" #: ../gtk/src/RecognitionMenu.cc:213 ../qt/src/RecognitionMenu.cc:190 msgid "Sparse text in no particular order" msgstr "沒有特定次åºçš„ç¨€ç–æ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:214 ../qt/src/RecognitionMenu.cc:191 msgid "Sparse text with orientation and script detection" msgstr "嵿¸¬ç¨€ç–文字的方å‘åŠæ–‡å­—" #: ../gtk/src/RecognitionMenu.cc:228 ../qt/src/RecognitionMenu.cc:202 msgid "Page segmentation mode" msgstr "分割é é¢æ¨¡å¼" #: ../gtk/src/RecognitionMenu.cc:232 ../qt/src/RecognitionMenu.cc:205 msgid "Character whitelist / blacklist..." msgstr "" #: ../gtk/src/RecognitionMenu.cc:238 ../qt/src/RecognitionMenu.cc:210 msgid "Manage languages..." msgstr "管ç†èªžè¨€â€¦â€¦" #: ../gtk/src/Recognizer.cc:76 ../qt/src/Recognizer.cc:90 msgid "Overwrite existing output" msgstr "" #: ../gtk/src/Recognizer.cc:77 ../qt/src/Recognizer.cc:91 msgid "Skip processing source" msgstr "" #: ../gtk/src/Recognizer.cc:121 ../qt/src/Recognizer.cc:137 msgid "Current selection" msgstr "ç¾æœ‰é¸å–å€" #: ../gtk/src/Recognizer.cc:194 ../gtk/src/Recognizer.cc:428 #: ../qt/src/Recognizer.cc:212 ../qt/src/Recognizer.cc:442 msgid "Recognition errors occurred" msgstr "è¾¨èªæ™‚出ç¾éŒ¯èª¤" #: ../gtk/src/Recognizer.cc:194 ../qt/src/Recognizer.cc:212 msgid "Failed to initialize tesseract" msgstr "無法åˆå§‹åŒ– tesseract" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "Source already recognized" msgstr "" #: ../gtk/src/Recognizer.cc:218 ../qt/src/Recognizer.cc:236 msgid "One or more selected sources were already recognized. Proceed anyway?" msgstr "" #: ../gtk/src/Recognizer.cc:237 ../gtk/src/Recognizer.cc:351 #: ../qt/src/Recognizer.cc:252 ../qt/src/Recognizer.cc:364 msgid "Recognizing page %1 (%2 of %3)" msgstr "辨èªç¬¬ %1 é ï¼ˆ%3 之 %2)" #: ../gtk/src/Recognizer.cc:242 ../qt/src/Recognizer.cc:258 #, fuzzy msgid "- Page %1: failed to render page" msgstr "" "\n" "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #: ../gtk/src/Recognizer.cc:270 ../gtk/src/Recognizer.cc:298 #: ../gtk/src/Recognizer.cc:311 ../gtk/src/Recognizer.cc:403 #: ../qt/src/Recognizer.cc:285 ../qt/src/Recognizer.cc:313 #: ../qt/src/Recognizer.cc:326 ../qt/src/Recognizer.cc:417 msgid "Recognizing..." msgstr "辨èªä¸­â€¦â€¦" #: ../gtk/src/Recognizer.cc:357 ../qt/src/Recognizer.cc:370 #, fuzzy msgid "- %1:%2: failed to render page" msgstr "" "\n" "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #: ../gtk/src/Recognizer.cc:369 ../qt/src/Recognizer.cc:383 msgid "- %1: output already exists, skipping" msgstr "" #: ../gtk/src/Recognizer.cc:373 ../qt/src/Recognizer.cc:387 #, fuzzy msgid "- %1: failed to create output file" msgstr "無法建立輸出" #: ../gtk/src/Recognizer.cc:428 ../qt/src/Recognizer.cc:442 #, fuzzy msgid "The following errors occurred:" msgstr "出ç¾ä¸‹åˆ—錯誤:%1" #: ../gtk/src/scanner/ScannerSane.cc:86 ../gtk/src/scanner/ScannerTwain.cc:287 #: ../qt/src/scanner/ScannerSane.cc:85 ../qt/src/scanner/ScannerTwain.cc:286 msgid "Scan canceled" msgstr "已喿¶ˆæŽƒæ" #: ../gtk/src/scanner/ScannerSane.cc:161 ../gtk/src/scanner/ScannerTwain.cc:186 #: ../qt/src/scanner/ScannerSane.cc:159 ../qt/src/scanner/ScannerTwain.cc:178 msgid "No scanner specified" msgstr "未指定掃æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:170 ../gtk/src/scanner/ScannerTwain.cc:195 #: ../qt/src/scanner/ScannerSane.cc:168 ../qt/src/scanner/ScannerTwain.cc:187 msgid "Unable to connect to scanner" msgstr "無法連線至掃æå™¨" #: ../gtk/src/scanner/ScannerSane.cc:405 ../gtk/src/scanner/ScannerTwain.cc:266 #: ../gtk/src/scanner/ScannerTwain.cc:291 ../qt/src/scanner/ScannerSane.cc:403 #: ../qt/src/scanner/ScannerTwain.cc:258 ../qt/src/scanner/ScannerTwain.cc:290 msgid "Unable to start scan" msgstr "無法開始掃æ" #: ../gtk/src/scanner/ScannerSane.cc:413 ../gtk/src/scanner/ScannerSane.cc:463 #: ../gtk/src/scanner/ScannerTwain.cc:317 ../qt/src/scanner/ScannerSane.cc:411 #: ../qt/src/scanner/ScannerSane.cc:461 ../qt/src/scanner/ScannerTwain.cc:316 msgid "Error communicating with scanner" msgstr "與掃æå™¨æºé€šå‡ºç¾éŒ¯èª¤" #: ../gtk/src/scanner/ScannerSane.cc:523 ../qt/src/scanner/ScannerSane.cc:518 msgid "Failed to save image" msgstr "無法儲存圖åƒ" #: ../gtk/src/scanner/ScannerSane.cc:803 ../qt/src/scanner/ScannerSane.cc:798 msgid "Operation is cancelled." msgstr "已喿¶ˆæ“作。" #: ../gtk/src/scanner/ScannerSane.cc:805 ../qt/src/scanner/ScannerSane.cc:800 msgid "Device is busy." msgstr "è£ç½®ç¾æ­£ç¹å¿™ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:807 ../qt/src/scanner/ScannerSane.cc:802 msgid "Cover is opened." msgstr "機蓋已打開。" #: ../gtk/src/scanner/ScannerSane.cc:809 ../qt/src/scanner/ScannerSane.cc:804 msgid "Document feeder jammed." msgstr "進紙器å¡ç´™ã€‚" #: ../gtk/src/scanner/ScannerSane.cc:811 ../qt/src/scanner/ScannerSane.cc:806 msgid "Document feeder out of documents." msgstr "進紙器缺文件。" #: ../gtk/src/scanner/ScannerSane.cc:813 ../qt/src/scanner/ScannerSane.cc:808 msgid "Access to scanner is denied." msgstr "å­˜å–æŽƒæå™¨è¢«æ‹’絕。" #: ../gtk/src/SourceManager.cc:184 ../qt/src/SourceManager.cc:169 msgid "Enter password for file '%1':" msgstr "請為 '%1' 檔輸入密碼:" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "PDF with text" msgstr "嫿–‡å­—çš„ PDF" #: ../gtk/src/SourceManager.cc:227 ../qt/src/SourceManager.cc:196 #, fuzzy msgid "" "The PDF file already contains text:\n" "%1\n" "Open it regardless?" msgstr "" "這些 PDF æª”å·²åŒ…å«æ–‡å­—:\n" "%1" #: ../gtk/src/SourceManager.cc:292 ../qt/src/SourceManager.cc:268 msgid "Images and PDFs" msgstr "圖åƒèˆ‡ PDF 檔" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Clipboard Error" msgstr "剪貼簿錯誤" #: ../gtk/src/SourceManager.cc:303 ../qt/src/SourceManager.cc:311 msgid "Failed to read the clipboard." msgstr "無法讀å–剪貼簿。" #: ../gtk/src/SourceManager.cc:307 ../qt/src/SourceManager.cc:315 #: ../qt/src/SourceManager.cc:321 msgid "Pasted %1" msgstr "已貼上 %1" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Screenshot Error" msgstr "ç•«é¢æˆªåœ–錯誤" #: ../gtk/src/SourceManager.cc:325 ../qt/src/SourceManager.cc:339 msgid "Failed to take screenshot." msgstr "無法截å–ç•«é¢ã€‚" #: ../gtk/src/SourceManager.cc:329 ../qt/src/SourceManager.cc:343 msgid "Screenshot %1" msgstr "截圖 %1" #: ../gtk/src/SourceManager.cc:335 ../qt/src/SourceManager.cc:350 msgid "Saving image..." msgstr "儲存圖åƒä¸­â€¦â€¦" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Cannot Write File" msgstr "無法寫入檔案" #: ../gtk/src/SourceManager.cc:342 ../qt/src/SourceManager.cc:363 msgid "Could not write to %1." msgstr "無法寫進 %1。" #: ../gtk/src/SourceManager.cc:381 msgid "Delete File?" msgstr "刪除檔案?" #: ../gtk/src/SourceManager.cc:381 ../qt/src/SourceManager.cc:391 msgid "Delete the following files?" msgstr "" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 #, fuzzy msgid "Open output" msgstr "儲存輸出" #: ../gtk/src/SourceManager.cc:423 ../qt/src/SourceManager.cc:468 msgid "" "Both a text and a hOCR output were found. Which one do you want to open?" msgstr "" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "Missing File" msgstr "éºæ¼æª”案" #: ../gtk/src/SourceManager.cc:504 ../qt/src/SourceManager.cc:496 msgid "" "The following file has been deleted or moved:\n" "%1" msgstr "" "下列檔案已被刪除或移除:\n" "%1" #: ../gtk/src/SubstitutionsManager.cc:33 ../qt/src/SubstitutionsManager.cc:69 msgid "Search for" msgstr "尋找" #: ../gtk/src/SubstitutionsManager.cc:34 ../qt/src/SubstitutionsManager.cc:69 msgid "Replace with" msgstr "å–代" #: ../gtk/src/SubstitutionsManager.cc:69 ../gtk/src/SubstitutionsManager.cc:103 #: ../qt/src/SubstitutionsManager.cc:102 ../qt/src/SubstitutionsManager.cc:139 msgid "Substitutions List" msgstr "æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:70 ../qt/src/SubstitutionsManager.cc:102 msgid "Open Substitutions List" msgstr "é–‹å§‹æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Error Reading File" msgstr "讀案錯誤" #: ../gtk/src/SubstitutionsManager.cc:75 ../qt/src/SubstitutionsManager.cc:108 msgid "Unable to read '%1'." msgstr "ç„¡æ³•è®€å– '%1'。" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Errors Occurred Reading File" msgstr "è®€å–æª”案時出ç¾éŒ¯èª¤" #: ../gtk/src/SubstitutionsManager.cc:97 ../qt/src/SubstitutionsManager.cc:133 msgid "Some entries of the substitutions list could not be read." msgstr "ç„¡æ³•è®€å–æ›¿æ›æ¸…單內æŸäº›é …目。" #: ../gtk/src/SubstitutionsManager.cc:104 ../qt/src/SubstitutionsManager.cc:139 msgid "Save Substitutions List" msgstr "å„²å­˜æ›¿æ›æ¸…å–®" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Error Saving File" msgstr "存檔錯誤" #: ../gtk/src/SubstitutionsManager.cc:110 ../qt/src/SubstitutionsManager.cc:145 msgid "Unable to write to '%1'." msgstr "無法寫進 '%1'。" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Save List?" msgstr "儲存清單?" #: ../gtk/src/SubstitutionsManager.cc:127 ../qt/src/SubstitutionsManager.cc:158 msgid "Do you want to save the current list?" msgstr "是å¦éœ€è¦å„²å­˜ç¾æœ‰æ¸…單?" #: ../gtk/src/TessdataManager.cc:60 ../qt/src/TessdataManager.cc:70 #, fuzzy msgid "" "A session connection to the PackageKit backend is required for managing " "system-wide tesseract language packs, but it was not found. This service is " "usually provided by a software-management application such as Gnome " "Software. Please install software which provides the necessary PackageKit " "interface, use other system package management software to manage the " "tesseract language packs directly, or switch to using the user tessdata path " "in the configuration dialog." msgstr "" "ç®¡ç† tesseract èªžè¨€åŒ…é ˆè¦ PackageKit,但它並ä¸å­˜åœ¨ã€‚請利用系統的套件管ç†è»Ÿä»¶" "ä¾†ç®¡ç† tesseract 的語言包。" #: ../gtk/src/TessdataManager.cc:65 ../qt/src/TessdataManager.cc:75 msgid "Fetching available languages" msgstr "å–å¾—å¯ç”¨èªžè¨€" #: ../gtk/src/TessdataManager.cc:70 ../gtk/src/TessdataManager.cc:96 #: ../gtk/src/TessdataManager.cc:197 ../qt/src/TessdataManager.cc:80 #: ../qt/src/TessdataManager.cc:97 ../qt/src/TessdataManager.cc:170 msgid "Failed to fetch list of available languages: %1" msgstr "無法å–å¾—å¯ç”¨èªžè¨€çš„æ¸…單:%1" #: ../gtk/src/TessdataManager.cc:104 ../qt/src/TessdataManager.cc:107 msgid "Parsing error: %1" msgstr "剖æžéŒ¯èª¤ï¼š%1" #: ../gtk/src/TessdataManager.cc:235 ../qt/src/TessdataManager.cc:205 msgid "Applying changes..." msgstr "正在套用改動……" #: ../gtk/src/TessdataManager.cc:297 ../qt/src/TessdataManager.cc:251 msgid "Failed to create directory for tessdata files." msgstr "無法為 tessdata 檔建立目錄。" #: ../gtk/src/TessdataManager.cc:306 ../qt/src/TessdataManager.cc:260 msgid "Downloading %1..." msgstr "正在下載 %1……" #: ../gtk/src/TessdataManager.cc:330 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "無法下載或刪除下列檔案:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../gtk/src/Utils.cc:127 msgid "Yes" msgstr "是" #: ../gtk/src/Utils.cc:130 msgid "Yes to all" msgstr "" #: ../gtk/src/Utils.cc:136 msgid "No" msgstr "å¦" #: ../gtk/src/Utils.cc:139 msgid "No to all" msgstr "" #: ../gtk/src/Utils.cc:142 msgid "Discard" msgstr "棄置" #: ../gtk/src/Utils.cc:145 #, fuzzy msgid "Discard all" msgstr "棄置" #: ../gtk/src/Utils.cc:148 ../qt/src/SourceManager.cc:469 #, fuzzy msgid "Text" msgstr "文字" #: ../gtk/src/Utils.cc:151 ../qt/src/SourceManager.cc:470 #, fuzzy msgid "hOCR" msgstr "hOCRã€PDF" #: ../qt/data/AboutDialog.ui.h:1 msgid "About gImageReader" msgstr "有關 gImageReader" #: ../qt/data/AboutDialog.ui.h:3 #, fuzzy msgid "" "

       

      A graphical frontend to tesseract-ocr

      Website

       

      " msgstr "" "

       

      tesseract-ocr 的圖åƒä»‹é¢

      網站

       " #: ../qt/data/AboutDialog.ui.h:4 msgid "Credits" msgstr "歸功於" #: ../qt/data/AboutDialog.ui.h:5 msgid "License" msgstr "æ¢æ¬¾" #: ../qt/data/BatchModeDialog.ui.h:4 msgid "" "In batch mode, each input source is processed separately and the output " "saved side-by-side to the input file." msgstr "" #: ../qt/data/ConfigDialog.ui.h:14 msgid "System encoding" msgstr "系統編碼" #: ../qt/data/ConfigDialog.ui.h:15 msgid "UTF-8" msgstr "UTF-8" #: ../qt/data/ConfigDialog.ui.h:19 msgid "Text file encoding:" msgstr "文字檔編碼:" #: ../qt/data/CrashHandler.ui.h:2 #, fuzzy, no-c-format msgid "" "

      The application has " "crashed

      Apologies for the inconvenience. To help improve the " "application, please consider reporting the issue to manisandro@gmail.com. Please try to describe what you were doing before the application " "crashed. Also, include the information below. Thank you.

      " msgstr "" "我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯報給manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹å¼çµ‚" "æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚" #: ../qt/data/CrashHandler.ui.h:3 msgid "" "

      Tesseract has " "aborted

      Tesseract (the OCR engine) has aborted while " "recognizing text. This may occur if the used traineddatas are corrupt or " "incomplatible with the version of tesseract in use, or due to a bug in " "tesseract.

      The stacktrace below may provide additional information " "about where the crash occurred.

      " msgstr "" #: ../qt/data/MainWindow.ui.h:18 msgid "Flatbed" msgstr "å¹³æ¿" #: ../qt/data/MainWindow.ui.h:19 msgid "ADF Front" msgstr "ADF æ­£é¢" #: ../qt/data/MainWindow.ui.h:20 msgid "ADF Back" msgstr "ADF 背é¢" #: ../qt/data/MainWindow.ui.h:21 msgid "ADF Duplex" msgstr "ADF é›™é¢" #: ../qt/data/MainWindow.ui.h:23 msgid "Zoom In" msgstr "放大" #: ../qt/data/MainWindow.ui.h:25 msgid "Zoom Out" msgstr "縮å°" #: ../qt/data/MainWindow.ui.h:27 msgid "Normal Size" msgstr "正常大å°" #: ../qt/data/MainWindow.ui.h:29 msgid "Best Fit" msgstr "最佳大å°" #: ../qt/data/MainWindow.ui.h:31 msgid "Rotate Left" msgstr "å‘左旋轉" #: ../qt/data/MainWindow.ui.h:32 msgid "Rotate left" msgstr "å‘左旋轉" #: ../qt/data/MainWindow.ui.h:33 msgid "Rotate Right" msgstr "å‘峿—‹è½‰" #: ../qt/data/MainWindow.ui.h:34 msgid "Rotate right" msgstr "å‘峿—‹è½‰" #: ../qt/data/MainWindow.ui.h:35 msgid "Image Controls" msgstr "åœ–åƒæŽ§åˆ¶" #: ../qt/data/MainWindow.ui.h:37 msgid "Autodetect Layout" msgstr "è‡ªå‹•åµæ¸¬ä½ˆå±€" #: ../qt/data/MainWindow.ui.h:39 msgid "Toggle Output Pane" msgstr "切æ›è¼¸å‡ºé¢æ¿" #: ../qt/data/PdfExportDialog.ui.h:1 msgid "PDF Export" msgstr "匯出 PDF" #: ../qt/data/PdfExportDialog.ui.h:5 ../qt/data/PdfExportWidget.ui.h:4 msgid "Backend:" msgstr "後端:" #: ../qt/data/PdfExportDialog.ui.h:8 ../qt/data/PdfExportWidget.ui.h:7 msgid "Portrait" msgstr "縱å‘" #: ../qt/data/PdfExportDialog.ui.h:9 ../qt/data/PdfExportWidget.ui.h:8 msgid "Landscape" msgstr "æ©«å‘" #: ../qt/src/hocr/HOCRPdfExporter.cc:311 msgid "Failed to write to file" msgstr "無法寫入檔案" #: ../qt/src/hocr/HOCRPdfExportWidget.cc:296 msgid "" "
      • PoDoFo: offers more image compression options, " "but does not handle complex scripts.
      • QPrinter: only supports JPEG " "compression for storing images, but supports complex scripts.
      " msgstr "" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:90 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:91 msgid "Save as hOCR text" msgstr "儲存為 hOCR 文字" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:112 #: ../qt/src/Ui_OutputEditorText.hh:115 msgid "Find and Replace" msgstr "尋找åŠå–代" #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:118 #: ../qt/src/hocr/Ui_OutputEditorHOCR.hh:119 #, fuzzy msgid "Show proofread widget" msgstr "顯示é è¦½" #: ../qt/src/MainWindow.cc:624 #, fuzzy msgid "" "The following dictionary files were installed:\n" "%1" msgstr "已安è£ä¸‹åˆ—詞典檔:%1" #: ../qt/src/OutputEditorText.cc:520 ../qt/src/SourceManager.cc:252 #, fuzzy msgid "No recent files" msgstr "ä¾†æºæª”å" #: ../qt/src/SourceManager.cc:391 #, fuzzy msgid "Delete Files" msgstr "刪除檔案?" #: ../qt/src/TessdataManager.cc:281 msgid "" "The following files could not be downloaded or removed:\n" "%1\n" "\n" "Check the connectivity and directory permissions.\n" "Hint: If you don't have write permissions in system folders, you can switch " "to user paths in the settings dialog." msgstr "" "下列的檔案無法下載或移除:\n" "%1\n" "\n" "請檢查連線åŠç›®éŒ„權é™ã€‚\n" "æç¤ºï¼šå¦‚果您在系統資料夾中沒有寫入權é™ï¼Œæ‚¨å¯ä»¥åœ¨è¨­å®šå°è©±æ–¹å¡Šä¸­åˆ‡æ›åˆ°ä½¿ç”¨è€…è·¯" "徑。" #: ../qt/src/Ui_MainWindow.hh:50 msgid "Output" msgstr "輸出" #: ../qt/src/Ui_MainWindow.hh:135 msgid "OCR mode:" msgstr "OCR 模å¼ï¼š" #. Sources toolbar #: ../qt/src/Ui_MainWindow.hh:194 #, fuzzy msgid "Add folder" msgstr "新增字詞" #: ../qt/src/Ui_MainWindow.hh:195 msgid "Paste" msgstr "貼上" #: ../qt/src/Ui_MainWindow.hh:196 msgid "Take Screenshot" msgstr "ç•«é¢æˆªåœ–" #: ../qt/src/Ui_MainWindow.hh:204 msgid "Remove Image" msgstr "移除圖åƒ" #: ../qt/src/Ui_MainWindow.hh:207 msgid "Delete Image" msgstr "刪除圖åƒ" #: ../qt/src/Ui_MainWindow.hh:210 msgid "Clear List" msgstr "清除清單" #: ../qt/src/Ui_OutputEditorText.hh:110 msgid "Strip Line Breaks" msgstr "去除æ›è¡Œç¬¦è™Ÿ" #: ../qt/src/Ui_OutputEditorText.hh:124 msgid "Save Output" msgstr "儲存輸出" #: ../qt/src/Ui_OutputEditorText.hh:126 msgid "Clear Output" msgstr "清除輸出" #: ../qt/src/Ui_OutputEditorText.hh:149 msgid "Add tab" msgstr "" #, fuzzy #~ msgid "Form" #~ msgstr "æ ¼å¼ï¼š" #~ msgid "" #~ "A file named \"%1\" already exists. Are you sure you want to overwrite it?" #~ msgstr "å為 \"%1\" çš„æª”æ¡ˆå·²å­˜åœ¨ã€‚ä½ ç¢ºå®šè¦æ”¹å¯«å®ƒï¼Ÿ" #~ msgid "Overwrite File?" #~ msgstr "改寫檔案?" #~ msgid "Recent" #~ msgstr "最近" #~ msgid "Failed to create output" #~ msgstr "無法建立輸出" #~ msgid "Failed to create output. The returned error was: %1" #~ msgstr "無法建立輸出。傳回錯誤:%1" #, fuzzy, no-c-format #~ msgid "" #~ "<html><head/><body><p><span style=" font-" #~ "weight:600;">The application has crashed</span></p>" #~ "<p>Apologies for the inconvenience. To help improve the " #~ "application, please consider reporting the issue to <a href="" #~ "mailto:manisandro@gmail.com?subject=gImageReader%20Crash">" #~ "manisandro@gmail.com</a>. Please try to describe what you were " #~ "doing before the application crashed. Also, include the information " #~ "below. Thank you.</p></body></html>" #~ msgstr "" #~ "

      此應用程å¼å·²ç•°å¸¸çµ‚" #~ "æ­¢

      我們為帶來的ä¸ä¾¿è€Œé“æ­‰ã€‚å¦‚ä½ æœ‰æ„æ”¹å–„此程å¼ï¼Œè«‹è€ƒæ…®å°‡å•題匯" #~ "報給 manisandro@gmail.com。請嘗試æè¿°ä½ åœ¨ç¨‹" #~ "å¼çµ‚æ­¢å‰æ‰€åšçš„事情。å¦å¤–,請一併附上下列資料。è¬è¬ã€‚

      " #, fuzzy #~ msgid "" #~ "<small><b>Example:</b> 1-10, 13, 14-18</small>" #~ msgstr "例如: 1-10, 13, 14-18" #, fuzzy #~ msgid "plain text" #~ msgstr "純文字" #~ msgid "Multiple sources" #~ msgstr "多個來æº" #~ msgid "" #~ "\n" #~ "- Page %1: failed to render page" #~ msgstr "" #~ "\n" #~ "- 第 %1 é ï¼šç„¡æ³•繪畫é é¢" #~ msgid "The following errors occurred:%1" #~ msgstr "出ç¾ä¸‹åˆ—錯誤:%1" #~ msgid "The following files will be deleted:%1" #~ msgstr "下列檔案將會被刪除:%1" #~ msgid "Failed to open file" #~ msgstr "無法開啟檔案" #~ msgid "The file could not be opened: %1." #~ msgstr "無法開啟檔案:%1。" #~ msgid "Invalid hOCR file" #~ msgstr "無效的 hOCR 檔" #~ msgid "The application has crashed" #~ msgstr "應用程å¼å·²ç•°å¸¸çµ‚æ­¢" #~ msgid "Could not read %1: %2" #~ msgstr "ç„¡æ³•è®€å– %1:%2" #~ msgid "" #~ "Tesseract crashed with the following message:\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "This typically happens for one of the following reasons:\n" #~ "- Outdated traineddata files are used.\n" #~ "- Auxiliary language data files are missing.\n" #~ "- Corrupt language data files.\n" #~ "\n" #~ "Make sure your language data files are valid and compatible with " #~ "tesseract %2." #~ msgstr "" #~ "Tesseract 已異常終止åŠç™¼å‡ºä»¥ä¸‹è¨Šæ¯ï¼š\n" #~ "\n" #~ "%1\n" #~ "\n" #~ "出ç¾é€™å€‹æƒ…æ³ä¸€èˆ¬æœ‰ä¸‹åˆ—原因:\n" #~ "- 採用舊版的 traineddata 檔。\n" #~ "- éºæ¼è¼”助語言資料檔。\n" #~ "- èªžè¨€è³‡æ–™æª”å·²ææ¯€ã€‚\n" #~ "\n" #~ "請確ä¿ä½ çš„語言資料檔是正確的åŠå…¼å®¹ tesseract %2 。" gImageReader-3.4.0/qt/000077500000000000000000000000001417507262200144645ustar00rootroot00000000000000gImageReader-3.4.0/qt/data/000077500000000000000000000000001417507262200153755ustar00rootroot00000000000000gImageReader-3.4.0/qt/data/AboutDialog.ui000066400000000000000000000216701417507262200201340ustar00rootroot00000000000000 AboutDialog 0 0 492 391 About gImageReader :/icons/logo_128 Qt::AlignCenter <html><head/><body><p><span style=" font-weight:600;">gImageReader</p></body></html> Qt::AlignCenter QTabWidget::South 0 About 4 4 4 4 4 Qt::AlignCenter <html><head/><body><p>&nbsp;</p><p>A graphical frontend to tesseract-ocr</p><p><a href="https://github.com/manisandro/gImageReader/">Website</a></p><p>&nbsp;</p></body></html> Qt::AlignHCenter|Qt::AlignTop true 0 0 <html><head/><body><p><span style=" font-size:small;">Copyright © 2009-2022 Sandro Mani</span></p></body></html> Qt::AlignCenter Qt::AlignCenter Credits 0 0 0 0 0 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" align="center" cellspacing="6" cellpadding="0"> <tr> <td> <p align="right" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Created by</p></td> <td> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:manisandro@gmail.com"><span style=" text-decoration: underline; color:#0057ae;">Sandro Mani</span></a></p></td> <td></td></tr> <tr> <td colspan="2"> <p align="right" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Translated by the community using <a href="https://hosted.weblate.org/projects/gimagereader/translations/"><span style=" text-decoration: underline; color:#2980b9;">Weblate</span></a></p></td> <td></td></tr></table></body></html> true License 0 0 0 0 true Copyright 2009-2022 Sandro Mani <manisandro@gmail.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() AboutDialog accept() 248 254 157 274 buttonBox rejected() AboutDialog reject() 316 260 286 274 gImageReader-3.4.0/qt/data/BatchModeDialog.ui000066400000000000000000000065111417507262200207050ustar00rootroot00000000000000 BatchModeDialog 0 0 410 180 Batch Mode Qt::Vertical 20 40 Prepend page numbers to output text Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Existing output: 0 0 0 0 true In batch mode, each input source is processed separately and the output saved side-by-side to the input file. true Autodetect page layout buttonBox accepted() BatchModeDialog accept() 248 254 157 274 buttonBox rejected() BatchModeDialog reject() 316 260 286 274 gImageReader-3.4.0/qt/data/CharacterListDialog.ui000066400000000000000000000060471417507262200216130ustar00rootroot00000000000000 CharacterListDialog 0 0 427 160 Character whitelist / blacklist Exclude these characters from being recognized (blacklist): buttonGroup false Enter a string of characters... Only allow the following characters to be recognized (whitelist): buttonGroup false Enter a string of characters... Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() CharacterListDialog accept() 248 254 157 274 buttonBox rejected() CharacterListDialog reject() 316 260 286 274 true gImageReader-3.4.0/qt/data/ConfigDialog.ui000066400000000000000000000273621417507262200202730ustar00rootroot00000000000000 ConfigDialog 0 0 480 540 Preferences Default 0 0 Predefined language definitions: Automatically check for new program versions Output pane font: Language data locations: Qt::ScrollBarAlwaysOff QAbstractItemView::DoubleClicked QAbstractItemView::SelectRows false false Filename prefix Code Native name -1 System-wide paths User paths Qt::Horizontal Additional language definitions: Qt::ScrollBarAlwaysOff QAbstractItemView::NoEditTriggers QAbstractItemView::SelectRows false false Filename prefix Code Native name Language definitions path: 10 Qt::Horizontal System encoding UTF-8 0 0 0 0 0 0 Add .. false 0 0 Remove .. Qt::Horizontal 40 20 Query to install missing spellcheck dictionaries Qt::Horizontal QDialogButtonBox::Help|QDialogButtonBox::Ok Text file encoding: 0 0 0 0 The prefix of the tesseract language data file Prefix The ISO 639-1 language code followed by the country code ISO Code The name of the language Name OK .. Cancel .. Spelling dictionaries path: 10 true true Automatically open exported documents with default application buttonBox accepted() ConfigDialog accept() 248 254 157 274 buttonBox rejected() ConfigDialog reject() 316 260 286 274 gImageReader-3.4.0/qt/data/CrashHandler.ui000066400000000000000000000110641417507262200202740ustar00rootroot00000000000000 CrashHandler 0 0 480 352 4 4 4 4 4 0 0 <html><head/><body><p><span style=" font-weight:600;">The application has crashed</span></p><p>Apologies for the inconvenience. To help improve the application, please consider reporting the issue to <a href="mailto:manisandro@gmail.com?subject=gImageReader%20Crash">manisandro@gmail.com</a>. Please try to describe what you were doing before the application crashed. Also, include the information below. Thank you.</p></body></html> true true 0 0 <html><head/><body><p><span style=" font-weight:600;">Tesseract has aborted</span></p><p>Tesseract (the OCR engine) has aborted while recognizing text. This may occur if the used traineddatas are corrupt or incomplatible with the version of tesseract in use, or due to a bug in tesseract.</p><p>The stacktrace below may provide additional information about where the crash occurred.</p></body></html> true 0 0 true true color: rgb(144, 144, 144); true 0 0 Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() CrashHandler accept() 248 254 157 274 buttonBox rejected() CrashHandler reject() 316 260 286 274 gImageReader-3.4.0/qt/data/HOCRBatchExportDialog.ui000066400000000000000000000104051417507262200217530ustar00rootroot00000000000000 BatchExportDialog 0 0 597 439 HOCR Batch Export 24 Qt::Horizontal QDialogButtonBox::Apply|QDialogButtonBox::Close 0 Input files false true false true Input: Output preview: Group outputs of N lowest levels: Select source folder: true .. Format: Export options gImageReader-3.4.0/qt/data/MainWindow.ui000066400000000000000000000611311417507262200200120ustar00rootroot00000000000000 MainWindow 0 0 1064 572 gImageReader :/icons/logo_256:/icons/logo_256 0 0 0 0 0 4 2 2 2 2 Brightness QFrame::StyledPanel QFrame::Sunken 0 1 1 1 1 :/icons/brightness false -100 100 Contrast QFrame::StyledPanel QFrame::Sunken 0 1 1 1 1 :/icons/contrast false -100 100 Resolution QFrame::StyledPanel QFrame::Sunken 0 1 1 1 1 :/icons/resolution false 50 600 10 100 Invert colors Qt::Horizontal 40 20 false Qt::ToolButtonIconOnly false TopToolBarArea false QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable So&urces 1 2 2 2 2 2 0 Files 0 0 0 0 0 Qt::Vertical QAbstractItemView::NoEditTriggers true QAbstractItemView::InternalMove QAbstractItemView::ExtendedSelection false false 0 0 0 0 0 Thumbnails true 64 64 QAbstractItemView::ScrollPerPixel QListView::Adjust QListView::IconMode true Acquire 2 2 2 2 2 0 0 .. Refresh .. Device: Output: Resolution: 0 0 Qt::AlignCenter 75 dpi 100 dpi 200 dpi 300 dpi 600 dpi 1200 dpi Qt::AlignHCenter|Qt::AlignTop 0 0 0 0 Scan .. 0 0 Cancel .. 0 0 Mode: Grayscale Color true true Source: Flatbed ADF Front ADF Back ADF Duplex QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable &Output 2 true .. Sources Sources .. Zoom In Zoom in .. Zoom Out Zoom out true .. Normal Size Normal size true .. Best Fit Best fit .. Rotate Left Rotate left .. Rotate Right Rotate right true :/icons/controls:/icons/controls Image Controls Image controls :/icons/autolayout:/icons/autolayout Autodetect Layout Autodetect layout true .. Toggle Output Pane Toggle output pane .. Batch Export Batch Export gImageReader-3.4.0/qt/data/PageRangeDialog.ui000066400000000000000000000075251417507262200207160ustar00rootroot00000000000000 PageRangeDialog 0 0 263 202 Page Range Page range: <small><b>Example:</b> 1-10, 13, 14-18</small> Recognition area: Entire page Autodetect Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Qt::Vertical 20 40 Prepend to output text: 2 2 2 2 2 Source filename Source page buttonBox accepted() PageRangeDialog accept() 248 254 157 274 buttonBox rejected() PageRangeDialog reject() 316 260 286 274 gImageReader-3.4.0/qt/data/PdfExportDialog.ui000066400000000000000000000636301417507262200207770ustar00rootroot00000000000000 PdfExportDialog 0 0 502 689 PDF Export 2 Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Show preview 0 Basic Output mode: Qt::Vertical 20 40 Backend: PDF PDF with invisible text overlay 0 0 0 0 0 0 0 0 0 0 2 0 0 0 Portrait :/icons/portrait:/icons/portrait true true true Landscape :/icons/landscape:/icons/landscape true true Paper size: 0 0 0 0 0 .. false true 2 0 0 0 0 Width x Height Image settings: false 4 4 4 4 50 1200 10 300 false Compression quality: DPI: 100 90 Format: Compression: false Dithering algorithm: false Text settings: 4 4 4 4 Override font size: Override font family: false false Preserve spaces wider than: 0 20 true Font scaling: 20 false 0 0 1 false 0 0 characters true 0 0 % 50 200 100 Uniformize line and word spacing false pt 1 10 Fallback font family: 20 Sanitize hyphens before line breaks 6 0 0 0 0 Treat image sources as having true DPI: 50 1200 10 300 Advanced PDF version: Encryption (optional): Password: 0 0 QLineEdit::Password true Confirm password: 0 0 QLineEdit::Password true 0 0 Additional information (optional): Author: Creator: Title: Producer: Subject: Keywords: Import from current source Qt::Vertical 20 40 buttonBox accepted() PdfExportDialog accept() 248 254 157 274 buttonBox rejected() PdfExportDialog reject() 316 260 286 274 gImageReader-3.4.0/qt/data/PdfExportWidget.ui000066400000000000000000000613031417507262200210160ustar00rootroot00000000000000 PdfExportWidget 0 0 528 653 0 0 0 0 Show preview 0 Basic Output mode: Qt::Vertical 20 40 Backend: PDF PDF with invisible text overlay 0 0 0 0 0 0 0 0 0 0 2 0 0 0 Portrait :/icons/portrait:/icons/portrait true true true Landscape :/icons/landscape:/icons/landscape true true Paper size: 0 0 0 0 0 .. false true 2 0 0 0 0 Width x Height Image settings: false 4 4 4 4 50 1200 10 300 false Compression quality: DPI: 100 90 Format: Compression: false Dithering algorithm: false Text settings: 4 4 4 4 Override font size: Override font family: false false Preserve spaces wider than: 0 20 true Font scaling: 20 false 0 0 1 false 0 0 characters true 0 0 % 50 200 100 Uniformize line and word spacing false pt 1 10 Fallback font family: 20 Sanitize hyphens before line breaks 6 0 0 0 0 Treat image sources as having true DPI: 50 1200 10 300 Advanced PDF version: Encryption (optional): Password: 0 0 QLineEdit::Password true Confirm password: 0 0 QLineEdit::Password true 0 0 Additional information (optional): Author: Creator: Title: Producer: Subject: Keywords: Import from current source Qt::Vertical 20 40 gImageReader-3.4.0/qt/data/SearchReplaceFrame.ui000066400000000000000000000066021417507262200214140ustar00rootroot00000000000000 SearchReplaceFrame 0 0 337 103 QFrame::StyledPanel 2 2 2 2 2 Substitutions .. Replace Replace all .. Find Find previous .. Find next .. Replace .. Match case lineEditSearch toolButtonFindNext toolButtonFindPrev lineEditReplace toolButtonReplace toolButtonReplaceAll checkBoxMatchCase pushButtonSubstitutions gImageReader-3.4.0/qt/data/extra-theme-icons/000077500000000000000000000000001417507262200207315ustar00rootroot00000000000000gImageReader-3.4.0/qt/data/extra-theme-icons/application-pdf.png000066400000000000000000000020741417507262200245140ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÚ ¦õx¼IDATxÚ…•Ì$Y…Ï«×ÆÚ¶®ÂµmÛ6¢ ÖÖ¶½;ž‰vâ±í¿¹Õ¨v½=÷ýyÉï¾Ééò÷î=÷VµÂ`ìNHE1"<ÏSf0àÂÓZ…½žÁðèPÿR[à"^†¡év»Võ\Δ–.5ÿþÛÔ|ßT«5Ó#ÈŠ×kµšÝ:É3ò¼p3âØ¼‚zµŠŽïÃ_¼»œr 2Ûm‡Í?ü€mÎ9ív ñx0Fr¿„T"Êd2Z±JAi°ÕBîŸÄD³YxÍ&R©˜:í¶=句ìËóCÃá'Ò{î‰ÞÖ­ØüŃðHšð$áÝ^ îk&à€N##2 ,«RG¿ú*æ]|1T¹Œô¢»e ’Gam´-\€Ö$“ID´,³8rßns9x;ì³ýöð&M¶?þˆN`3«Ørã¨Í™¾8Ð<7æT(Ñ}T,Éç¾(Ò,»§#ýÖ[ˆ®\‰ü3Ï ùåÀ.»È˜Ž?nF Ò ñ° !€z½ȶX„ÿ÷ߨ0ó³Ô<‚mHòz8cF{L0T¶â¯ÜÌæH¶õ>ùë¾ûuŽ£:ýt¨£Ž²Þî¹×^XíûhɼÑ`E.s‰ÎÂ…Ç®üöÛØúÑGذ㎸€MSœ ‚Ðnµ0eÊ”ÜC?|€¥c[aŒ5·ßœ5 ÕwßEƒš»îB‡‹x2¿aˆg·âû˜:ujþÑÇ¿Ó÷ý?„c‚ô®òÜs¨ýþ;4™+¯D—çÔ’%Šj¥‚3fä|øá»éÿï:,@ÊÔjøcÔét O; ±Ûo‡‘ËBeáZµŠé„Þ{ÿý÷Að‹¸‚¡1–þ“OBŸw4÷»ûî+o˜|íg3NÚÌvòäÉù{î»ï6õç‘Ð1ß<)1rÌ1ȲôËNžt’õÜ6‰ì³÷ÞøîûïswÝsÏÝA‡þ5]kü˜˜Öúõ¦øÕW¦¶q£¡†¥šB>oV¬X¾úê«kµÖ—ÐèîeÛƒ:…Š(d’M8ÖŸåBj9¢Oü{&O_Pi]IEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/applications-education-language.png000066400000000000000000000024431417507262200276620ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î< IDATxÚµ•C€´É€ŸÂçiLµ½Û¶ÎÑ9¾Ä¹Çvrй¶m{ÿ™ßj÷ǪJÇvò”Í÷}…sŽÿ’ÿà™ºF_ù±§Uü‹¼û‡»£$òçâ(˜K¢ÀöiçŸúþžÑ¹oð;~s«oþúc¦2Î’K… vø¾jK¥•çù ÍF2zA+¹šFk›‹ñDÖ’$$OsªÊÑj&|燗›í=Ý[œŠ¾[žû–Ïk€,3SYÿpv{:ia‹2jâ‡RBX¤L‡‚šHqFQ ­çPZÒlÄj{oç°5àóòÙÏ~¶*L¼Ú<ÆIJS¢|!}4%Mϰ§cfZ1‰ÈÑ6eBfl4ãùèužF Ö.ˆ1²³þÆPê@© €h'#j¡äy§Ï²:S׆qÚ-,Ù`D+–<ûè„"¯ *¨Ûi^àœkAˆ¦<ú ž,¼ÆLx8!°NpìBÀLÃÃÓš•ÙîêCžÑÏ-»;%W?ÐÁ÷‡sA=ÒdiŽu'!ÄÒ3g¥ÑL¿×E¤Òˆ{:† ¹»Ë‘Ó¶,xÍY->ðê£8f>¢²‹`¶•`ªœC‡:H!qR€?1#•çÍŠj@>Ž'’Jðäãfé• iK^ù¤eNZM¸ú®=DQÈÊLÂt,µ Ërêžáp»ÎáœéÍjI¹$œÁå=¼F#—çè§%Ç-78z±ÆÙGMòáïÜÆÆ´Ç1kÓ”F°ëàÌz8!ŒFlïë1L Ð Ò zI*WlH%‘Ò’w24‘2Ç-ÆÔËLÃgÏ@ò¤— Ÿ—=iQn±i•8ô8÷úÇ~óhÇÎìè+…E*µá̺ÃpÆ'©Ê kKŒ)¸âŽm–¦kX'ùü¹;XXœeoÏpò;Ìtsâ7ßði§ÔÆ .½k/÷‰ÃƒÏã± …ôæü‰&1åoVÅÁŽvÆËŸ±Žz¼Ë¡TD!=ú(Ë5ÉÖÁÏ?s‰‰ÈckèsÕõ÷ã„ǰ’J!´Ož5‡~Ó÷ Yîˆk*ŒJøÂy[¼èìy6—"_ÇYǯЪ¬/40ÊgWqîe·s¨3ááФ6éƒÓÒ"'Ã@#˜ªBEáèd†_^ó E:be:¤3,¹õ‘öøJ*ÏÜx÷7Üþ0ÖiœøM€ß¥BG-ÝQ€r¬‡ò`Ü!µ|øb«æÿÊž2‰¹sæ0gÚžÒiS6j¼kÐéZ—‡‡³ pO6¬óÛ­€« øÀ³†#:Ç»)þ¾L›4‰©&0ÅדûeetG¼a 8P]Ÿ•;gsfÍäÑFuþ ´Æœéßßx¢q½ÊO7Þôóã5__^ñöæ//žéÜîßx)èr¶O÷g_?׿Eéø¾x_JP)/<ðV¶Ó]]ysÔ(^1”GÚ6æÙ¡CyÉÛ[e) /%©¤˜+>®¼êëÃm5´Æ*¼#cõjSÅÚ¸Û^®Ì<˜òÆÜYÝùgk”ŠcGÍ]x¼îo^ÿq¿—ã[g´»qA¬ú¹£’’ñŽ‹sçšÊ’£o•ºc‘‹ óÌffèÃíµt?_4‹zìjZ—GEñ¾öÍÿ¿0 =€µµµ·OŠ‹G]:q90oØ5h)=xæ­ŠÁ}XÞ¹3K;uba?3·ÖÑÿ|!ÐÂÀyCu'FÙÚ2ÖNÅe@´¥·¼“¨ÓqkÅóðB`Ú֬έò^y»MÞnÙ’eZsS]ÃÏC J_˜.Šìe®-öó¶€°L«N]­TpíÓ‹²´Â\Që ßʰV±`•H¹¥’ÉŽò/f-ðñ‘®â:£F:ÊÿŸ˜!@–ãÅu’‚+ušÇ“šŽò­TÛç¥÷ b¥d¢“úS Jß&KÑ[Äûq p…Nýã–€ôòlŽ2h¸à&£†Kœäß]³ÊxKä¾µ’qÎê_Žý@éÀcÔüa›(]ë¤f€FÚˆ—ÄÓR V]´Eüªý*Ï8ȼ °P¤ÒFÅH½æ—Þ@K¼Ã°u¯Ïoa²øßËÙ¿ä ¸DÔ²üï~xxVœ+F±Ì ù娔zuƒ´ê´ãz Üj´àKåúšx‡“ˆ»ZZº¾®O‹òëÏŠã£EÕÂn]6L™Ò{gpp·ÍÓ§ûGöëºw]]›Üs½ð NÃéNêü^€5>¤ ÐH õ¬ÿÕRÉ,€¥b_ØÐ‰9]1×Ü‚mk²\gÁ|€7¢´–'jÕ9½>¥ºˆ 0jF Ë'ûêX1_̯ìÅ"Þ©)ÖH¼XË’ËêXýc¨ZŠnXàK5,{ãÜuš ‹[è~½­kýÿîÓâk»ÖûËÌ&Úü>JÅòÎ@-|# j(Iö­eÙ© qÆçýôÕ4:E÷6IEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/dialog-close.png000066400000000000000000000022771417507262200240110ustar00rootroot00000000000000‰PNG  IHDRÄ´l; pHYs × ×B(›xtIME× 6Ô iªbKGDÿÿÿ ½§“LIDATxÚ…Õ”ëÚà/IÛ™Žu}mÛ¶mÛ6žmÛ¶m[Ç6ÚQ™4yG ×Ûüþ½¸¯’ž¡m€]#¦#—±1áPò éåààõìq_žs ä£H¸¹ÆÍ¦&͘ß&¼o_}3É«ÂÒ1‘׸c ¯/7çŒ3L:ê(]Ó§†šÃÃ6üå/–~ë[Ö,X Æo\ÿó_~ÞI|­‹ãç|°]o¼Q[OÏ‹¢gHÓÔÊþÐ?ûYå$ÙØàìÇùý‹àÓÈŸÀ—{9gÎ~ûÙéª+„Q ²²í]–Mÿü§úÓ6eÙú ‡?ÍbˆÁuÜÒÍS{{͹ðq<¢}§Œ¯œ/ˆÇiV¤µqÉø˜ÊÆMò3f]ºT{G‡|½®ºvmgÌ^>³‚,‚Ké™Å‡èž~ྒÞL÷1'šyÑ5ÂA«~óm…°b³ª¼i½Â~Ûù¦[µÍ˜aÑ7¾¡»»[}Ñ"µ4=ƒ?þ”!‚=8»È”® PÜ!gttŽ9»÷9Äô«îµlÍR«Ö.ì}€ÝoºC†:¦MUÍZârIOON‚6nB!:ƒúØ·7GçаξԿ~²ù%; gò ÝSf w˜©Üäð{ž„‘ÚȰoßz™®Åÿ­Z+^¿I‚“k¼#@áüvˆ'v1¸…¡@«;ïï»ùÜ×Ì9äP)ûÒMg›²úOú*‰xCª±‘á&ëÉV°{ˆ¨@QŽ ²¹f:ŠMûÍ.ùüÝg[=.€,M½ÿº V~cêä¦B*ßOÔA„ZËyÿ4\'97a#5)9!As$=T)@`+Gl+Ht(Iv%FwAt^yœ 6I<\ˆ$J€8=?]‚(L{2Qz5Ry6Pl%>I6Pa%=D'@B.GJ7Tk8T_9Vt:T`;Vf@]gC]qHf†IhsJfƒOk•Pl~RmSr•Tq‹Ur›UtWs‰Ws™Xt‘Yw Zv“^z“^z™^{^{ž_w_y _z˜`|™a{¢a«d|›d€žd€ e e€šeƒf‚œf„°f„±f…¢hƒhƒ¢l† l‡¢m‡¦n‡žoˆ p“¶q‘¾s­t§t¨u©v©v’®w“«y•¯y™Ç¶€œ¶‚¤È…¢¹†£º‰¦¾‹§À•³Éž¸Ì¥ÄÙ¬®e7tRNS $'9@ELV^gpx}œž ¡¬´¾¿ÆÆÍÎÞáââäçéîîñôöùúûûüýþþ*:$/µIDATxÚc #àPÖæÂe׬©ÓãDeÓ(¯¯¯Ö‚òÄD!4«zQmmm™.„§+¢YÔÒ«*+K ¹Á¢rîÅyÎ ̪…ùF<Å qq)âL*Þi qYƼP“%m<üÃãmu\S£Ã2MøàöK[ùÆ${åfD…˜ñ#¹KÆÎÍ'4ÂÓÅÑT޲Ö~‘I‰Aæ‚hþ·Ï)ͶÂðµ’S…¥0f`0*ê‹Ð)6r½#?¥.íIEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/document-edit.png000066400000000000000000000020131417507262200241740ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEØ &Qã‹IDATxÚbd ¸à蜠$IU;³˜ùÿ¬¾µmÛ¶mÛ¶mÛ¶mÛöî°ÝÓÓ»~[kÇ{éÌH{,®m2ð$LØ1ï’%ašø ßA§òÚ&\µ$ѱ7£¥ŠòÂàrå"y„;ùF¼Ž—*rõN4ýè¤×ó‹Ï—ÄáóõÕÄ’½Á€$IȲHß ¯òª/ÿízDFé=?”K,‡r;”êNIzq½Ì[¼-•ß ’,ÚyT¼÷»à´½ óŒø˜¬>2$Ô+ý[ÊÂY.hÕTU=®­Xï­6 B+C uÞB°ï熦÷ð{ˆžÉ‘GÆ9Ùp¸wô©ÕJŸ8dz…Ä÷^ ÿ’ ®?tO21£«‚Õü¨æ@Ï6àðüý£Ð¤ôýàÕï#Ĺ—E»°ÿŒ I±3¹ƒÐuÔà½ìñò¸ ˆ·ÅïHµhÁg»Fu#;Ï…0wý „êeX )’üÄÚK%±Ø…8øÞ¿/ÕŽ@q>'ŽaW3fÁCTE¡kU²ÆgþѼø¥_N€ÅoIµTõšQ#æñ0LÐ}Ü \.7 ‹›¨YLfæžtDÙ~ aÆhÒO‹µ ËÅ6£MÐuô%bìJg·Ñ¡º—9»ÿæêãPêׯO¦L™xM,> ϳé8Ý‚COm'G*'ƒŲòàl?Ê•+S¾|yíÓðU+v=™„Plt~GÏm¤ÐyßÊÊKÁLÙ “?~Z·n €ªª¼OÐ;âWrw¬ »5’‘3ŽqùŽßô3¥™»Ï%:Nr‘&m Ú´iƒÕjEûX_µbgŒgp‚C’O H‘â1h…Žzõ³zõjräÈN§#44„“'OXý'WÌ«³²FßÄnºNõ¢‚ 9=£G²¬È*“>]z„ÄÄØØ±s§uè¡í€KŸ=Šè¨®\>IŸÈqBH•«'Júòüú;voØ;Òõ6XGŽÙ6<<|# øÅ¿¸Ýn±lÉ"‘3{qrï<á´›„¢(BUUá÷ûEXXX l±˜Å¼ysÍýõW-@âShbÇ#Ü'ŒFý¢@xO._¾Ìœ0aÂ/H5ñç L%Ö¯_oNž¿:[£ô”}Ô_^ž/¡€èͦ™ÿ;ÿ Móél¤°3ª"ê`Z­avs ˆõ_€ÿr‘`IsðNŸIEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/document-preview.png000066400000000000000000000020761417507262200247410ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<»IDATxÚ´”¬%I†¿j÷ó{÷ŽmÛv´Œ³Þ6\[ñ‹½á2ÎÚÆØ¶í¹¶»¦ºÇöß,}u:BJɃz½¹7Ræ2>øè±ã‹4M „ƹ¯P_ €Z­†iš!.~/WkKË,à°ð!—ƒ7oÚìwb§NGèØ1 ž‡ã8 6®… €«Á̇Çb1¶nÝFºàñݧã Û¤V=H×P3Oo$2yÒDêê빙΃µÀýåË–q<éðéOû6| O¾8“Š×ëVïããŸvñø”rÙÿyì±G«‘òæàŸú™Š´t?sžÁ¤™ƒéÕ£…Óž —)q•ÅÃG÷á—¯—Ыs= -bÞܹüzÒ€ÀÚx<Æï«ò 1ˆaúa59œ©AUY»« 8¡nmÌxx2Kv9zôh`zn ®”Ë€àЉ4ãçŒÄjvp,šëLK£Ù5iUáa*u.¿DðÜ8g",Û£„Ûhãº>PÇÅ£ÙЃ8V<Ðlb½EC[ †™¼½!¸[·n”Š%zviF×5ÛÀQß:C`Ÿ eMà!•=Ã.…Ó…›‚5 8RJ¦îB©T @†.p¸ÿõ7¨žçѧټy(.OÞСCèJ‘Þ¶L¦HÕM ÃÇ@U Ìx+{Œ)S&s3sçÎ%OðøÄzZ¢NÇ Ä+™¤+’h±‚« ½«QúõïO*•¢R©Ü4y]zþ…çùö›oimKѳdsj㦅«y4•óDdÑ…ضÅ˯¾ÆŠ+3f €¼^u›•Ëå MC;_|öïßÏêÕkÈå AìAÒÒÜÌ$u”Óé4_~ù%…B·ß}ãÇŽÖÞzóÍ«W¯^ÈUòÁRM”¥RI–Ëe©\”Õj5xTu“*aÁ³aÃÿÌmoo—O?ý´\§ú:”ýè£ÆùF\x´‹•ê:±º<~ ¨’šÀ²,fÍšYQýóÅgŸ±cç®ú×ßxcõÙ-sC<Æn8Ü` À®9uêäïÊÊ*ÿõë×»øðaæ¹³g6lØÀœ™™¹½³³3Æß¾};Í÷ƒ çÿøñƒá°ôãà`ÿ‘ŸŸã~îÜ¥C0Ëccc;mllJjÃÃÃÿÏ›7/ 3„Ø¥/_¾|c 1/^\~üøñ11±¿&LxŒƒ¤Öy€ÜÇ%” ÷ó;wî< d1¨ð~Ô€4IEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/folder-open.png000066400000000000000000000016461417507262200236600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®Îé pHYs „ „ªâcytIMEÛ '#W/bKGDÿÿÿ ½§“&IDATxÚbz ¼a ^ùȦ­d™Ë6¼mÿ¦??úüÿÿÿ²+Ë•5.:¤R¿b° t²v–Þ†¢øïJzfffæ´Á6]Ú¯N•òý#á¤Mffff¦Çüvmݯ-Ïî—6š¹ã#üÓ¹àù‡uíÕW!¯1ƒ0ŠyñÕ·øLdÈÏàQHANkÄÜ] $ljjjdæš°µ±Šç!_þºFŒ  §µ/×^v>.‹dµ ÷‘öN ÚwôîÕ{îüàÀ¼½±ÌÎÎ.»Û›D3øìÇ-†A»7’¡VCdÐz¶~ø¡û5&WØ^ZöÎñêßlmíPwÉ!ö‡q:ÖÕ %ȹ€•9;ÃÝ)¶–ÿ&{UnÁª+øôíp‡0`%œñ‹ÂÆ $0ÄïìÇÆúgÞ|AÕ‚‡UÅkO=È÷/ÝÍÿ]SÇ]͹§âéQ)Ü~ýmln­°º´ŒÅ€Y`»©û»Ÿ|ïüƒ 8R‘*]<îØc¨Cn1Ëóñ°K¿¯þ¡úþi~þùÌ"îÎ{Ÿ}ÇR:’CÅ @{†5ˆÀÐÇjõìX&HH!§Ôn÷äÀT/îÓDóDW¨"‚Héï•M^úðën `Ê` ˜3þgœP÷t5ÐR.ŠžŠS,üòé”cáœsÏ"äiïÎGëgý…ŒkêŒ „þ" §Ä·ö+ick¨µÕms9H ¤ò€ƒ:÷‡ÙòFÓ­i5Ú`Ÿ‹µ8`&²¼º‘íØko½lw =í_ &ÉrvC²uÑd4Z€0“…hxí1™™\Hyxï¿ulØÐxÇöiIEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/help-hint.png000066400000000000000000000017151417507262200233330ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<JIDATxڜԿëX†ñwí¤išööÜtlÛ¶m{æ#ŒmÛúilÛ¶mßc 6Ö{¦ÿ2z∠¡Ñå<÷¯Ìy¶ª_ñ?Â\Ÿ[4Ð0ìÞZø`Ò‹_+ómíÑÜ~"¯3õ<§Äk=ÁÛ¤ãêi‡Ýsñ#2÷Îaéà Êcü‚HœÂ7—)éê3ûáMñ|ü~m¡C¬ø«Êük÷)3'ˆ¿xáõµê{jiûÆÂGùu\6ù»ˆr› uå+Ô!4V÷£*D ø[X„Ó/ë°^©øå£ËÑr‹.LË}>Þp‹y?5N–Ð~u­²½mÓþœTRÁÏu@rÑ6P³¶­Êâ‘ÆøóðtÃ0’l ÔÖÕ@f½hÅ(˜ûØ•ø9Æ€qväžV…1ÍÈΧ…ööåóǶĤaÇÄ<œëÍH;18ç”ÏãÊp½£¯/óÔ\>1a¼r9ÔPµ… ûÆ?)üE¥;¼ÁOCN^"%Âb˜s9Lµ±ÃÖSu›æ_a$W’°ô?žRT|pòðz-=Jg!‚Ä•‘dN› òØYÕ‚q~M$בâÛ‹Æé>ywÒðϨà¿ê 7AžbvNH)aENº{óBµœi‚ˆJÇ#"þ·ó”®cZk®Ãü7;¿²q<ø2ß¼~ÞÚ]Šä'ó/@°"ì”jiYqu]üfÒ-FÓ7Õò™ª§sA'Õ²±óT³|‰ù&Ò¦’1p4ÔWCàÝCë´ 6 ÿmÔ}«-‚ýôÁœN)u R1·ŽD Qoï<4wxþ‡BøÏ«úx$2O¬óÙ£Ù2e„¿ÆÊíٌ¨”Ï£¾¾Y›@*i†&±®¨~GaéüÉ› \uä ½;¬éEÄ®Pð=šoEÌ O˜Ž~½† û˜Ä/zþPe—Êì8F½žaÿõ î¸þ”‘&Ù"…Ihm‘$)¢°„E[ÌŒáá¡I7hÒ°çÁXk~Š.†=÷ÜI’ÀZ¶˜Ä¤Çxæ¯EQôô*+¯²vOo/ÅqÜœçù Û·oßr FD`¿¬¼R­†¦6³††F °6yKHÈ»8†6ŠIEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/object-order-front.png000066400000000000000000000007651417507262200251540ustar00rootroot00000000000000‰PNG  IHDR(-SsBITÛáOà pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÃPLTEÿÿÿvvxÅÅËuuy‚‚„‹‹––›¢¢§®®³ºº¿ÆÆËwwyÆÆËåååôôôÿÿÿvvy}}€³ÿ„ƒµÿ…¶ÿ‡·ÿˆ·ÿ‰¸ÿйÿ‹‹‹¹þŒºþ¼ÿ“¾þ”¾þ––›œÄýžÅý¢¢§£Èý¤Éý¥Éý§Êü«Ìü¬Íü¬Îü­Íû­Îü®®³ºº¿ÆÆËÈÈÍåååæææçççèèèéééêêêëëëìììíííðððñññòòòôôôøøøúúúÿÿÿÜÑtRNSµµ¿¿¿¿¿¿¿¿ññþþþ·[„ˆIDATxÚbÀ&§ a0€f7+·8/»ÿ¥öïós­Ûi·š*'zÃÓùúTê‚øÜ.Ï÷W"Šß!K×˱ÙgD‘'I­&š vþܳ F¨EnXŽçúÜ"³¹af›Pã[бØ¡Æ·òé6 ÃX{Þ)1 ³úã(¿ø¿$BEŒZÃô"öòë!‹ðÐIEND®B`‚gImageReader-3.4.0/qt/data/extra-theme-icons/text-plain.png000066400000000000000000000016311417507262200235250ustar00rootroot00000000000000‰PNG  IHDRójœ sRGB®Îé pHYs „ „ªâcytIMEÛ 3 Ú·ªPLTE µµµ™˜˜›ššžœœ®­­¡¡¡¢¡¡¬¬¬äââæääÿÿÿ +++777:::???@??@@@DDDMMMPPPQQQVVV[[[mmmxxx………‹‹‹™™™œœœ£££¦¦¦©©©ªªª´´´¸¸¸ÁÁÁÂÁÁÄÄÄÅÅÅÆÆÆÇÆÆÈÈÈÉÈÈÊÊÊÍÌÌÏÎÎÒÒÒÓÓÓÔÒÒÔÓÓÔÔÔÕÔÔÕÕÕÖÕÕÖÖÖ×ÖÖ××ר××ÙÙÙÚÙÙÚÚÚÛÙÙÛÛÛÜÜÜßßßàààáááâááâââãããäääåããåääçååçææçççèççêééëëëëìììììïîîðîîðïïñïïòððòññóòòôòòôóóôôôõóóõôôõõõöõõ÷÷÷ø÷÷øøøùøøùùùú÷÷úùùúúúûúúûûûüûûüüüüýýýüüýýýþýýþþþÿÿÿº§tRNS"FHKLMNOPQSUXZìïôõõõööþþþþîßGbKGD âÕ>IDATxÚ]‘ƒš\1@SÛÖ¸v§ÚÛ¶mÛ6þg^ßÜoöÄ'Nºpãö.7. #îÃyîë0*Uêõf«Õª·êÕZœê¿ÉÔZ- ­9"‹zÓOçÓéz5]̆Ó¡¡ïrØ}&‡-`0»Ý.B†­–Ûíf½Z ¡G€GlfXÃw kšLþd¡¼•’‹þÅÖÒ+ ¼|t™¸Î:ÀSÚBX¼yv‹hMa\üºùWO®¢3 ÝùbØÎèÿo‹Ñ×Öƒ˜Ýì•òÃëç7ÖŸ`<VbêýÉÓˆÔÐsZuFWøø:¶øÓ¹‡×ÉÅ;wO¹u‰”‡v7u_=IEND®B`‚gImageReader-3.4.0/qt/data/gimagereader.qrc000066400000000000000000000062451417507262200205270ustar00rootroot00000000000000 ../../data/icons/angle.png ../../data/icons/autolayout.png ../../data/icons/brightness.png ../../data/icons/contrast.png ../../data/icons/controls.png ../../data/icons/filtering.png ../../data/icons/ins_append.png ../../data/icons/ins_cursor.png ../../data/icons/ins_replace.png ../../data/icons/ins_hocr_append.png ../../data/icons/ins_hocr_before.png ../../data/icons/ins_hocr_replace.png ../../data/icons/page.png ../../data/icons/resolution.png ../../data/icons/stripcrlf.png ../../data/icons/48x48/gimagereader.png ../../data/icons/128x128/gimagereader.png ../../data/icons/256x256/gimagereader.png ../../data/icons/select.png ../../data/icons/item_block.png ../../data/icons/item_line.png ../../data/icons/item_page.png ../../data/icons/item_par.png ../../data/icons/item_word.png ../../data/icons/item_halftone.png ../../data/icons/rotate_page.png ../../data/icons/rotate_pages.png ../../data/icons/wconf.png ../../data/icons/landscape.png ../../data/icons/portrait.png ../../data/icons/collapse.png ../../data/icons/expand.png ../../data/icons/thumbnail.png ../../data/icons/proofread.png extra-theme-icons/application-pdf.png extra-theme-icons/applications-education-language.png extra-theme-icons/dialog-cancel.png extra-theme-icons/dialog-close.png extra-theme-icons/dialog-ok.png extra-theme-icons/document-edit.png extra-theme-icons/document-export.png extra-theme-icons/document-preview.png extra-theme-icons/help-hint.png extra-theme-icons/object-order-front.png extra-theme-icons/text-plain.png extra-theme-icons/folder-open.png gImageReader-3.4.0/qt/src/000077500000000000000000000000001417507262200152535ustar00rootroot00000000000000gImageReader-3.4.0/qt/src/Acquirer.cc000066400000000000000000000153431417507262200173430ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Acquirer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include "Acquirer.hh" #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Utils.hh" #ifdef Q_OS_WIN32 #include "scanner/ScannerTwain.hh" #else #include "scanner/ScannerSane.hh" #endif Acquirer::Acquirer(const UI_MainWindow& _ui) : ui(_ui) { ui.pushButtonScanCancel->setVisible(false); ui.toolButtonScanDevicesRefresh->setEnabled(false); ui.pushButtonScan->setEnabled(false); ui.comboBoxScanDevice->setCursor(Qt::WaitCursor); // TODO: Elide combobox m_scanner = new ScannerImpl; qRegisterMetaType>(); qRegisterMetaType(); connect(ui.toolButtonScanDevicesRefresh, &QToolButton::clicked, this, &Acquirer::startDetectDevices); connect(ui.pushButtonScan, &QPushButton::clicked, this, &Acquirer::startScan); connect(ui.pushButtonScanCancel, &QPushButton::clicked, this, &Acquirer::cancelScan); connect(ui.toolButtonScanOutput, &QToolButton::clicked, this, &Acquirer::selectOutputPath); connect(ui.comboBoxScanDevice, qOverload(&QComboBox::currentIndexChanged), this, &Acquirer::setDeviceComboTooltip); connect(m_scanner, &Scanner::initFailed, this, &Acquirer::scanInitFailed); connect(m_scanner, &Scanner::devicesDetected, this, &Acquirer::doneDetectDevices); connect(m_scanner, &Scanner::scanFailed, this, &Acquirer::scanFailed); connect(m_scanner, &Scanner::scanStateChanged, this, &Acquirer::setScanState); connect(m_scanner, &Scanner::pageAvailable, this, &Acquirer::scanPageAvailable); ADD_SETTING(ComboSetting("scanres", ui.comboBoxScanResolution, 2)); ADD_SETTING(ComboSetting("scanmode", ui.comboBoxScanMode, 0)); ADD_SETTING(ComboSetting("scandev", ui.comboBoxScanDevice, 0)); ADD_SETTING(ComboSetting("scansource", ui.comboBoxScanSource, 0)); #ifdef Q_OS_WIN32 ui.labelScanSource->setVisible(false); ui.comboBoxScanSource->setVisible(false); #endif QString sourcedir = ConfigSettings::get>("sourcedir")->getValue(); m_outputPath = QDir(sourcedir.isEmpty() ? Utils::documentsFolder() : sourcedir).absoluteFilePath(_("scan.png")); genOutputPath(); m_scanner->init(); } Acquirer::~Acquirer() { m_scanner->close(); delete m_scanner; } void Acquirer::selectOutputPath() { QSet formats; for(const QByteArray& format : QImageReader::supportedImageFormats()) { formats.insert(QString("*.%1").arg(QString(format).toLower())); } QString filter = QString("%1 (%2)").arg(_("Images")).arg(QStringList(formats.values()).join(" ")); QString filename = FileDialogs::saveDialog(_("Choose Output Filename..."), m_outputPath, "sourcedir", filter); if(!filename.isEmpty()) { m_outputPath = filename; genOutputPath(); } } void Acquirer::genOutputPath() { m_outputPath = Utils::makeOutputFilename(m_outputPath); ui.lineEditScanOutput->setText(m_outputPath); ui.lineEditScanOutput->setToolTip(m_outputPath); } void Acquirer::scanInitFailed() { ui.labelScanMessage->setText(QString("%1").arg(_("Failed to initialize the scanning backend."))); ui.pushButtonScan->setEnabled(false); ui.toolButtonScanDevicesRefresh->setEnabled(false); } void Acquirer::scanFailed(const QString& msg) { ui.labelScanMessage->setText(QString("%1: %2.").arg(_("Scan failed")).arg(msg)); } void Acquirer::startDetectDevices() { ui.toolButtonScanDevicesRefresh->setEnabled(false); ui.pushButtonScan->setEnabled(false); ui.labelScanMessage->setText(""); ui.comboBoxScanDevice->clear(); ui.comboBoxScanDevice->setCursor(Qt::WaitCursor); m_scanner->redetect(); } void Acquirer::doneDetectDevices(QList devices) { ui.comboBoxScanDevice->unsetCursor(); ui.toolButtonScanDevicesRefresh->setEnabled(true); if(devices.isEmpty()) { ui.labelScanMessage->setText(QString("%1").arg(_("No scanners were detected."))); } else { for(const Scanner::Device& device : devices) { ui.comboBoxScanDevice->addItem(device.label, device.name); } ui.comboBoxScanDevice->setCurrentIndex(0); ui.pushButtonScan->setEnabled(true); } } void Acquirer::startScan() { ui.pushButtonScan->setVisible(false); ui.pushButtonScanCancel->setEnabled(true); ui.pushButtonScanCancel->setVisible(true); ui.labelScanMessage->setText(_("Starting scan...")); double dpi[] = {75.0, 100.0, 200.0, 300.0, 600.0, 1200.0}; Scanner::ScanMode modes[] = {Scanner::ScanMode::GRAY, Scanner::ScanMode::COLOR}; Scanner::ScanType types[] = {Scanner::ScanType::SINGLE, Scanner::ScanType::ADF_FRONT, Scanner::ScanType::ADF_BACK, Scanner::ScanType::ADF_BOTH}; genOutputPath(); QString device = ui.comboBoxScanDevice->itemData(ui.comboBoxScanDevice->currentIndex()).toString(); Scanner::Params params = {device, m_outputPath, dpi[ui.comboBoxScanResolution->currentIndex()], modes[ui.comboBoxScanMode->currentIndex()], 8, types[ui.comboBoxScanSource->currentIndex()], 0, 0}; m_scanner->scan(params); } void Acquirer::setScanState(Scanner::State state) { if(state == Scanner::State::OPEN) { ui.labelScanMessage->setText(_("Opening device...")); } else if(state == Scanner::State::SET_OPTIONS) { ui.labelScanMessage->setText(_("Setting options...")); } else if(state == Scanner::State::START) { ui.labelScanMessage->setText(_("Starting scan...")); } else if(state == Scanner::State::GET_PARAMETERS) { ui.labelScanMessage->setText(_("Getting parameters...")); } else if(state == Scanner::State::READ) { ui.labelScanMessage->setText(_("Transferring data...")); } else if(state == Scanner::State::IDLE) { doneScan(); } } void Acquirer::cancelScan() { ui.labelScanMessage->setText(_("Canceling scan...")); m_scanner->cancel(); ui.pushButtonScanCancel->setEnabled(false); } void Acquirer::doneScan() { ui.pushButtonScanCancel->setVisible(false); ui.pushButtonScan->setVisible(true); ui.labelScanMessage->setText(""); genOutputPath(); } void Acquirer::setDeviceComboTooltip() { ui.comboBoxScanDevice->setToolTip(ui.comboBoxScanDevice->currentText()); } gImageReader-3.4.0/qt/src/Acquirer.hh000066400000000000000000000030031417507262200173430ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Acquirer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef ACQUIRER_HH #define ACQUIRER_HH #include "Scanner.hh" class UI_MainWindow; class Acquirer : public QObject { Q_OBJECT public: Acquirer(const UI_MainWindow& _ui); ~Acquirer(); signals: void scanPageAvailable(QString); private: const UI_MainWindow& ui; QString m_outputPath; Scanner* m_scanner; void genOutputPath(); private slots: void cancelScan(); void doneDetectDevices(QList devices); void doneScan(); void scanInitFailed(); void scanFailed(const QString& msg); void selectOutputPath(); void setDeviceComboTooltip(); void setScanState(Scanner::State state); void startDetectDevices(); void startScan(); }; Q_DECLARE_METATYPE(QList) #endif // ACQUIRER_HH gImageReader-3.4.0/qt/src/Config.cc000066400000000000000000000267451417507262200170050ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Config.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Config.hh" #include "ConfigSettings.hh" #include "LangTables.hh" #include "MainWindow.hh" #include "Utils.hh" #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #if TESSERACT_MAJOR_VERSION < 5 #include #endif #undef USE_STD_NAMESPACE const QList Config::LANGUAGES = LangTables::languages, QString>([](const char* str) { return QString::fromUtf8(str); }); const QMap Config::LANG_LOOKUP = [] { QMap lookup; for(const Config::Lang& lang : LANGUAGES) { lookup.insert(lang.prefix, lang.code); } return lookup; }(); const QMultiMap Config::LANGUAGE_CULTURES = LangTables::languageCultures>(); Config::Config(QWidget* parent) : QDialog(parent) { ui.setupUi(this); ui.tableWidgetPredefLang->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui.tableWidgetAdditionalLang->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui.widgetAddLang->setVisible(false); #if !ENABLE_VERSIONCHECK ui.checkBoxUpdateCheck->setVisible(false); #endif for(const Lang& lang : LANGUAGES) { int row = ui.tableWidgetPredefLang->rowCount(); ui.tableWidgetPredefLang->insertRow(row); ui.tableWidgetPredefLang->setItem(row, 0, new QTableWidgetItem(lang.prefix)); ui.tableWidgetPredefLang->setItem(row, 1, new QTableWidgetItem(lang.code)); ui.tableWidgetPredefLang->setItem(row, 2, new QTableWidgetItem(lang.name)); } connect(ui.checkBoxDefaultOutputFont, &QCheckBox::toggled, ui.pushButtonOutputFont, &QPushButton::setDisabled); connect(ui.pushButtonOutputFont, &QPushButton::clicked, &m_fontDialog, &QFontDialog::exec); connect(&m_fontDialog, &QFontDialog::fontSelected, this, &Config::updateFontButton); connect(ui.pushButtonAddLang, &QPushButton::clicked, this, &Config::toggleAddLanguage); connect(ui.pushButtonRemoveLang, &QPushButton::clicked, this, &Config::removeLanguage); connect(ui.pushButtonAddLangOk, &QPushButton::clicked, this, &Config::addLanguage); connect(ui.pushButtonAddLangCancel, &QPushButton::clicked, this, &Config::toggleAddLanguage); connect(ui.tableWidgetAdditionalLang->selectionModel(), &QItemSelectionModel::selectionChanged, this, &Config::langTableSelectionChanged); connect(ui.buttonBox->button(QDialogButtonBox::Help), &QPushButton::clicked, MAIN, [] { MAIN->showHelp(); }); connect(ui.lineEditLangPrefix, &QLineEdit::textChanged, this, &Config::clearLineEditErrorState); connect(ui.lineEditLangName, &QLineEdit::textChanged, this, &Config::clearLineEditErrorState); connect(ui.lineEditLangCode, &QLineEdit::textChanged, this, &Config::clearLineEditErrorState); connect(ui.comboBoxDataLocation, qOverload(&QComboBox::currentIndexChanged), this, &Config::setDataLocations); ADD_SETTING(SwitchSetting("dictinstall", ui.checkBoxDictInstall, true)); ADD_SETTING(SwitchSetting("updatecheck", ui.checkBoxUpdateCheck, true)); ADD_SETTING(SwitchSetting("openafterexport", ui.checkBoxOpenAfterExport, false)); ADD_SETTING(TableSetting("customlangs", ui.tableWidgetAdditionalLang)); ADD_SETTING(SwitchSetting("systemoutputfont", ui.checkBoxDefaultOutputFont, true)); ADD_SETTING(FontSetting("customoutputfont", &m_fontDialog, QFont().toString())); ADD_SETTING(ComboSetting("textencoding", ui.comboBoxEncoding, 0)); ADD_SETTING(ComboSetting("datadirs", ui.comboBoxDataLocation, 0)); ADD_SETTING(VarSetting("sourcedir", Utils::documentsFolder())); ADD_SETTING(VarSetting("outputdir", Utils::documentsFolder())); ADD_SETTING(VarSetting("auxdir", Utils::documentsFolder())); updateFontButton(m_fontDialog.currentFont()); } bool Config::searchLangSpec(Lang& lang) const { // Tesseract 4.x up to beta.1 had script tessdatas on same level as language tessdatas, but they are distinguishable in that they begin with an upper case character if(lang.prefix.startsWith("script", Qt::CaseInsensitive) || lang.prefix.left(1).toUpper() == lang.prefix.left(1)) { QString name = lang.prefix.startsWith("script", Qt::CaseInsensitive) ? lang.prefix.mid(7) : lang.prefix; lang.name = QString("%1 [%2]").arg(name).arg(_("Script")); return true; } for(const QTableWidget* table : QList {ui.tableWidgetPredefLang, ui.tableWidgetAdditionalLang}) { for(int row = 0, nRows = table->rowCount(); row < nRows; ++row) { if(table->item(row, 0)->text() == lang.prefix) { lang = {lang.prefix, table->item(row, 1)->text(), QString("%1 [%2]").arg(table->item(row, 2)->text(), lang.prefix)}; return true; } } } return false; } QStringList Config::searchLangCultures(const QString& code) const { return LANGUAGE_CULTURES.values(code); } void Config::showDialog() { toggleAddLanguage(true); exec(); ConfigSettings::get("customlangs")->serialize(); } bool Config::useUtf8() const { return ui.comboBoxEncoding->currentIndex() == 1; } bool Config::useSystemDataLocations() const { return ui.comboBoxDataLocation->currentIndex() == 0; } QString Config::tessdataLocation() const { return ui.lineEditTessdataLocation->text(); } QString Config::spellingLocation() const { return ui.lineEditSpellLocation->text(); } QStringList Config::getAvailableLanguages() { Utils::TesseractHandle tess; if(!tess.get()) { return QStringList(); } #if TESSERACT_MAJOR_VERSION < 5 GenericVector availLanguages; #else std::vector availLanguages; #endif tess.get()->GetAvailableLanguagesAsVector(&availLanguages); QStringList result; for(int i = 0; i < availLanguages.size(); ++i) { result.append(availLanguages[i].c_str()); } std::sort(result.begin(), result.end(), [](const QString & s1, const QString & s2) { bool s1Script = s1.startsWith("script") || s1.left(1) == s1.left(1).toUpper(); bool s2Script = s2.startsWith("script") || s2.left(1) == s2.left(1).toUpper(); if(s1Script != s2Script) { return !s1Script; } else { return s1 < s2; } }); return result; } void Config::disableDictInstall() { ConfigSettings::get("dictinstall")->setValue(false); } void Config::disableUpdateCheck() { ConfigSettings::get("updatecheck")->setValue(false); } void Config::setDataLocations(int idx) { ui.lineEditSpellLocation->setText(spellingLocation(static_cast(idx))); ui.lineEditTessdataLocation->setText(tessdataLocation(static_cast(idx))); } void Config::openTessdataDir() { int idx = QSettings().value("datadirs").toInt(); QString tessdataDir = tessdataLocation(static_cast(idx)); QDir().mkpath(tessdataDir); QDesktopServices::openUrl(QUrl::fromLocalFile(tessdataDir)); } void Config::openSpellingDir() { int idx = QSettings().value("datadirs").toInt(); QString spellingDir = spellingLocation(static_cast(idx)); QDir().mkpath(spellingDir); QDesktopServices::openUrl(QUrl::fromLocalFile(spellingDir)); } QString Config::spellingLocation(Location location) { if(location == SystemLocation) { #ifdef Q_OS_WIN QDir dataDir = QDir(QString("%1/../share/").arg(QApplication::applicationDirPath())); #else char* prefix = enchant_get_prefix_dir(); QDir dataDir(QDir(prefix).absoluteFilePath("share")); free(prefix); #endif #if HAVE_ENCHANT2 if(QDir(dataDir.absoluteFilePath("myspell")).exists()) { return dataDir.absoluteFilePath("myspell"); } else { return dataDir.absoluteFilePath("hunspell"); } #else return dataDir.absoluteFilePath("myspell/dicts"); #endif } else { QDir configDir = QDir(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation)); #if HAVE_ENCHANT2 return configDir.absoluteFilePath("enchant/hunspell"); #else return configDir.absoluteFilePath("enchant/myspell"); #endif } } QString Config::tessdataLocation(Location location) { if(location == SystemLocation) { #ifdef Q_OS_WIN QDir dataDir = QDir(QString("%1/../share/").arg(QApplication::applicationDirPath())); qputenv("TESSDATA_PREFIX", dataDir.absoluteFilePath("tessdata").toLocal8Bit()); #else qunsetenv("TESSDATA_PREFIX"); #endif } else { QDir configDir = QDir(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation)); qputenv("TESSDATA_PREFIX", configDir.absoluteFilePath("tessdata").toLocal8Bit()); } QByteArray current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; tess.Init(nullptr, nullptr); setlocale(LC_ALL, current.constData()); return QString(tess.GetDatapath()); } void Config::toggleAddLanguage(bool forceHide) { bool addVisible = forceHide ? true : ui.widgetAddLang->isVisible(); ui.widgetAddLang->setVisible(!addVisible); ui.widgetAddRemoveLang->setVisible(addVisible); if(addVisible) { ui.pushButtonAddLang->setFocus(); } else { ui.pushButtonAddLangOk->setFocus(); } ui.lineEditLangPrefix->setText(""); ui.lineEditLangPrefix->setStyleSheet(""); ui.lineEditLangCode->setText(""); ui.lineEditLangCode->setStyleSheet(""); ui.lineEditLangName->setText(""); ui.lineEditLangName->setStyleSheet(""); } void Config::addLanguage() { QString errorStyle = "background: #FF7777; color: #FFFFFF;"; bool invalid = false; if(!QRegularExpression("^\\w+$").match(ui.lineEditLangPrefix->text()).hasMatch()) { invalid = true; ui.lineEditLangPrefix->setStyleSheet(errorStyle); } if(!QRegularExpression("^.+$").match(ui.lineEditLangName->text()).hasMatch()) { invalid = true; ui.lineEditLangName->setStyleSheet(errorStyle); } if(!QRegularExpression("^[a-z]{2,}(_[A-Z]{2,})?$").match(ui.lineEditLangCode->text()).hasMatch()) { invalid = true; ui.lineEditLangCode->setStyleSheet(errorStyle); } if(!invalid) { int row = ui.tableWidgetAdditionalLang->rowCount(); ui.tableWidgetAdditionalLang->insertRow(row); ui.tableWidgetAdditionalLang->setItem(row, 0, new QTableWidgetItem(ui.lineEditLangPrefix->text())); ui.tableWidgetAdditionalLang->setItem(row, 1, new QTableWidgetItem(ui.lineEditLangCode->text())); ui.tableWidgetAdditionalLang->setItem(row, 2, new QTableWidgetItem(ui.lineEditLangName->text())); ui.lineEditLangPrefix->setText(""); ui.lineEditLangCode->setText(""); ui.lineEditLangName->setText(""); toggleAddLanguage(); } } void Config::removeLanguage() { for(const QModelIndex& index : ui.tableWidgetAdditionalLang->selectionModel()->selectedRows()) { ui.tableWidgetAdditionalLang->removeRow(index.row()); } } void Config::updateFontButton(const QFont& font) { ui.pushButtonOutputFont->setText(QString("%1 %2").arg(font.family()).arg(font.pointSize())); } void Config::langTableSelectionChanged(const QItemSelection& selected, const QItemSelection& /*deselected*/) { ui.pushButtonRemoveLang->setDisabled(selected.isEmpty()); } void Config::clearLineEditErrorState() { static_cast(QObject::sender())->setStyleSheet(""); } gImageReader-3.4.0/qt/src/Config.hh000066400000000000000000000044441417507262200170070ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Config.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CONFIG_HH #define CONFIG_HH #include "common.hh" #include "ui_ConfigDialog.h" #include #include class Config : public QDialog { Q_OBJECT public: struct Lang { QString prefix, code, name; }; Config(QWidget* parent = nullptr); bool searchLangSpec(Lang& lang) const; QStringList searchLangCultures(const QString& code) const; void showDialog(); bool useUtf8() const; bool useSystemDataLocations() const; QString tessdataLocation() const; QString spellingLocation() const; static void openTessdataDir(); static void openSpellingDir(); static QString lookupLangCode(const QString& prefix) { return LANG_LOOKUP[prefix]; } static QStringList getAvailableLanguages(); public slots: void disableDictInstall(); void disableUpdateCheck(); private: enum Location {SystemLocation = 0, UserLocation = 1}; static const QList LANGUAGES; static const QMap LANG_LOOKUP; static const QMultiMap LANGUAGE_CULTURES; Ui::ConfigDialog ui; QFontDialog m_fontDialog; static QString spellingLocation(Location location); static QString tessdataLocation(Location location); private slots: void addLanguage(); void removeLanguage(); void updateFontButton(const QFont& font); void langTableSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected); void clearLineEditErrorState(); void setDataLocations(int idx); void toggleAddLanguage(bool forceHide = false); }; Q_DECLARE_METATYPE(Config::Lang) #endif // CONFIG_HH gImageReader-3.4.0/qt/src/ConfigSettings.cc000066400000000000000000000042661417507262200205200ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ConfigSettings.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" QMap ConfigSettings::s_settings; void ConfigSettings::add(AbstractSetting* setting) { s_settings.insert(setting->key(), setting); } void ConfigSettings::remove(const QString& key) { auto it = s_settings.find(key); if(it != s_settings.end()) { s_settings.erase(it); } } TableSetting::TableSetting(const QString& key, QTableWidget* table) : AbstractSetting(key), m_table(table) { QString str = QSettings().value(m_key).toString(); m_table->setRowCount(0); int nCols = m_table->columnCount(); for(const QString& row : str.split(';', Qt::SkipEmptyParts)) { int colidx = 0; QStringList cols = row.split(','); if(cols.size() != nCols) { continue; } int rowidx = m_table->rowCount(); m_table->insertRow(rowidx); for(const QString& col : cols) { m_table->setItem(rowidx, colidx++, new QTableWidgetItem(col)); } } } void TableSetting::serialize() { // Serialized string has format a11,a12,a13;a21,a22,a23;... QStringList rows; int nCols = m_table->columnCount(); for(int row = 0, nRows = m_table->rowCount(); row < nRows; ++row) { QStringList cols; for(int col = 0; col < nCols; ++col) { QTableWidgetItem* item = m_table->item(row, col); cols.append(item ? item->text() : QString()); } rows.append(cols.join(",")); } QSettings().setValue(m_key, QVariant::fromValue(rows.join(";"))); emit changed(); } gImageReader-3.4.0/qt/src/ConfigSettings.hh000066400000000000000000000152331417507262200205260ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ConfigSettings.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CONFIGSETTINGS_HH #define CONFIGSETTINGS_HH #include #include #include #include #include #include #include #include #include #include class AbstractSetting; #define ADD_SETTING(...) ((new __VA_ARGS__)->setParent(this)) class ConfigSettings { public: template static T* get(const QString& key) { auto it = s_settings.find(key); return it == s_settings.end() ? nullptr : static_cast(it.value()); } private: friend class AbstractSetting; static QMap s_settings; static void add(AbstractSetting* setting); static void remove(const QString& key); }; class AbstractSetting : public QObject { Q_OBJECT public: AbstractSetting(const QString& key) : m_key(key) { ConfigSettings::add(this); } virtual ~AbstractSetting() { ConfigSettings::remove(m_key); } const QString& key() const { return m_key; } public slots: virtual void serialize() {} signals: void changed(); protected: QString m_key; }; template class VarSetting : public AbstractSetting { public: VarSetting(const QString& key, const T& defaultValue = T()) : AbstractSetting(key), m_defaultValue(QVariant::fromValue(defaultValue)) {} T getValue() const { return QSettings().value(m_key, m_defaultValue).template value(); } void setValue(const T& value) { QSettings().setValue(m_key, QVariant::fromValue(value)); emit changed(); } private: QVariant m_defaultValue; }; class FontSetting : public AbstractSetting { Q_OBJECT public: FontSetting(const QString& key, QFontDialog* dialog, const QString& defaultValue) : AbstractSetting(key), m_dialog(dialog) { QFont font; if(font.fromString(QSettings().value(m_key, QVariant::fromValue(defaultValue)).toString())) { m_dialog->setCurrentFont(font); } connect(dialog, &QFontDialog::fontSelected, this, &FontSetting::serialize); } QFont getValue() const { return m_dialog->currentFont(); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_dialog->selectedFont().toString())); emit changed(); } private: QFontDialog* m_dialog; }; class SwitchSetting : public AbstractSetting { Q_OBJECT public: SwitchSetting(const QString& key, QAbstractButton* button, bool defaultState = false) : AbstractSetting(key), m_button(button) { button->setChecked(QSettings().value(m_key, QVariant::fromValue(defaultState)).toBool()); connect(button, &QAbstractButton::toggled, this, &SwitchSetting::serialize); } void setValue(bool value) { m_button->setChecked(value); } bool getValue() const { return m_button->isChecked(); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_button->isChecked())); emit changed(); } private: QAbstractButton* m_button; }; class ActionSetting : public AbstractSetting { Q_OBJECT public: ActionSetting(const QString& key, QAction* action, bool defaultState = false) : AbstractSetting(key), m_action(action) { action->setChecked(QSettings().value(m_key, QVariant::fromValue(defaultState)).toBool()); connect(action, &QAction::toggled, this, &ActionSetting::serialize); } void setValue(bool value) { m_action->setChecked(value); } bool getValue() const { return m_action->isChecked(); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_action->isChecked())); emit changed(); } private: QAction* m_action; }; class ComboSetting : public AbstractSetting { Q_OBJECT public: ComboSetting(const QString& key, QComboBox* combo, int defaultIndex = 0) : AbstractSetting(key), m_combo(combo) { combo->setCurrentIndex(QSettings().value(m_key, QVariant::fromValue(defaultIndex)).toInt()); connect(combo, qOverload(&QComboBox::currentIndexChanged), this, &ComboSetting::serialize); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_combo->currentIndex())); emit changed(); } private: QComboBox* m_combo; }; class FontComboSetting : public AbstractSetting { Q_OBJECT public: FontComboSetting(const QString& key, QFontComboBox* combo, const QFont defaultFont = QFont()) : AbstractSetting(key), m_combo(combo) { combo->setCurrentFont(QFont(QSettings().value(m_key, defaultFont.family()).toString())); connect(combo, &QFontComboBox::currentFontChanged, this, &FontComboSetting::serialize); } public slots: void serialize() override { QSettings().setValue(m_key, m_combo->currentFont().family()); emit changed(); } private: QFontComboBox* m_combo; }; class SpinSetting : public AbstractSetting { Q_OBJECT public: SpinSetting(const QString& key, QSpinBox* spin, int defaultValue = 0) : AbstractSetting(key), m_spin(spin) { spin->setValue(QSettings().value(m_key, QVariant::fromValue(defaultValue)).toInt()); connect(spin, qOverload(&QSpinBox::valueChanged), this, &SpinSetting::serialize); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_spin->value())); emit changed(); } private: QSpinBox* m_spin; }; class TableSetting : public AbstractSetting { Q_OBJECT public: TableSetting(const QString& key, QTableWidget* table); public slots: void serialize() override; private: QTableWidget* m_table; }; class LineEditSetting : public AbstractSetting { Q_OBJECT public: LineEditSetting(const QString& key, QLineEdit* lineEdit, const QString& defaultValue = "") : AbstractSetting(key), m_lineEdit(lineEdit) { lineEdit->setText(QSettings().value(m_key, QVariant::fromValue(defaultValue)).toString()); connect(lineEdit, &QLineEdit::textChanged, this, &LineEditSetting::serialize); } public slots: void serialize() override { QSettings().setValue(m_key, QVariant::fromValue(m_lineEdit->text())); emit changed(); } private: QLineEdit* m_lineEdit; }; #endif // CONFIGSETTINGS_HH gImageReader-3.4.0/qt/src/CrashHandler.cc000066400000000000000000000072541417507262200201300ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CrashHandler.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "common.hh" #include "CrashHandler.hh" #include CrashHandler::CrashHandler(int pid, int tesseractCrash, const QString& savefile, QWidget* parent): QDialog(parent), m_pid(pid) { ui.setupUi(this); ui.labelIntroTesseract->setVisible(tesseractCrash); ui.labelIntro->setVisible(!tesseractCrash); if(!savefile.isEmpty()) { ui.labelAutosave->setText(_("Your work has been saved under %1.").arg(savefile)); } else { ui.labelAutosave->setText(_("There was no unsaved work.")); } setWindowTitle(QString("%1 - %2").arg(PACKAGE_NAME).arg( _("Crash Handler"))); m_refreshButton = new QPushButton(QIcon::fromTheme("view-refresh"), _("Regenerate backtrace")); m_refreshButton->setEnabled(false); ui.buttonBox->addButton(m_refreshButton, QDialogButtonBox::ActionRole); connect(m_refreshButton, &QPushButton::clicked, this, &CrashHandler::regenerateBacktrace); m_gdbProcess.setProcessChannelMode(QProcess::SeparateChannels); connect(&m_gdbProcess, &QProcess::readyReadStandardOutput, this, &CrashHandler::appendGdbOutput); connect(&m_gdbProcess, qOverload(&QProcess::finished), this, &CrashHandler::handleGdbFinished); regenerateBacktrace(); } void CrashHandler::closeEvent(QCloseEvent*) { m_gdbProcess.kill(); } void CrashHandler::appendGdbOutput() { ui.plainTextEditBacktrace->appendPlainText(m_gdbProcess.readAllStandardOutput()); } void CrashHandler::handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus) { ui.progressBarBacktrace->setVisible(false); m_refreshButton->setEnabled(true); if(exitCode != 0 || exitStatus != QProcess::NormalExit) { ui.plainTextEditBacktrace->appendPlainText(_("Failed to obtain backtrace. Is GDB installed?")); } else { QStringList lines = ui.plainTextEditBacktrace->toPlainText().split("\n", Qt::SkipEmptyParts); ui.plainTextEditBacktrace->setPlainText(lines[0]); ui.plainTextEditBacktrace->appendPlainText("\n"); for(int i = 1, n = lines.length(); i < n; ++i) { if(lines[i].startsWith("Thread")) { ui.plainTextEditBacktrace->appendPlainText("\n"); ui.plainTextEditBacktrace->appendPlainText(lines[i]); } else if(lines[i].startsWith('#')) { ui.plainTextEditBacktrace->appendPlainText(lines[i]); } } } QTextCursor c = ui.plainTextEditBacktrace->textCursor(); c.movePosition(QTextCursor::Start); ui.plainTextEditBacktrace->setTextCursor(c); ui.plainTextEditBacktrace->ensureCursorVisible(); } void CrashHandler::regenerateBacktrace() { ui.plainTextEditBacktrace->setPlainText(QString("%1 %2 (%3)\n\n").arg(PACKAGE_NAME).arg(PACKAGE_VERSION).arg(PACKAGE_REVISION)); m_refreshButton->setEnabled(false); ui.progressBarBacktrace->setVisible(true); m_gdbProcess.start("gdb", QStringList() << "-p" << QString::number(m_pid)); m_gdbProcess.write("set pagination off\n"); m_gdbProcess.write("bt\n"); m_gdbProcess.write("thread apply all bt full\n"); m_gdbProcess.write("quit\n"); } gImageReader-3.4.0/qt/src/CrashHandler.hh000066400000000000000000000026061417507262200201360ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * CrashHandler.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef CRASHHANDLER_HH #define CRASHHANDLER_HH #include "ui_CrashHandler.h" #include #include class CrashHandler : public QDialog { Q_OBJECT public: explicit CrashHandler(int pid, int tesseractCrash, const QString& savefile, QWidget* parent = 0); private: Ui::CrashHandler ui; int m_pid; QProcess m_gdbProcess; QPushButton* m_refreshButton = nullptr; void closeEvent(QCloseEvent*) override; private slots: void appendGdbOutput(); void handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus); void regenerateBacktrace(); }; #endif // CRASHHANDLER_HH gImageReader-3.4.0/qt/src/DisplayRenderer.cc000066400000000000000000000122441417507262200206610ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayRenderer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include #else #pragma GCC push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #pragma GCC pop #endif #include #include #include "DjVuDocument.hh" #include "DisplayRenderer.hh" #include "Utils.hh" void DisplayRenderer::adjustImage(QImage& image, int brightness, int contrast, bool invert) const { if(brightness == 0 && contrast == 0 && !invert) { return; } double kBr = 1.0 - std::abs(brightness / 200.0); double dBr = brightness > 0 ? 255.0 : 0.0; double kCn = contrast * 2.55; double FCn = (259.0 * (kCn + 255.0)) / (255.0 * (259.0 - kCn)); int nLinePixels = image.bytesPerLine() / 4; int nLines = image.height(); #pragma omp parallel for for(int line = 0; line < nLines; ++line) { QRgb* rgb = reinterpret_cast(image.scanLine(line)); for(int i = 0; i < nLinePixels; ++i) { int red = qRed(rgb[i]); int green = qGreen(rgb[i]); int blue = qBlue(rgb[i]); // Brighntess red = dBr * (1.0 - kBr) + red * kBr; green = dBr * (1.0 - kBr) + green * kBr; blue = dBr * (1.0 - kBr) + blue * kBr; // Contrast red = std::max(0.0, std::min(FCn * (red - 128.0) + 128.0, 255.0)); green = std::max(0.0, std::min(FCn * (green - 128.0) + 128.0, 255.0)); blue = std::max(0.0, std::min(FCn * (blue - 128.0) + 128.0, 255.0)); // Invert if(invert) { red = 255 - red; green = 255 - green; blue = 255 - blue; } rgb[i] = qRgb(red, green, blue); } } } ImageRenderer::ImageRenderer(const QString& filename) : DisplayRenderer(filename) { m_pageCount = QImageReader(m_filename).imageCount(); } QImage ImageRenderer::render(int page, double resolution) const { QImageReader reader(m_filename); reader.jumpToImage(page - 1); reader.setBackgroundColor(Qt::white); reader.setScaledSize(reader.size() * resolution / 100.0); return reader.read().convertToFormat(QImage::Format_RGB32); } QImage ImageRenderer::renderThumbnail(int page) const { QImageReader reader(m_filename); reader.jumpToImage(page - 1); reader.setBackgroundColor(Qt::white); QSize size = reader.size(); double scale = size.width() > size.height() ? (64. / size.width()) : (64. / size.height()); reader.setScaledSize(size * scale); return reader.read().convertToFormat(QImage::Format_RGB32); } PDFRenderer::PDFRenderer(const QString& filename, const QByteArray& password) : DisplayRenderer(filename) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) m_document = Poppler::Document::load(filename); #else m_document = std::unique_ptr(Poppler::Document::load(filename)); #endif if(m_document) { if(m_document->isLocked()) { m_document->unlock(password, password); } m_document->setRenderHint(Poppler::Document::Antialiasing); m_document->setRenderHint(Poppler::Document::TextAntialiasing); } } QImage PDFRenderer::render(int page, double resolution) const { if(!m_document) { return QImage(); } m_mutex.lock(); std::unique_ptr poppage(m_document->page(page - 1)); m_mutex.unlock(); QImage image = poppage->renderToImage(resolution, resolution); return image.convertToFormat(QImage::Format_RGB32); } QImage PDFRenderer::renderThumbnail(int page) const { if(!m_document) { return QImage(); } m_mutex.lock(); std::unique_ptr poppage(m_document->page(page - 1)); m_mutex.unlock(); // Resolution such that largest dimension is 64px // [points] / 72 * resolution = 64 => resolution = 64 * 72 / points QSizeF size = poppage->pageSizeF(); double resolution = 64. * 72. / qMax(size.width(), size.height()); QImage image = poppage->renderToImage(resolution, resolution); return image.convertToFormat(QImage::Format_RGB32); } int PDFRenderer::getNPages() const { return m_document ? m_document->numPages() : 1; } DJVURenderer::DJVURenderer(const QString& filename) : DisplayRenderer(filename) { m_djvu = new DjVuDocument(); m_djvu->openFile(filename); } DJVURenderer::~DJVURenderer() { delete m_djvu; } QImage DJVURenderer::render(int page, double resolution) const { return m_djvu->image(page, resolution); } QImage DJVURenderer::renderThumbnail(int pageno) const { const DjVuDocument::Page& page = m_djvu->page(pageno); double resolution = 64. / qMax(page.width, page.height) * page.dpi; return m_djvu->image(pageno, resolution); } int DJVURenderer::getNPages() const { return m_djvu->pageCount(); } gImageReader-3.4.0/qt/src/DisplayRenderer.hh000066400000000000000000000045121417507262200206720ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayRenderer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYRENDERER_HH #define DISPLAYRENDERER_HH #include #include #include class DjVuDocument; class QImage; namespace Poppler { class Document; } class DisplayRenderer { public: DisplayRenderer(const QString& filename) : m_filename(filename) {} virtual ~DisplayRenderer() {} virtual QImage render(int page, double resolution) const = 0; virtual QImage renderThumbnail(int page) const = 0; virtual int getNPages() const = 0; void adjustImage(QImage& image, int brightness, int contrast, bool invert) const; protected: QString m_filename; }; class ImageRenderer : public DisplayRenderer { public: ImageRenderer(const QString& filename) ; QImage render(int page, double resolution) const override; QImage renderThumbnail(int page) const override; int getNPages() const override { return m_pageCount; } private: int m_pageCount; }; class PDFRenderer : public DisplayRenderer { public: PDFRenderer(const QString& filename, const QByteArray& password); QImage render(int page, double resolution) const override; QImage renderThumbnail(int page) const override; int getNPages() const override; private: std::unique_ptr m_document; mutable QMutex m_mutex; }; class DJVURenderer : public DisplayRenderer { public: DJVURenderer(const QString& filename); ~DJVURenderer(); QImage render(int page, double resolution) const override; QImage renderThumbnail(int page) const override; int getNPages() const override; private: DjVuDocument* m_djvu; }; #endif // IMAGERENDERER_HH gImageReader-3.4.0/qt/src/Displayer.cc000066400000000000000000000602651417507262200175270ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Displayer.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "MainWindow.hh" #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayRenderer.hh" #include "SourceManager.hh" #include "Utils.hh" #include #include #include #include #include #include #include #include #include #include #include class GraphicsScene : public QGraphicsScene { public: using QGraphicsScene::QGraphicsScene; protected: void dragEnterEvent(QGraphicsSceneDragDropEvent* event) { if(Utils::handleSourceDragEvent(event->mimeData())) { event->acceptProposedAction(); } } void dragMoveEvent(QGraphicsSceneDragDropEvent* /*event*/) {} void dropEvent(QGraphicsSceneDragDropEvent* event) { Utils::handleSourceDropEvent(event->mimeData()); } }; Displayer::Displayer(const UI_MainWindow& _ui, QWidget* parent) : QGraphicsView(parent), ui(_ui) { m_scene = new GraphicsScene(); setScene(m_scene); setBackgroundBrush(Qt::gray); setRenderHint(QPainter::Antialiasing); m_rotateMode = RotateMode::AllPages; ui.actionRotateCurrentPage->setData(static_cast(RotateMode::CurrentPage)); ui.actionRotateAllPages->setData(static_cast(RotateMode::AllPages)); m_renderTimer.setSingleShot(true); m_scaleTimer.setSingleShot(true); ui.actionRotateLeft->setData(270.0); ui.actionRotateRight->setData(90.0); connect(ui.menuRotation, &QMenu::triggered, this, &Displayer::setRotateMode); connect(ui.actionRotateLeft, &QAction::triggered, this, &Displayer::rotate90); connect(ui.actionRotateRight, &QAction::triggered, this, &Displayer::rotate90); connect(ui.spinBoxRotation, qOverload(&QDoubleSpinBox::valueChanged), this, &Displayer::setAngle); connect(ui.spinBoxPage, qOverload(&QSpinBox::valueChanged), this, &Displayer::queueRenderImage); connect(ui.spinBoxBrightness, qOverload(&QSpinBox::valueChanged), this, &Displayer::queueRenderImage); connect(ui.spinBoxContrast, qOverload(&QSpinBox::valueChanged), this, &Displayer::queueRenderImage); connect(ui.spinBoxResolution, qOverload(&QSpinBox::valueChanged), this, &Displayer::queueRenderImage); connect(ui.checkBoxInvertColors, &QCheckBox::toggled, this, &Displayer::queueRenderImage); connect(ui.actionZoomIn, &QAction::triggered, this, &Displayer::zoomIn); connect(ui.actionZoomOut, &QAction::triggered, this, &Displayer::zoomOut); connect(ui.actionBestFit, &QAction::triggered, this, &Displayer::zoomFit); connect(ui.actionOriginalSize, &QAction::triggered, this, &Displayer::zoomOriginal); connect(&m_renderTimer, &QTimer::timeout, this, &Displayer::renderImage); connect(&m_scaleTimer, &QTimer::timeout, this, &Displayer::scaleImage); connect(&m_scaleWatcher, &QFutureWatcher::finished, this, [this] { setScaledImage(m_scaleWatcher.future().result()); }); connect(&m_thumbnailWatcher, &QFutureWatcher::resultReadyAt, this, &Displayer::setThumbnail); connect(ui.listWidgetThumbnails, &QListWidget::currentRowChanged, [this](int idx) { if(ui.checkBoxThumbnails->isChecked()) { ui.spinBoxPage->setValue(idx + 1); } }); connect(ui.checkBoxThumbnails, &QCheckBox::toggled, this, &Displayer::thumbnailsToggled); connect(ui.spinBoxPage, qOverload(&QSpinBox::valueChanged), this, [this](int page) { QSignalBlocker blocker(ui.listWidgetThumbnails); ui.listWidgetThumbnails->setCurrentRow(page - 1); }); connect(horizontalScrollBar(), &QScrollBar::valueChanged, this, &Displayer::checkViewportChanged); connect(horizontalScrollBar(), &QScrollBar::rangeChanged, this, &Displayer::checkViewportChanged); connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &Displayer::checkViewportChanged); connect(verticalScrollBar(), &QScrollBar::rangeChanged, this, &Displayer::checkViewportChanged); ADD_SETTING(SwitchSetting("thumbnails", ui.checkBoxThumbnails, true)); } Displayer::~Displayer() { setSources(QList()); delete m_scene; } bool Displayer::setSources(QList sources) { if(sources == m_sources) { return true; } m_scaleTimer.stop(); m_scaleWatcher.waitForFinished(); m_thumbnailWatcher.cancel(); m_thumbnailWatcher.waitForFinished(); ui.listWidgetThumbnails->clear(); if(m_tool) { m_tool->reset(); } m_renderTimer.stop(); if(m_imageItem) { m_scene->removeItem(m_imageItem); } m_currentSource = nullptr; qDeleteAll(m_sourceRenderers); m_sourceRenderers.clear(); m_sources.clear(); m_pageMap.clear(); m_pixmap = QPixmap(); m_imageItem = nullptr; ui.actionBestFit->setChecked(true); ui.actionPage->setVisible(false); ui.spinBoxPage->blockSignals(true); ui.spinBoxPage->setRange(1, 1); ui.spinBoxPage->blockSignals(false); Utils::setSpinBlocked(ui.spinBoxRotation, 0); Utils::setSpinBlocked(ui.spinBoxBrightness, 0); Utils::setSpinBlocked(ui.spinBoxContrast, 0); Utils::setSpinBlocked(ui.spinBoxResolution, 100); ui.checkBoxInvertColors->blockSignals(true); ui.checkBoxInvertColors->setChecked(false); ui.checkBoxInvertColors->blockSignals(false); ui.actionBestFit->setChecked(true); ui.actionOriginalSize->setChecked(false); ui.actionZoomIn->setEnabled(true); ui.actionZoomOut->setEnabled(true); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); unsetCursor(); m_sources = sources; if(m_sources.isEmpty()) { emit imageChanged(); return false; } int page = 0; for(Source* source : m_sources) { DisplayRenderer* renderer = nullptr; if(source->path.endsWith(".pdf", Qt::CaseInsensitive)) { renderer = new PDFRenderer(source->path, source->password); if(source->resolution == -1) { source->resolution = 300; } } else if(source->path.endsWith(".djvu", Qt::CaseInsensitive)) { renderer = new DJVURenderer(source->path); if(source->resolution == -1) { source->resolution = 300; } } else { renderer = new ImageRenderer(source->path); if(source->resolution == -1) { source->resolution = 100; } } if(renderer->getNPages() >= 0) { source->angle.resize(renderer->getNPages()); // getNPages can potentially return -1 } m_sourceRenderers[source] = renderer; for(int iPage = 1, nPages = renderer->getNPages(); iPage <= nPages; ++iPage) { m_pageMap.insert(++page, qMakePair(source, iPage)); } } if(page == 0) { return setSources(QList()); // cleanup } generateThumbnails(); ui.spinBoxPage->blockSignals(true); ui.spinBoxPage->setMaximum(page); ui.spinBoxPage->blockSignals(false); ui.actionPage->setVisible(page > 1); m_imageItem = new QGraphicsPixmapItem(); m_imageItem->setTransformationMode(Qt::SmoothTransformation); m_scene->addItem(m_imageItem); if(!renderImage()) { Q_ASSERT(m_currentSource); QMessageBox::critical(this, _("Failed to load image"), _("The file might not be an image or be corrupt:\n%1").arg(m_currentSource->displayname)); setSources(QList()); return false; } return true; } bool Displayer::setup(const int* page, const int* resolution, const double* angle) { bool changed = false; if(page) { changed |= *page != ui.spinBoxPage->value(); Utils::setSpinBlocked(ui.spinBoxPage, *page); QSignalBlocker blocker(ui.listWidgetThumbnails); ui.listWidgetThumbnails->setCurrentRow(*page - 1); } if(resolution) { changed |= *resolution != ui.spinBoxResolution->value(); Utils::setSpinBlocked(ui.spinBoxResolution, *resolution); } if(changed && !renderImage()) { return false; } if(angle) { setAngle(*angle); } return true; } void Displayer::queueRenderImage() { m_renderTimer.start(500); } bool Displayer::renderImage() { if(m_sources.isEmpty()) { return false; } int page = ui.spinBoxPage->value(); // Set current source according to selected page Source* source = m_pageMap[page].first; if(!source) { return false; } m_scaleTimer.stop(); m_scaleWatcher.waitForFinished(); int oldResolution = m_currentSource ? m_currentSource->resolution : -1; int oldPage = m_currentSource ? m_currentSource->page : -1; Source* oldSource = m_currentSource; if(source != m_currentSource) { Utils::setSpinBlocked(ui.spinBoxResolution, source->resolution); Utils::setSpinBlocked(ui.spinBoxBrightness, source->brightness); Utils::setSpinBlocked(ui.spinBoxContrast, source->contrast); ui.checkBoxInvertColors->blockSignals(true); ui.checkBoxInvertColors->setChecked(source->invert); ui.checkBoxInvertColors->blockSignals(false); m_currentSource = source; } // Update source struct m_currentSource->page = m_pageMap[ui.spinBoxPage->value()].second; m_currentSource->brightness = ui.spinBoxBrightness->value(); m_currentSource->contrast = ui.spinBoxContrast->value(); m_currentSource->resolution = ui.spinBoxResolution->value(); m_currentSource->invert = ui.checkBoxInvertColors->isChecked(); // Notify tools about changes if(m_tool) { if(m_currentSource != oldSource || m_currentSource->page != oldPage) { m_tool->pageChanged(); } if(oldResolution != m_currentSource->resolution) { double factor = double(m_currentSource->resolution) / double(oldResolution); m_tool->resolutionChanged(factor); } } Utils::setSpinBlocked(ui.spinBoxRotation, m_currentSource->angle[m_currentSource->page - 1]); // Render new image DisplayRenderer* renderer = m_sourceRenderers[m_currentSource]; if(!renderer) { return false; } QImage image = renderer->render(m_currentSource->page, m_currentSource->resolution); if(image.isNull()) { return false; } renderer->adjustImage(image, m_currentSource->brightness, m_currentSource->contrast, m_currentSource->invert); m_pixmap = QPixmap::fromImage(image); m_imageItem->setPixmap(m_pixmap); m_imageItem->setScale(1.); m_imageItem->setTransformOriginPoint(m_imageItem->boundingRect().center()); m_imageItem->setPos(m_imageItem->pos() - m_imageItem->sceneBoundingRect().center()); m_scene->setSceneRect(m_imageItem->sceneBoundingRect()); centerOn(sceneRect().center()); setAngle(ui.spinBoxRotation->value()); if(m_scale < 1.0) { m_scaleTimer.start(100); } emit imageChanged(); return true; } int Displayer::getCurrentPage() const { return ui.spinBoxPage->value(); } int Displayer::getNPages() const { return ui.spinBoxPage->maximum(); } double Displayer::getCurrentAngle() const { return ui.spinBoxRotation->value(); } int Displayer::getCurrentResolution() const { return ui.spinBoxResolution->value(); } QString Displayer::getCurrentImage(int& page) const { page = m_pageMap[ui.spinBoxPage->value()].second; return m_pageMap[ui.spinBoxPage->value()].first ? m_pageMap[ui.spinBoxPage->value()].first->path : ""; } bool Displayer::resolvePage(int page, QString& source, int& sourcePage) const { auto it = m_pageMap.find(page); if(it == m_pageMap.end()) { return false; } source = it.value().first->path; sourcePage = it.value().second; return true; } bool Displayer::hasMultipleOCRAreas() { return m_tool->hasMultipleOCRAreas(); } QList Displayer::getOCRAreas() { return m_tool->getOCRAreas(); } bool Displayer::allowAutodetectOCRAreas() const { return m_tool->allowAutodetectOCRAreas(); } void Displayer::autodetectOCRAreas() { m_tool->autodetectOCRAreas(); } void Displayer::checkViewportChanged() { if(m_viewportTransform != viewportTransform()) { m_viewportTransform = viewportTransform(); emit viewportChanged(); } } void Displayer::setZoom(Zoom action, ViewportAnchor anchor) { if(!m_imageItem) { return; } m_scaleTimer.stop(); m_scaleWatcher.waitForFinished(); setUpdatesEnabled(false); QRectF bb = m_imageItem->sceneBoundingRect(); double fit = std::min(viewport()->width() / bb.width(), viewport()->height() / bb.height()); if(action == Zoom::Original) { m_scale = 1.0; } else if(action == Zoom::In) { m_scale = std::min(10., m_scale * 1.25); } else if(action == Zoom::Out) { m_scale = std::max(0.05, m_scale * 0.8); } ui.actionBestFit->setChecked(false); if(action == Zoom::Fit || (m_scale / fit >= 0.9 && m_scale / fit <= 1.09)) { m_scale = fit; ui.actionBestFit->setChecked(true); } Qt::ScrollBarPolicy scrollPolicy = m_scale <= fit ? Qt::ScrollBarAlwaysOff : Qt::ScrollBarAsNeeded; setHorizontalScrollBarPolicy(scrollPolicy); setVerticalScrollBarPolicy(scrollPolicy); ui.actionOriginalSize->setChecked(m_scale == 1.0); ui.actionZoomIn->setEnabled(m_scale < 10); ui.actionZoomOut->setEnabled(m_scale > 0.01); setTransformationAnchor(anchor); QTransform t; t.scale(m_scale, m_scale); setTransform(t); if(m_scale < 1.0) { m_scaleTimer.start(100); } else { m_imageItem->setPixmap(m_pixmap); m_imageItem->setScale(1.); m_imageItem->setTransformOriginPoint(m_imageItem->boundingRect().center()); m_imageItem->setPos(m_imageItem->pos() - m_imageItem->sceneBoundingRect().center()); } setUpdatesEnabled(true); update(); checkViewportChanged(); } void Displayer::setAngle(double angle) { if(m_imageItem) { angle = angle < 0.0 ? angle + 360.0 : angle >= 360.0 ? angle - 360.0 : angle, Utils::setSpinBlocked(ui.spinBoxRotation, angle); int sourcePage = m_pageMap[getCurrentPage()].second; double delta = angle - m_currentSource->angle[sourcePage - 1]; if(m_rotateMode == RotateMode::CurrentPage) { m_currentSource->angle[sourcePage - 1] = angle; } else if(delta != 0) { for(int page : m_pageMap.keys()) { auto pair = m_pageMap[page]; double newangle = pair.first->angle[pair.second - 1] + delta; newangle = newangle < 0.0 ? newangle + 360.0 : newangle >= 360.0 ? newangle - 360.0 : newangle, pair.first->angle[pair.second - 1] = newangle; } } m_imageItem->setRotation(angle); if(m_tool && delta != 0) { m_tool->rotationChanged(delta); } m_scene->setSceneRect(m_imageItem->sceneBoundingRect()); if(ui.actionBestFit->isChecked()) { setZoom(Zoom::Fit); } } } void Displayer::rotate90() { setAngle(ui.spinBoxRotation->value() + qobject_cast(QObject::sender())->data().toDouble()); } void Displayer::resizeEvent(QResizeEvent* event) { QGraphicsView::resizeEvent(event); if(ui.actionBestFit->isChecked()) { setZoom(Zoom::Fit); } } void Displayer::keyPressEvent(QKeyEvent* event) { if(event->key() == Qt::Key_PageUp) { ui.spinBoxPage->setValue(ui.spinBoxPage->value() - 1); event->accept(); } else if(event->key() == Qt::Key_PageDown) { ui.spinBoxPage->setValue(ui.spinBoxPage->value() + 1); event->accept(); } else { QGraphicsView::keyPressEvent(event); } } void Displayer::mousePressEvent(QMouseEvent* event) { if(event->button() == Qt::MiddleButton) { m_panPos = event->pos(); } else { event->ignore(); QGraphicsView::mousePressEvent(event); if(!event->isAccepted() && m_tool && m_currentSource) { m_tool->mousePressEvent(event); } } } void Displayer::mouseMoveEvent(QMouseEvent* event) { if((event->buttons() & Qt::MiddleButton) == Qt::MiddleButton) { QPoint delta = event->pos() - m_panPos; horizontalScrollBar()->setValue( horizontalScrollBar()->value() - delta.x() ); verticalScrollBar()->setValue( verticalScrollBar()->value() - delta.y() ); m_panPos = event->pos(); } else { event->ignore(); QGraphicsView::mouseMoveEvent(event); if(!event->isAccepted() && m_tool && m_currentSource) { m_tool->mouseMoveEvent(event); } } } void Displayer::mouseReleaseEvent(QMouseEvent* event) { event->ignore(); QGraphicsView::mouseReleaseEvent(event); if(!event->isAccepted() && m_tool && m_currentSource) { m_tool->mouseReleaseEvent(event); } } void Displayer::wheelEvent(QWheelEvent* event) { if(event->modifiers() & Qt::ControlModifier) { setZoom(event->angleDelta().y() > 0 ? Zoom::In : Zoom::Out, QGraphicsView::AnchorUnderMouse); event->accept(); } else if(event->modifiers() & Qt::ShiftModifier) { QScrollBar* hscroll = horizontalScrollBar(); if(event->angleDelta().y() < 0) { hscroll->setValue(hscroll->value() + hscroll->singleStep()); } else { hscroll->setValue(hscroll->value() - hscroll->singleStep()); } event->accept(); } else { QGraphicsView::wheelEvent(event); } } QPointF Displayer::mapToSceneClamped(const QPoint& p) const { QPointF q = mapToScene(p); QRectF bb = m_imageItem->sceneBoundingRect(); q.rx() = std::min(std::max(bb.x(), q.x()), bb.x() + bb.width()); q.ry() = std::min(std::max(bb.y(), q.y()), bb.y() + bb.height()); return q; } void Displayer::setRotateMode(QAction* action) { m_rotateMode = static_cast(action->data().value()); ui.toolButtonRotation->setIcon(action->icon()); } QImage Displayer::getImage(const QRectF& rect) { QImage image(rect.width(), rect.height(), QImage::Format_RGB32); image.fill(Qt::black); QPainter painter(&image); painter.setRenderHint(QPainter::SmoothPixmapTransform); QTransform t; t.translate(-rect.x(), -rect.y()); t.rotate(ui.spinBoxRotation->value()); t.translate(-0.5 * m_pixmap.width(), -0.5 * m_pixmap.height()); painter.setTransform(t); painter.drawPixmap(0, 0, m_pixmap); return image; } QRectF Displayer::getSceneBoundingRect() const { // We cannot use m_imageItem->sceneBoundingRect() since its pixmap // can currently be downscaled and therefore have slightly different // proportions. int width = m_pixmap.width(); int height = m_pixmap.height(); QRectF rect(width * -0.5, height * -0.5, width, height); QTransform transform; transform.rotate(ui.spinBoxRotation->value()); return transform.mapRect(rect); } void Displayer::setBlockAutoscale(bool block) { m_scaleTimer.blockSignals(block); if(!block) { m_scaleTimer.start(100); } } void Displayer::scaleImage() { int page = m_currentSource->page; double resolution = m_scale * m_currentSource->resolution; int brightness = m_currentSource->brightness; int contrast = m_currentSource->contrast; bool invert = m_currentSource->invert; QFuture future = QtConcurrent::run([ = ] { DisplayRenderer* renderer = m_sourceRenderers[m_currentSource]; if(!renderer) { return QImage(); } QImage image = renderer->render(page, resolution); if(!image.isNull()) { renderer->adjustImage(image, brightness, contrast, invert); } return image; }); m_scaleWatcher.setFuture(future); } void Displayer::setScaledImage(QImage image) { if(!image.isNull() && m_imageItem) { m_imageItem->setPixmap(QPixmap::fromImage(image)); m_imageItem->setScale(1.0 / m_scale); m_imageItem->setTransformOriginPoint(m_imageItem->boundingRect().center()); m_imageItem->setPos(m_imageItem->pos() - m_imageItem->sceneBoundingRect().center()); } } void Displayer::thumbnailsToggled(bool active) { ui.listWidgetThumbnails->setVisible(active); ui.splitter->setSizes(active ? QList() << 50 << 50 : QList() << ui.tabSources->height() << 1); if(active) { if (!m_pageMap.isEmpty()) { generateThumbnails(); QSignalBlocker blocker(ui.listWidgetThumbnails); ui.listWidgetThumbnails->setCurrentRow(ui.spinBoxPage->value() - 1); } } else { m_thumbnailWatcher.cancel(); m_thumbnailWatcher.waitForFinished(); ui.listWidgetThumbnails->clear(); } } void Displayer::generateThumbnails() { if(ui.checkBoxThumbnails->isChecked()) { QList pages = m_pageMap.keys(); ui.listWidgetThumbnails->setUpdatesEnabled(false); QIcon icon(":/icons/thumbnail"); for(int page : pages) { QListWidgetItem* item = new QListWidgetItem(icon, _("Page %1").arg(page)); ui.listWidgetThumbnails->addItem(item); } ui.listWidgetThumbnails->setUpdatesEnabled(true); m_thumbnailWatcher.setFuture(QtConcurrent::mapped(pages, static_cast>([this](int page) { return renderThumbnail(page); }))); } } QImage Displayer::renderThumbnail(int page) { QPair map = m_pageMap[page]; DisplayRenderer* renderer = m_sourceRenderers[map.first]; return renderer ? renderer->renderThumbnail(map.second) : QImage(); } void Displayer::setThumbnail(int index) { QImage image = m_thumbnailWatcher.resultAt(index); if(!image.isNull()) { ui.listWidgetThumbnails->item(index)->setIcon(QPixmap::fromImage(image)); } } /////////////////////////////////////////////////////////////////////////////// void DisplayerSelection::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { QColor c = QPalette().highlight().color(); setBrush(QColor(c.red(), c.green(), c.blue(), 63)); QPen pen; pen.setColor(c); pen.setWidth(1 / m_tool->getDisplayer()->getCurrentScale()); setPen(pen); painter->setRenderHint(QPainter::Antialiasing, false); QGraphicsRectItem::paint(painter, option, widget); painter->setRenderHint(QPainter::Antialiasing, true); } void DisplayerSelection::hoverMoveEvent(QGraphicsSceneHoverEvent* event) { QPointF p = event->pos(); QRectF r = rect(); double tol = 10.0 / m_tool->getDisplayer()->getCurrentScale(); bool left = std::abs(r.x() - p.x()) < tol; bool right = std::abs(r.x() + r.width() - p.x()) < tol; bool top = std::abs(r.y() - p.y()) < tol; bool bottom = std::abs(r.y() + r.height() - p.y()) < tol; if((top && left) || (bottom && right)) { setCursor(Qt::SizeFDiagCursor); } else if((top && right) || (bottom && left)) { setCursor(Qt::SizeBDiagCursor); } else if(top || bottom) { setCursor(Qt::SizeVerCursor); } else if(left || right) { setCursor(Qt::SizeHorCursor); } else { setCursor(Qt::SizeAllCursor); } } void DisplayerSelection::mousePressEvent(QGraphicsSceneMouseEvent* event) { QPointF p = event->pos(); double tol = 10.0 / m_tool->getDisplayer()->getCurrentScale(); m_resizeHandlers.clear(); m_mouseMoveOffset = QPointF(0.0, 0.0); if(std::abs(m_point.x() - p.x()) < tol) { // pointx m_resizeHandlers.append(resizePointX); m_mouseMoveOffset.setX(event->pos().x() - m_point.x()); } else if(std::abs(m_anchor.x() - p.x()) < tol) { // anchorx m_resizeHandlers.append(resizeAnchorX); m_mouseMoveOffset.setX(event->pos().x() - m_anchor.x()); } if(std::abs(m_point.y() - p.y()) < tol) { // pointy m_resizeHandlers.append(resizePointY); m_mouseMoveOffset.setY(event->pos().y() - m_point.y()); } else if(std::abs(m_anchor.y() - p.y()) < tol) { // anchory m_resizeHandlers.append(resizeAnchorY); m_mouseMoveOffset.setY(event->pos().y() - m_anchor.y()); } if(!m_resizeHandlers.empty()) { event->accept(); } else if (event->button() == Qt::LeftButton) { m_translating = true; m_mouseMoveOffset = QPointF(p.x(), p.y()); event->accept(); } else { event->ignore(); } } void DisplayerSelection::mouseMoveEvent(QGraphicsSceneMouseEvent* event) { if(!m_resizeHandlers.isEmpty()) { QPointF p = event->pos() - m_mouseMoveOffset; QRectF bb = m_tool->getDisplayer()->getSceneBoundingRect(); p.rx() = std::min(std::max(bb.x(), p.x()), bb.x() + bb.width()); p.ry() = std::min(std::max(bb.y(), p.y()), bb.y() + bb.height()); for(const ResizeHandler& handler : m_resizeHandlers) { handler(p, m_anchor, m_point); } QRectF newRect = QRectF(m_anchor, m_point).normalized().united(m_minRect); setRect(newRect); event->accept(); } else if(m_translating) { QPointF delta = event->pos() - m_mouseMoveOffset; m_mouseMoveOffset = event->pos(); QRectF bb = m_tool->getDisplayer()->getSceneBoundingRect(); // Constraint movement to scene bounding rect delta.rx() -= std::max(0., std::max(m_anchor.x(), m_point.x()) + delta.x() - bb.right()) + std::min(0., std::min(m_anchor.x(), m_point.x()) + delta.x() - bb.left()); delta.ry() -= std::max(0., std::max(m_anchor.y(), m_point.y()) + delta.y() - bb.bottom()) + std::min(0., std::min(m_anchor.y(), m_point.y()) + delta.y() - bb.top()); m_anchor += delta; m_point += delta; setRect(QRectF(m_anchor, m_point).normalized()); event->accept(); } else { event->ignore(); } } void DisplayerSelection::mouseReleaseEvent(QGraphicsSceneMouseEvent* /*event*/) { if(!m_resizeHandlers.isEmpty()) { emit geometryChanged(rect()); m_resizeHandlers.clear(); } else if(m_translating) { emit geometryChanged(rect()); m_translating = false; } } gImageReader-3.4.0/qt/src/Displayer.hh000066400000000000000000000151161417507262200175340ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Displayer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYER_HH #define DISPLAYER_HH #include #include #include #include #include #include class DisplayerTool; class DisplayRenderer; class Source; class UI_MainWindow; class GraphicsScene; class Displayer : public QGraphicsView { Q_OBJECT public: Displayer(const UI_MainWindow& _ui, QWidget* parent = nullptr); ~Displayer(); void setTool(DisplayerTool* tool) { m_tool = tool; } bool setSources(QList sources); bool setup(const int* page = nullptr, const int* resolution = nullptr, const double* angle = nullptr); int getCurrentPage() const; int getNPages() const; int getNSources() const { return m_sourceRenderers.size(); } int getCurrentResolution() const; double getCurrentAngle() const; double getCurrentScale() const { return m_scale; } QString getCurrentImage(int& page) const; bool resolvePage(int page, QString& source, int& sourcePage) const; QImage getImage(const QRectF& rect); QRectF getSceneBoundingRect() const; QPointF mapToSceneClamped(const QPoint& p) const; bool hasMultipleOCRAreas(); QList getOCRAreas(); bool allowAutodetectOCRAreas() const; void setCursor(const QCursor& cursor) { viewport()->setCursor(cursor); } void unsetCursor() { viewport()->unsetCursor(); } void setBlockAutoscale(bool block); signals: void viewportChanged(); void imageChanged(); public slots: void autodetectOCRAreas(); private: enum class RotateMode { CurrentPage, AllPages } m_rotateMode; enum class Zoom { In, Out, Fit, Original }; const UI_MainWindow& ui; GraphicsScene* m_scene; QList m_sources; QMap m_sourceRenderers; QMap> m_pageMap; Source* m_currentSource = nullptr; QPixmap m_pixmap; QGraphicsPixmapItem* m_imageItem = nullptr; double m_scale = 1.0; DisplayerTool* m_tool = nullptr; QPoint m_panPos; QTimer m_renderTimer; QTransform m_viewportTransform; void keyPressEvent(QKeyEvent* event) override; void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void resizeEvent(QResizeEvent* event) override; void wheelEvent(QWheelEvent* event) override; void setZoom(Zoom action, QGraphicsView::ViewportAnchor anchor = QGraphicsView::AnchorViewCenter); void generateThumbnails(); void thumbnailsToggled(bool active); QTimer m_scaleTimer; QFutureWatcher m_scaleWatcher; QFutureWatcher m_thumbnailWatcher; private slots: void checkViewportChanged(); void scaleImage(); void queueRenderImage(); bool renderImage(); void rotate90(); void setAngle(double angle); void setRotateMode(QAction* action); void setScaledImage(QImage image); void zoomIn() { setZoom(Zoom::In); } void zoomOut() { setZoom(Zoom::Out); } void zoomFit() { setZoom(Zoom::Fit); } void zoomOriginal() { setZoom(Zoom::Original); } QImage renderThumbnail(int page); void setThumbnail(int index); }; class DisplayerTool : public QObject { public: DisplayerTool(Displayer* displayer, QObject* parent = 0) : QObject(parent), m_displayer(displayer) {} virtual ~DisplayerTool() {} virtual void mousePressEvent(QMouseEvent* /*event*/) {} virtual void mouseMoveEvent(QMouseEvent* /*event*/) {} virtual void mouseReleaseEvent(QMouseEvent* /*event*/) {} virtual void pageChanged() {} virtual void resolutionChanged(double /*factor*/) {} virtual void rotationChanged(double /*delta*/) {} virtual QList getOCRAreas() = 0; virtual bool hasMultipleOCRAreas() const { return false; } virtual bool allowAutodetectOCRAreas() const { return false; } virtual void autodetectOCRAreas() {} virtual void reset() {} Displayer* getDisplayer() const { return m_displayer; } protected: Displayer* m_displayer; }; class DisplayerSelection : public QObject, public QGraphicsRectItem { Q_OBJECT public: DisplayerSelection(DisplayerTool* tool, const QPointF& anchor) : QGraphicsRectItem(QRectF(anchor, anchor)), m_tool(tool), m_anchor(anchor), m_point(anchor) { setAcceptHoverEvents(true); setZValue(10); } void setAnchorAndPoint(const QPointF& anchor, const QPointF& point) { m_anchor = anchor; m_point = point; setRect(QRectF(m_anchor, m_point).normalized()); } void setMinimumRect(const QRectF& rect) { m_minRect = rect; } void setPoint(const QPointF& point) { m_point = point; setRect(QRectF(m_anchor, m_point).normalized()); } void rotate(const QTransform& transform) { m_anchor = transform.map(m_anchor); m_point = transform.map(m_point); setRect(QRectF(m_anchor, m_point).normalized()); } void scale(double factor) { m_anchor *= factor; m_point *= factor; } protected: DisplayerTool* m_tool; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; signals: void geometryChanged(QRectF rect); private: typedef void(*ResizeHandler)(const QPointF&, QPointF&, QPointF&); QPointF m_anchor; QPointF m_point; QRectF m_minRect; QVector m_resizeHandlers; QPointF m_mouseMoveOffset; bool m_translating = false; void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override; void mousePressEvent(QGraphicsSceneMouseEvent* event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override; static void resizeAnchorX(const QPointF& pos, QPointF& anchor, QPointF& /*point*/) { anchor.rx() = pos.x(); } static void resizeAnchorY(const QPointF& pos, QPointF& anchor, QPointF& /*point*/) { anchor.ry() = pos.y(); } static void resizePointX(const QPointF& pos, QPointF& /*anchor*/, QPointF& point) { point.rx() = pos.x(); } static void resizePointY(const QPointF& pos, QPointF& /*anchor*/, QPointF& point) { point.ry() = pos.y(); } }; #endif // IMAGEDISPLAYER_HH gImageReader-3.4.0/qt/src/DisplayerToolSelect.cc000066400000000000000000000231231417507262200215150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolSelect.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "DisplayerToolSelect.hh" #include "Displayer.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Recognizer.hh" #include "Utils.hh" #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include #include #include #include #include DisplayerToolSelect::DisplayerToolSelect(Displayer* displayer, QObject* parent) : DisplayerTool(displayer, parent) { displayer->setCursor(Qt::CrossCursor); updateRecognitionModeLabel(); } DisplayerToolSelect::~DisplayerToolSelect() { clearSelections(); } void DisplayerToolSelect::mousePressEvent(QMouseEvent* event) { if(event->button() == Qt::LeftButton && m_curSel == nullptr) { if((event->modifiers() & Qt::ControlModifier) == 0) { clearSelections(); } m_curSel = new NumberedDisplayerSelection(this, 1 + m_selections.size(), m_displayer->mapToSceneClamped(event->pos())); m_curSel->setZValue(1 + m_selections.size()); m_displayer->scene()->addItem(m_curSel); event->accept(); } } void DisplayerToolSelect::mouseMoveEvent(QMouseEvent* event) { if(m_curSel) { QPointF p = m_displayer->mapToSceneClamped(event->pos()); m_curSel->setPoint(p); m_displayer->ensureVisible(QRectF(p, p)); event->accept(); } } void DisplayerToolSelect::mouseReleaseEvent(QMouseEvent* event) { if(m_curSel) { if(m_curSel->rect().width() < 5.0 || m_curSel->rect().height() < 5.0) { delete m_curSel; } else { m_selections.append(m_curSel); updateRecognitionModeLabel(); } m_curSel = nullptr; event->accept(); } } void DisplayerToolSelect::resolutionChanged(double factor) { for(NumberedDisplayerSelection* sel : m_selections) { sel->scale(factor); } } void DisplayerToolSelect::rotationChanged(double delta) { QTransform t; t.rotate(delta); for(NumberedDisplayerSelection* sel : m_selections) { sel->rotate(t); } } QList DisplayerToolSelect::getOCRAreas() { QList images; if(m_selections.empty()) { images.append(m_displayer->getImage(m_displayer->getSceneBoundingRect())); } else { for(const NumberedDisplayerSelection* sel : m_selections) { images.append(m_displayer->getImage(sel->rect())); } } return images; } void DisplayerToolSelect::clearSelections() { qDeleteAll(m_selections); m_selections.clear(); updateRecognitionModeLabel(); } void DisplayerToolSelect::removeSelection(int num) { delete m_selections[num - 1]; m_selections.removeAt(num - 1); for(int i = 0, n = m_selections.size(); i < n; ++i) { m_selections[i]->setNumber(1 + i); m_selections[i]->setZValue(1 + i); } } void DisplayerToolSelect::reorderSelection(int oldNum, int newNum) { NumberedDisplayerSelection* sel = m_selections[oldNum - 1]; m_selections.removeAt(oldNum - 1); m_selections.insert(newNum - 1, sel); for(int i = 0, n = m_selections.size(); i < n; ++i) { m_selections[i]->setNumber(1 + i); m_selections[i]->setZValue(1 + i); } } void DisplayerToolSelect::saveSelection(NumberedDisplayerSelection* selection) { QImage img = m_displayer->getImage(selection->rect()); QString filename = FileDialogs::saveDialog(_("Save Selection Image"), _("selection.png"), "outputdir", QString("%1 (*.png)").arg(_("PNG Images")), true); if(!filename.isEmpty()) { img.save(filename); } } void DisplayerToolSelect::updateRecognitionModeLabel() { MAIN->getRecognizer()->setRecognizeMode(m_selections.isEmpty() ? _("Recognize all") : _("Recognize selection")); } void DisplayerToolSelect::autodetectLayout(bool noDeskew) { clearSelections(); double avgDeskew = 0.0; int nDeskew = 0; QList rects; QImage img = m_displayer->getImage(m_displayer->getSceneBoundingRect()); // Perform layout analysis Utils::busyTask([&nDeskew, &avgDeskew, &rects, &img] { QByteArray current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; tess.InitForAnalysePage(); setlocale(LC_ALL, current.constData()); tess.SetPageSegMode(tesseract::PSM_AUTO_ONLY); tess.SetImage(img.bits(), img.width(), img.height(), 4, img.bytesPerLine()); tesseract::PageIterator* it = tess.AnalyseLayout(); if(it && !it->Empty(tesseract::RIL_BLOCK)) { do { int x1, y1, x2, y2; tesseract::Orientation orient; tesseract::WritingDirection wdir; tesseract::TextlineOrder tlo; float deskew; it->BoundingBox(tesseract::RIL_BLOCK, &x1, &y1, &x2, &y2); it->Orientation(&orient, &wdir, &tlo, &deskew); avgDeskew += deskew; ++nDeskew; float width = x2 - x1, height = y2 - y1; if(width > 10 && height > 10) { rects.append(QRectF(x1 - 0.5 * img.width(), y1 - 0.5 * img.height(), width, height)); } } while(it->Next(tesseract::RIL_BLOCK)); } delete it; return true; }, _("Performing layout analysis")); // If a somewhat large deskew angle is detected, automatically rotate image and redetect layout, // unless we already attempted to rotate (to prevent endless loops) avgDeskew = qRound(((avgDeskew / nDeskew) / M_PI * 180.0) * 10.0) / 10.0; if(std::abs(avgDeskew) > 0.1 && !noDeskew) { double newangle = m_displayer->getCurrentAngle() - avgDeskew; m_displayer->setup(nullptr, nullptr, &newangle); autodetectLayout(true); } else { // Merge overlapping rectangles for(int i = rects.size(); i-- > 1;) { for(int j = i; j-- > 0;) { if(rects[j].intersects(rects[i])) { rects[j] = rects[j].united(rects[i]); rects.removeAt(i); break; } } } for(int i = 0, n = rects.size(); i < n; ++i) { m_selections.append(new NumberedDisplayerSelection(this, 1 + i, rects[i].topLeft())); m_selections.back()->setPoint(rects[i].bottomRight()); m_displayer->scene()->addItem(m_selections.back()); } updateRecognitionModeLabel(); } } /////////////////////////////////////////////////////////////////////////////// void NumberedDisplayerSelection::contextMenuEvent(QGraphicsSceneContextMenuEvent* event) { QMenu menu; QWidget* orderWidget = new QWidget(&menu); QHBoxLayout* layout = new QHBoxLayout(orderWidget); QLabel* orderIcon = new QLabel(&menu); int iconSize = orderIcon->style()->pixelMetric(QStyle::PM_SmallIconSize); orderIcon->setPixmap(QIcon::fromTheme("object-order-front").pixmap(iconSize, iconSize)); layout->addWidget(orderIcon); layout->setContentsMargins(4, 0, 4, 0); QLabel* orderLabel = new QLabel(_("Order:"), &menu); orderLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); layout->addWidget(orderLabel); QSpinBox* orderSpin = new QSpinBox(); orderSpin->setRange(1, static_cast(m_tool)->m_selections.size()); orderSpin->setValue(m_number); orderSpin->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); connect(orderSpin, qOverload(&QSpinBox::valueChanged), this, &NumberedDisplayerSelection::reorderSelection); layout->addWidget(orderSpin); QWidgetAction* spinAction = new QWidgetAction(&menu); spinAction->setDefaultWidget(orderWidget); QAction* deleteAction = new QAction(QIcon::fromTheme("edit-delete"), _("Delete"), &menu); QAction* ocrAction = new QAction(QIcon::fromTheme("insert-text"), _("Recognize"), &menu); QAction* ocrClipboardAction = new QAction(QIcon::fromTheme("edit-copy"), _("Recognize to clipboard"), &menu); QAction* saveAction = new QAction(QIcon::fromTheme("document-save-as"), _("Save as image"), &menu); menu.addActions(QList() << spinAction << deleteAction << ocrAction << ocrClipboardAction << saveAction); QAction* selected = menu.exec(event->screenPos()); if(selected == deleteAction) { static_cast(m_tool)->removeSelection(m_number); } else if(selected == ocrAction) { MAIN->getRecognizer()->recognizeImage(m_tool->getDisplayer()->getImage(rect()), Recognizer::OutputDestination::Buffer); } else if(selected == ocrClipboardAction) { MAIN->getRecognizer()->recognizeImage(m_tool->getDisplayer()->getImage(rect()), Recognizer::OutputDestination::Clipboard); } else if(selected == saveAction) { static_cast(m_tool)->saveSelection(this); } } void NumberedDisplayerSelection::reorderSelection(int newNumber) { static_cast(m_tool)->reorderSelection(m_number, newNumber); } void NumberedDisplayerSelection::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { DisplayerSelection::paint(painter, option, widget); painter->setRenderHint(QPainter::Antialiasing, false); QRectF r = rect(); qreal w = 20.0 / m_tool->getDisplayer()->getCurrentScale(); w = std::min(w, std::min(r.width(), r.height())); QRectF box(r.x(), r.y(), w, w); painter->setBrush(QPalette().highlight()); painter->drawRect(box); painter->setRenderHint(QPainter::Antialiasing, true); if(w > 1.25) { QFont font; font.setPixelSize(0.8 * w); font.setBold(true); painter->setFont(font); painter->setPen(QPalette().highlightedText().color()); painter->drawText(box, Qt::AlignCenter, QString::number(m_number)); } } gImageReader-3.4.0/qt/src/DisplayerToolSelect.hh000066400000000000000000000053121417507262200215270ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolSelect.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYERTOOLSELECT_HH #define DISPLAYERTOOLSELECT_HH #include #include #include #include #include "Displayer.hh" class NumberedDisplayerSelection; class DisplayerToolSelect : public DisplayerTool { Q_OBJECT public: DisplayerToolSelect(Displayer* displayer, QObject* parent = 0); ~DisplayerToolSelect(); void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void resolutionChanged(double factor) override; void rotationChanged(double delta) override; QList getOCRAreas() override; bool hasMultipleOCRAreas() const override { return !m_selections.isEmpty(); } bool allowAutodetectOCRAreas() const override { return true; } void autodetectOCRAreas() override { autodetectLayout(); } void reset() override { clearSelections(); } private: friend class NumberedDisplayerSelection; NumberedDisplayerSelection* m_curSel = nullptr; QList m_selections; void clearSelections(); void removeSelection(int num); void reorderSelection(int oldNum, int newNum); void saveSelection(NumberedDisplayerSelection* selection); void updateRecognitionModeLabel(); void autodetectLayout(bool noDeskew = false); }; class NumberedDisplayerSelection : public DisplayerSelection { Q_OBJECT public: NumberedDisplayerSelection(DisplayerToolSelect* selectTool, int number, const QPointF& anchor) : DisplayerSelection(selectTool, anchor), m_number(number) { } void setNumber(int number) { m_number = number; } private slots: void reorderSelection(int newNumber); private: int m_number; void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; }; #endif // DISPLAYERTOOLSELECT_HH gImageReader-3.4.0/qt/src/DjVuDocument.cc000066400000000000000000000076721417507262200201450ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DjVuDocument.cc * Based on code from Okular, which is: * Copyright (C) 2006 by Pino Toscano * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include "DjVuDocument.hh" #include #include #include #include /** * Explore the message queue until there are no message left in it. */ static void handle_ddjvu_messages( ddjvu_context_t* ctx, int wait ) { const ddjvu_message_t* msg; if ( wait ) { ddjvu_message_wait( ctx ); } while ( ( msg = ddjvu_message_peek( ctx ) ) ) { ddjvu_message_pop( ctx ); } } /** * Explore the message queue until the message \p mid is found. */ static void wait_for_ddjvu_message( ddjvu_context_t* ctx, ddjvu_message_tag_t mid ) { ddjvu_message_wait( ctx ); const ddjvu_message_t* msg; while ( ( msg = ddjvu_message_peek( ctx ) ) && msg && ( msg->m_any.tag != mid ) ) { ddjvu_message_pop( ctx ); } } DjVuDocument::DjVuDocument() { // creating the djvu context m_djvu_cxt = ddjvu_context_create( "DjVuDocument" ); // creating the rendering format unsigned int formatmask[4] = { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; // R, G, B, A masks m_format = ddjvu_format_create( DDJVU_FORMAT_RGBMASK32, 4, formatmask ); ddjvu_format_set_row_order( m_format, 1 ); ddjvu_format_set_y_direction( m_format, 1 ); } DjVuDocument::~DjVuDocument() { closeFile(); ddjvu_format_release( m_format ); ddjvu_context_release( m_djvu_cxt ); } bool DjVuDocument::openFile( const QString& fileName ) { // first, close the old file if ( m_djvu_document ) { closeFile(); } // load the document... m_djvu_document = ddjvu_document_create_by_filename( m_djvu_cxt, QFile::encodeName( fileName ).constData(), true ); if ( !m_djvu_document ) { return false; } // ...and wait for its loading wait_for_ddjvu_message( m_djvu_cxt, DDJVU_DOCINFO ); if ( ddjvu_document_decoding_error( m_djvu_document ) ) { ddjvu_document_release( m_djvu_document ); m_djvu_document = nullptr; return false; } int numofpages = ddjvu_document_get_pagenum( m_djvu_document ); m_pages.clear(); m_pages.resize( numofpages ); // read the pages for ( int i = 0; i < numofpages; ++i ) { ddjvu_status_t sts; ddjvu_pageinfo_t info; while ( ( sts = ddjvu_document_get_pageinfo( m_djvu_document, i, &info ) ) < DDJVU_JOB_OK ) { handle_ddjvu_messages( m_djvu_cxt, true ); } if ( sts >= DDJVU_JOB_FAILED ) { closeFile(); return false; } m_pages[i] = {info.width, info.height, info.dpi}; } return true; } void DjVuDocument::closeFile() { m_pages.clear(); // releasing the old document if ( m_djvu_document ) { ddjvu_document_release( m_djvu_document ); } m_djvu_document = nullptr; } QImage DjVuDocument::image( int pageno, int resolution ) { if(pageno < 0 || pageno >= pageCount()) { return QImage(); } const DjVuDocument::Page& page = m_pages[pageno]; ddjvu_page_t* djvupage = ddjvu_page_create_by_pageno( m_djvu_document, pageno ); // wait for the new page to be loaded ddjvu_status_t sts; while ( ( sts = ddjvu_page_decoding_status( djvupage ) ) < DDJVU_JOB_OK ) { handle_ddjvu_messages( m_djvu_cxt, true ); } double scaleFactor = double(resolution) / double(page.dpi); ddjvu_rect_t pagerect; pagerect.x = 0; pagerect.y = 0; pagerect.w = page.width * scaleFactor; pagerect.h = page.height * scaleFactor; ddjvu_rect_t renderrect = pagerect; QImage res_img( renderrect.w, renderrect.h, QImage::Format_RGB32 ); int res = ddjvu_page_render( djvupage, DDJVU_RENDER_COLOR, &pagerect, &renderrect, m_format, res_img.bytesPerLine(), (char*)res_img.bits() ); if (!res) { res_img.fill(Qt::white); } ddjvu_page_release(djvupage); return res_img; } gImageReader-3.4.0/qt/src/DjVuDocument.hh000066400000000000000000000023161417507262200201450ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DjVuDocument.hh * Based on code from Okular, which is: * Copyright (C) 2006 by Pino Toscano * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef DJVUDOCUMENT_HH #define DJVUDOCUMENT_HH #include #include typedef struct ddjvu_context_s ddjvu_context_t; typedef struct ddjvu_document_s ddjvu_document_t; typedef struct ddjvu_format_s ddjvu_format_t; class DjVuDocument { public: DjVuDocument(); ~DjVuDocument(); struct Page { int width; int height; int dpi; }; bool openFile( const QString& fileName ); void closeFile(); QImage image(int pageno, int resolution); int pageCount() const { return m_pages.size(); } const Page& page(int pageno) const { return m_pages[pageno]; } private: ddjvu_context_t* m_djvu_cxt = nullptr; ddjvu_document_t* m_djvu_document = nullptr; ddjvu_format_t* m_format = nullptr; QVector m_pages; }; #endif gImageReader-3.4.0/qt/src/FileDialogs.cc000066400000000000000000000057511417507262200177540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileDialogs.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "Utils.hh" namespace FileDialogs { QStringList openDialog(const QString& title, const QString& initialDirectory, const QString& initialDirSetting, const QString& filter, bool multiple, QWidget* parent) { parent = parent == nullptr ? MAIN : parent; QString initialDir = initialDirectory; if(initialDir.isEmpty()) { initialDir = ConfigSettings::get>(initialDirSetting)->getValue(); if(initialDir.isEmpty()) { initialDir = Utils::documentsFolder(); } } QStringList filenames; if(multiple) { filenames.append(QFileDialog::getOpenFileNames(parent, title, initialDir, filter)); } else { QString filename = QFileDialog::getOpenFileName(parent, title, initialDir, filter); if(!filename.isEmpty()) { filenames.append(filename); } } if(!filenames.isEmpty()) { ConfigSettings::get>(initialDirSetting)->setValue(QFileInfo(filenames.first()).absolutePath()); } return filenames; } QString saveDialog(const QString& title, const QString& initialFilename, const QString& initialDirSetting, const QString& filter, bool generateUniqueName, QWidget* parent) { parent = parent == nullptr ? MAIN : parent; QString suggestedFile; if(!initialFilename.isEmpty() && QFileInfo(initialFilename).isAbsolute()) { suggestedFile = initialFilename; } else { QString initialDir = ConfigSettings::get>(initialDirSetting)->getValue(); if(initialDir.isEmpty()) { initialDir = Utils::documentsFolder(); } suggestedFile = QDir(initialDir).absoluteFilePath(initialFilename); if(generateUniqueName) { suggestedFile = Utils::makeOutputFilename(suggestedFile); } } QString filename = QFileDialog::getSaveFileName(parent, title, suggestedFile, filter); if(!filename.isEmpty()) { QString sext = QFileInfo(suggestedFile).completeSuffix(); QString ext = QFileInfo(filename).completeSuffix(); if(ext.isEmpty()) { filename += "." + sext; } ConfigSettings::get>(initialDirSetting)->setValue(QFileInfo(filename).absolutePath()); } return filename; } } // FileDialogs gImageReader-3.4.0/qt/src/FileDialogs.hh000066400000000000000000000024701417507262200177610ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileDialogs.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FILEDIALOGS_HH #define FILEDIALOGS_HH #include class QWidget; namespace FileDialogs { QStringList openDialog(const QString& title, const QString& initialDirectory, const QString& initialDirSetting, const QString& filter, bool multiple, QWidget* parent = nullptr); QString saveDialog(const QString& title, const QString& initialFilename, const QString& initialDirSetting, const QString& filter, bool generateUniqueName = false, QWidget* parent = nullptr); } // FileDialogs #endif // FILEDIALOGS_HH gImageReader-3.4.0/qt/src/FileTreeModel.cc000066400000000000000000000337071417507262200202540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileTreeModel.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include "FileTreeModel.hh" FileTreeModel::FileTreeModel(QObject* parent) : QAbstractItemModel(parent) { } QModelIndex FileTreeModel::insertFile(QString filePath, DataObject* data, const QString& displayName) { QFileInfo finfo(filePath); #ifdef Q_OS_WIN32 QString fileDir = "/" + finfo.absolutePath().replace("\\", "/"); filePath = "/" + filePath; QString tempPath = "/" + QDir::tempPath(); #else QString fileDir = finfo.absolutePath(); QString tempPath = QDir::tempPath(); #endif QString fileName = finfo.fileName(); if(fileDir.startsWith(tempPath)) { int rootRow = (m_root ? 1 : 0); if(!m_tmpdir) { beginInsertRows(QModelIndex(), rootRow, rootRow); m_tmpdir = new DirNode(QFileInfo(tempPath).fileName(), tempPath, nullptr, _("Temporary files")); endInsertRows(); } QModelIndex idx = index(rootRow, 0); int pos = m_tmpdir->files.insIndex(fileName); int row = m_tmpdir->dirs.size() + pos; beginInsertRows(idx, row, row); m_tmpdir->files.add(new FileNode(fileName, filePath, m_tmpdir, data, displayName), pos); endInsertRows(); return index(row, 0, idx); } else if(!m_root) { // Set initial root m_root = new DirNode(QFileInfo(fileDir).fileName(), fileDir, nullptr); beginInsertRows(QModelIndex(), 0, 0); m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName)); endInsertRows(); return index(0, 0, index(0, 0)); } else if(m_root->path == fileDir) { // Add to current root int pos = m_root->files.insIndex(fileName); int row = m_root->dirs.size() + pos; beginInsertRows(index(0, 0), row, row); m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName), pos); endInsertRows(); return index(row, 0, index(0, 0)); } else if(m_root->path.startsWith(fileDir)) { // Root below new path, replace root QStringList path = m_root->path.mid(fileDir.length()).split("/", Qt::SkipEmptyParts); beginRemoveRows(QModelIndex(), 0, 0); DirNode* oldroot = m_root; m_root = nullptr; endRemoveRows(); beginInsertRows(QModelIndex(), 0, 0); m_root = new DirNode(QFileInfo(fileDir).fileName(), fileDir, nullptr); DirNode* cur = m_root; for(int i = 0, n = path.length() - 1; i < n; ++i) { cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur)); } cur->dirs.add(oldroot); oldroot->parent = cur; m_root->files.add(new FileNode(fileName, filePath, m_root, data, displayName)); endInsertRows(); return index(1, 0, index(0, 0)); } else if(fileDir.startsWith(m_root->path)) { // New path below root, append to subtree QStringList path = fileDir.mid(m_root->path.length()).split("/", Qt::SkipEmptyParts); DirNode* cur = m_root; QModelIndex idx = index(0, 0); for(const QString& part : path) { auto it = cur->dirs.find(part); int row = 0; if(it == cur->dirs.end()) { row = cur->dirs.insIndex(part); beginInsertRows(idx, row, row); cur = cur->dirs.add(new DirNode(part, cur->path + "/" + part, cur), row); endInsertRows(); } else { row = cur->dirs.index(it); cur = *it; } idx = index(row, 0, idx); } int pos = cur->files.insIndex(fileName); int row = cur->dirs.size() + pos; beginInsertRows(idx, row, row); cur->files.add(new FileNode(fileName, filePath, cur, data, displayName), pos); endInsertRows(); return index(row, 0, idx); } else { // Unrelated trees, find common ancestor QStringList rootPath = m_root->path.split("/", Qt::SkipEmptyParts); QStringList newPath = fileDir.split("/", Qt::SkipEmptyParts); int pos = 0; for(int n = qMin(rootPath.length(), newPath.length()); pos < n; ++pos) { if(rootPath[pos] != newPath[pos]) { break; } } QString newRoot = "/" + rootPath.mid(0, pos).join("/"); beginRemoveRows(QModelIndex(), 0, 0); DirNode* oldroot = m_root; m_root = nullptr; endRemoveRows(); m_root = new DirNode(QFileInfo(newRoot).fileName(), newRoot, nullptr); // Insert old root and new branch beginInsertRows(QModelIndex(), 0, 0); // - Old root DirNode* cur = m_root; QStringList path = rootPath.mid(pos); for(int i = 0, n = path.length() - 1; i < n; ++i) { cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur)); } cur->dirs.add(oldroot); oldroot->parent = cur; // - New branch cur = m_root; path = newPath.mid(pos); QModelIndex idx = index(0, 0); for(int i = 0, n = path.length(); i < n; ++i) { int pos = cur->dirs.insIndex(path[i]); cur = cur->dirs.add(new DirNode(path[i], cur->path + "/" + path[i], cur), pos); idx = index(pos, 0, idx); } cur->files.add(new FileNode(fileName, filePath, cur, data, displayName)); endInsertRows(); return index(0, 0, idx); } } QModelIndex FileTreeModel::findFile(const QString& filePath, bool isFile) const { if(!m_root && !m_tmpdir) { return QModelIndex(); } QFileInfo finfo(filePath); #ifdef Q_OS_WIN32 QString prefix = "/"; QString fileDir = "/" + finfo.absolutePath().replace("\\", "/"); QString tempPath = "/" + QDir::tempPath(); #else QString prefix = ""; QString fileDir = finfo.absolutePath(); QString tempPath = QDir::tempPath(); #endif QString fileName = finfo.fileName(); // Path is root dir if(!isFile && m_root && prefix + filePath == m_root->path) { return index(0, 0); } // Path is temp dir else if(!isFile && m_tmpdir && prefix + filePath == m_tmpdir->path) { return index(m_root ? 1 : 0, 0); } // Path is below root or tempdir DirNode* cur = nullptr; QModelIndex idx; if(m_tmpdir && fileDir.startsWith(m_tmpdir->path)) { cur = m_tmpdir; idx = index(m_root ? 1 : 0, 0); } else if (m_root && fileDir.startsWith(m_root->path)) { cur = m_root; idx = index(0, 0); } if(!idx.isValid()) { return QModelIndex(); } QString relPath = fileDir.mid(m_root->path.length()); QStringList parts = relPath.split("/", Qt::SkipEmptyParts); for(const QString& part : parts) { auto it = cur->dirs.find(part); if(it == cur->dirs.end()) { return QModelIndex(); } idx = index(cur->dirs.index(*it), 0, idx); cur = *it; } if(isFile) { auto it = cur->files.find(fileName); return it != cur->files.end() ? index(cur->dirs.size() + cur->files.index(*it), 0, idx) : QModelIndex(); } else { auto it = cur->dirs.find(fileName); return it != cur->dirs.end() ? index(cur->dirs.index(*it), 0, idx) : QModelIndex(); } } bool FileTreeModel::removeIndex(const QModelIndex& index) { if(!index.isValid()) { return false; } Node* node = static_cast(index.internalPointer()); // Remove entire branch bool isFile = dynamic_cast(node); Node* deleteNode = node; QModelIndex deleteIndex = index; while(deleteNode->parent && deleteNode->parent->childCount() == 1) { isFile = false; deleteNode = deleteNode->parent; deleteIndex = deleteIndex.parent(); } if(deleteNode == m_root) { beginRemoveRows(QModelIndex(), 0, 0); delete m_root; m_root = nullptr; endRemoveRows(); } else if(deleteNode == m_tmpdir) { int row = (m_root ? 1 : 0); beginRemoveRows(QModelIndex(), row, row); delete m_tmpdir; m_tmpdir = nullptr; endRemoveRows(); } else { beginRemoveRows(deleteIndex.parent(), deleteIndex.row(), deleteIndex.row()); if(isFile) { delete deleteNode->parent->files.take(static_cast(deleteNode)); } else { delete deleteNode->parent->dirs.take(static_cast(deleteNode)); } endRemoveRows(); } return true; } void FileTreeModel::clear() { if(m_root || m_tmpdir) { beginRemoveRows(QModelIndex(), 0, (m_root != 0) + (m_tmpdir != 0)); delete m_root; m_root = nullptr; delete m_tmpdir; m_tmpdir = nullptr; endRemoveRows(); } } bool FileTreeModel::isDir(const QModelIndex& index) const { if(!index.isValid()) { return false; } return dynamic_cast(static_cast(index.internalPointer())) != nullptr; } void FileTreeModel::setFileEditable(const QModelIndex& index, bool editable) { Node* node = static_cast(index.internalPointer()); if(dynamic_cast(node)) { static_cast(node)->editable = editable; emit dataChanged(index.sibling(index.row(), 1), index.sibling(index.row(), 1), {Qt::DisplayRole}); } } bool FileTreeModel::isFileEditable(const QModelIndex& index) const { Node* node = static_cast(index.internalPointer()); return dynamic_cast(node) && static_cast(node)->editable; } QVariant FileTreeModel::data(const QModelIndex& index, int role) const { Node* node = static_cast(index.internalPointer()); if(index.column() == 0) { if(role == Qt::FontRole) { QFont font; if(m_tmpdir && node->parent == m_tmpdir) { font.setItalic(true); } return font; } else if(role == Qt::DisplayRole) { return !node->displayName.isEmpty() ? node->displayName : node->fileName; } else if(role == Qt::DecorationRole) { bool isDir = dynamic_cast(node); #ifdef Q_OS_WIN32 return isDir ? m_iconProvider.icon(QFileIconProvider::Folder) : m_iconProvider.icon(QFileInfo(node->path.mid(1))); #else return isDir ? m_iconProvider.icon(QFileIconProvider::Folder) : m_iconProvider.icon(QFileInfo(node->path)); #endif } else if(role == Qt::ToolTipRole) { #ifdef Q_OS_WIN32 return node->path.mid(1); // Omit leading / #else return node->path; #endif } } else if(index.column() == 1) { if(role == Qt::DecorationRole) { bool editable = dynamic_cast(node) && static_cast(node)->editable; return editable ? QIcon::fromTheme("document-edit") : QIcon(); } } return QVariant(); } DataObject* FileTreeModel::fileData(const QModelIndex& index) const { FileNode* node = dynamic_cast(static_cast(index.internalPointer())); return node ? node->data : nullptr; } Qt::ItemFlags FileTreeModel::flags(const QModelIndex& /*index*/) const { return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } QModelIndex FileTreeModel::index(int row, int column, const QModelIndex& parent) const { if (!hasIndex(row, column, parent)) { return QModelIndex(); } if(parent.isValid()) { Node* node = static_cast(parent.internalPointer()); DirNode* dirNode = dynamic_cast(node); int nDirs = dirNode->dirs.size(); if(row >= nDirs) { return createIndex(row, column, dirNode->files[row - nDirs]); } else { return createIndex(row, column, dirNode->dirs[row]); } } else if(row == 1) { return m_root && m_tmpdir ? createIndex(row, column, m_tmpdir) : QModelIndex(); } else if(row == 0) { return m_root ? createIndex(row, column, m_root) : m_tmpdir ? createIndex(row, column, m_tmpdir) : QModelIndex(); } return QModelIndex(); } QModelIndex FileTreeModel::parent(const QModelIndex& child) const { Node* node = static_cast(child.internalPointer()); if(!node->parent) { return QModelIndex(); } else { DirNode* parentNode = static_cast(node->parent); int row = 0; if(parentNode->parent) { row = parentNode->parent->dirs.index(parentNode); } else if(parentNode == m_tmpdir) { row = (m_root ? 1 : 0); } else if(parentNode == m_root) { row = 0; } else { return QModelIndex(); } return createIndex(row, 0, parentNode); } } int FileTreeModel::rowCount(const QModelIndex& parent) const { if(!parent.isValid()) { return (m_root ? 1 : 0) + (m_tmpdir ? 1 : 0); } Node* node = static_cast(parent.internalPointer()); if(dynamic_cast(node)) { return static_cast(node)->childCount(); } return 0; } int FileTreeModel::columnCount(const QModelIndex& /*parent*/) const { return 2; } static QCollator initCollator() { QCollator c; c.setNumericMode(true); return c; } static const QCollator& collator() { static QCollator c = initCollator(); return c; } template T FileTreeModel::NodeList::add(T node) { auto it = std::lower_bound(this->begin(), this->end(), node->fileName, [](const T & a, const QString & b) { return collator().compare(a->fileName, b) < 0; }); this->insert(it, node); return node; } template T FileTreeModel::NodeList::add(T node, int pos) { auto it = this->begin(); std::advance(it, pos); this->insert(it, node); return node; } template T FileTreeModel::NodeList::take(T node) { auto it = find(node->fileName); if(it != this->end()) { this->erase(it); return node; } return nullptr; } template typename FileTreeModel::NodeList::const_iterator FileTreeModel::NodeList::find(const QString& fileName) const { auto it = std::lower_bound(this->begin(), this->end(), fileName, [](const T & a, const QString & b) { return collator().compare(a->fileName, b) < 0; }); return it == this->end() ? it : (*it)->fileName == fileName ? it : this->end(); } template int FileTreeModel::NodeList::insIndex(const QString& fileName) const { auto it = std::lower_bound(this->begin(), this->end(), fileName, [](const T & a, const QString & b) { return collator().compare(a->fileName, b) < 0; }); return std::distance(this->begin(), it); } template int FileTreeModel::NodeList::index(T node) const { auto it = std::lower_bound(this->begin(), this->end(), node->fileName, [](const T & a, const QString & b) { return collator().compare(a->fileName, b) < 0; }); return std::distance(this->begin(), it); } template int FileTreeModel::NodeList::index(const_iterator it) const { return std::distance(this->begin(), it); } gImageReader-3.4.0/qt/src/FileTreeModel.hh000066400000000000000000000067371417507262200202710ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * FileTreeModel.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef FILETREEMODEL_HH #define FILETREEMODEL_HH #include #include #include "common.hh" class FileTreeModel : public QAbstractItemModel { public: FileTreeModel(QObject* parent = nullptr); QModelIndex insertFile(QString filePath, DataObject* data, const QString& displayName = QString()); QModelIndex findFile(const QString& filePath, bool isFile = true) const; bool removeIndex(const QModelIndex& index); void clear(); bool isDir(const QModelIndex& index) const; void setFileEditable(const QModelIndex& index, bool editable); bool isFileEditable(const QModelIndex& index) const; template T fileData(const QModelIndex& index) const { return static_cast(fileData(index)); } DataObject* fileData(const QModelIndex& index) const; QVariant data(const QModelIndex& index, int role) const override; Qt::ItemFlags flags(const QModelIndex& index) const override; QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex& child) const override; int rowCount(const QModelIndex& parent = QModelIndex()) const override; int columnCount(const QModelIndex& parent = QModelIndex()) const override; static constexpr int OutputFileRole = Qt::UserRole; private: template class NodeList : public std::vector { public: typedef typename std::vector::iterator iterator; typedef typename std::vector::const_iterator const_iterator; T add(T node); T add(T node, int pos); T take(T node); const_iterator find(const QString& fileName) const; int insIndex(const QString& fileName) const; int index(T node) const; int index(const_iterator it) const; }; struct DirNode; struct Node { Node(const QString& _fileName, const QString& _path, DirNode* _parent, const QString& _displayName = QString()) : fileName(_fileName), path(_path), displayName(_displayName), parent(_parent) {} virtual ~Node() = default; QString fileName; QString path; QString displayName; DirNode* parent = nullptr; }; struct FileNode : Node { FileNode(const QString& _fileName, const QString& _path, DirNode* _parent, DataObject* _data, const QString& _displayName) : Node(_fileName, _path, _parent, _displayName), data(_data) {} ~FileNode() { delete data; } bool editable = false; DataObject* data = nullptr; }; struct DirNode : Node { using Node::Node; ~DirNode() { qDeleteAll(dirs); qDeleteAll(files); } NodeList dirs; NodeList files; int childCount() const { return dirs.size() + files.size(); } }; DirNode* m_root = nullptr; DirNode* m_tmpdir = nullptr; QFileIconProvider m_iconProvider; }; #endif // FILETREEMODEL_HH gImageReader-3.4.0/qt/src/MainWindow.cc000066400000000000000000000557221417507262200176510ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * MainWindow.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef Q_OS_LINUX #include #endif #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "MainWindow.hh" #include "Acquirer.hh" #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayerToolSelect.hh" #include "DisplayerToolHOCR.hh" #include "HOCRBatchExportDialog.hh" #include "OutputEditorText.hh" #include "OutputEditorHOCR.hh" #include "RecognitionMenu.hh" #include "Recognizer.hh" #include "SourceManager.hh" #include "TessdataManager.hh" #include "Utils.hh" #include "ui_AboutDialog.h" #define CHECKURL "https://raw.githubusercontent.com/manisandro/gImageReader/master/LATEST" #define DOWNLOADURL "https://github.com/manisandro/gImageReader/releases" #define CHANGELOGURL "https://raw.githubusercontent.com/manisandro/gImageReader/master/NEWS" void MainWindow::signalHandler(int signal) { signalHandlerExec(signal, false); } void MainWindow::tesseractCrash(int signal) { signalHandlerExec(signal, true); } void MainWindow::signalHandlerExec(int signal, bool tesseractCrash) { std::signal(signal, nullptr); QString filename; if(MAIN->getOutputEditor()) { filename = QDir(Utils::documentsFolder()).absoluteFilePath(QString("%1_crash-save.txt").arg(PACKAGE_NAME)); int i = 0; while(QFile(filename).exists()) { ++i; filename = QDir(Utils::documentsFolder()).absoluteFilePath(QString("%1_crash-save_%2.txt").arg(PACKAGE_NAME).arg(i)); } if(!MAIN->getOutputEditor()->crashSave(filename)) { filename.clear(); } } QProcess process; process.start(QApplication::applicationFilePath(), QStringList() << "crashhandle" << QString::number(QApplication::applicationPid()) << QString::number(tesseractCrash) << filename); #ifdef Q_OS_LINUX // Allow crash handler spawned debugger to attach to the crashed process #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) prctl(PR_SET_PTRACER, process.processId(), 0, 0, 0); #else prctl(PR_SET_PTRACER, process.pid(), 0, 0, 0); #endif #endif process.waitForFinished(-1); std::raise(signal); } #if !(defined(__ARMEL__) || defined(__LCC__) && __LCC__ <= 121) static void terminateHandler() { std::set_terminate(nullptr); std::exception_ptr exptr = std::current_exception(); if (exptr != 0) { try { std::rethrow_exception(exptr); } catch (std::exception& ex) { std::cerr << "Terminated due to exception: " << ex.what() << std::endl; } catch (...) { std::cerr << "Terminated due to unknown exception" << std::endl; } } else { std::cerr << "Terminated due to unknown reason:" << std::endl; } MainWindow::signalHandler(SIGABRT); } #endif MainWindow* MainWindow::s_instance = nullptr; MainWindow::MainWindow(const QStringList& files) : m_idleActions(0) { s_instance = this; std::signal(SIGSEGV, signalHandler); std::signal(SIGABRT, signalHandler); #if !(defined(__ARMEL__) || defined(__LCC__) && __LCC__ <= 121) std::set_terminate(terminateHandler); #endif QList listOfProxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(QUrl(CHECKURL))); if (listOfProxies.size()) { QNetworkProxy::setApplicationProxy(listOfProxies[0]); } qRegisterMetaType(); ui.setupUi(this); m_config = new Config(this); m_acquirer = new Acquirer(ui); m_displayer = new Displayer(ui); m_recognitionMenu = new RecognitionMenu(this); m_recognizer = new Recognizer(ui); m_sourceManager = new SourceManager(ui); ui.centralwidget->layout()->addWidget(m_displayer); ui.toolBarMain->setLayoutDirection(Qt::LeftToRight); m_idleActions.setExclusive(false); m_idleActions.addAction(ui.actionZoomIn); m_idleActions.addAction(ui.actionZoomOut); m_idleActions.addAction(ui.actionOriginalSize); m_idleActions.addAction(ui.actionBestFit); m_idleActions.addAction(ui.actionRotateLeft); m_idleActions.addAction(ui.actionRotateRight); m_idleActions.addAction(ui.actionAutodetectLayout); m_idleWidgets.append(ui.spinBoxRotation); m_idleWidgets.append(ui.spinBoxPage); m_idleWidgets.append(ui.spinBoxBrightness); m_idleWidgets.append(ui.spinBoxContrast); m_idleWidgets.append(ui.spinBoxResolution); m_idleWidgets.append(ui.toolButtonRecognize); ui.comboBoxOCRMode->addItem(_("Plain text"), OutputModeText); ui.comboBoxOCRMode->addItem(_("hOCR, PDF"), OutputModeHOCR); ui.comboBoxOCRMode->setCurrentIndex(-1); connect(ui.actionRedetectLanguages, &QAction::triggered, m_recognitionMenu, &RecognitionMenu::rebuild); connect(ui.actionManageLanguages, &QAction::triggered, this, &MainWindow::manageLanguages); connect(ui.actionPreferences, &QAction::triggered, this, &MainWindow::showConfig); connect(ui.actionHelp, &QAction::triggered, this, [this] { showHelp(); }); connect(ui.actionAbout, &QAction::triggered, this, &MainWindow::showAbout); connect(ui.actionImageControls, &QAction::toggled, ui.widgetImageControls, &QWidget::setVisible); connect(m_acquirer, &Acquirer::scanPageAvailable, m_sourceManager, [this](const QString & source) { m_sourceManager->addSource(source); }); connect(m_sourceManager, &SourceManager::sourceChanged, this, &MainWindow::onSourceChanged); connect(ui.actionToggleOutputPane, &QAction::toggled, ui.dockWidgetOutput, &QDockWidget::setVisible); connect(ui.comboBoxOCRMode, qOverload(&QComboBox::currentIndexChanged), this, [this] { setOutputMode(static_cast(ui.comboBoxOCRMode->currentData().toInt())); }); connect(m_recognitionMenu, &RecognitionMenu::languageChanged, this, &MainWindow::languageChanged); connect(ui.actionAutodetectLayout, &QAction::triggered, m_displayer, &Displayer::autodetectOCRAreas); connect(ui.actionBatchExport, &QAction::triggered, this, &MainWindow::batchExport); ADD_SETTING(VarSetting("wingeom")); ADD_SETTING(VarSetting("winstate")); ADD_SETTING(ActionSetting("showcontrols", ui.actionImageControls)); ADD_SETTING(ComboSetting("outputeditor", ui.comboBoxOCRMode, OutputModeText)); m_recognitionMenu->rebuild(); m_progressWidget = new QWidget(this); m_progressWidget->setLayout(new QHBoxLayout()); m_progressWidget->layout()->setContentsMargins(0, 0, 0, 0); m_progressWidget->layout()->setSpacing(2); m_progressWidget->layout()->addWidget(new QLabel()); m_progressBar = new QProgressBar(); m_progressBar->setRange(0, 100); m_progressBar->setMaximumWidth(100); m_progressTimer.setSingleShot(false); connect(&m_progressTimer, &QTimer::timeout, this, &MainWindow::progressUpdate); m_progressWidget->layout()->addWidget(m_progressBar); m_progressCancelButton = new QToolButton(); m_progressCancelButton->setIcon(QIcon::fromTheme("dialog-close")); connect(m_progressCancelButton, &QToolButton::clicked, this, &MainWindow::progressCancel); m_progressWidget->layout()->addWidget(m_progressCancelButton); statusBar()->addPermanentWidget(m_progressWidget); m_progressWidget->setVisible(false); pushState(State::Idle, _("Select an image to begin...")); restoreGeometry(ConfigSettings::get>("wingeom")->getValue()); restoreState(ConfigSettings::get>("winstate")->getValue()); ui.dockWidgetOutput->setVisible(false); ui.actionSources->trigger(); #if ENABLE_VERSIONCHECK if(ConfigSettings::get("updatecheck")->getValue()) { QFuture future = QtConcurrent::run([ = ] { QString messages; QString newver = Utils::download(QUrl(CHECKURL), messages, 5000); newver.replace(QRegularExpression("\\s+"), ""); QRegularExpression pat(R"(^[\d+\.]+\d+$)"); return pat.match(newver).hasMatch() ? newver : QString(); }); connect(&m_versionWatcher, &QFutureWatcher::finished, this, [ = ] { checkVersion(m_versionWatcher.future().result()); }); m_versionWatcher.setFuture(future); } #endif QStringList hocrFiles; QStringList otherFiles; for(const QString& file : files) { if(file.endsWith(".html", Qt::CaseInsensitive)) { hocrFiles.append(file); } else { otherFiles.append(file); } } m_sourceManager->addSources(otherFiles); if(!hocrFiles.isEmpty()) { if(setOutputMode(OutputModeHOCR)) { static_cast(m_outputEditor)->open(OutputEditorHOCR::InsertMode::Append, hocrFiles); ui.dockWidgetOutput->setVisible(true); } } } MainWindow::~MainWindow() { m_versionWatcher.waitForFinished(); delete m_acquirer; delete m_outputEditor; delete m_sourceManager; m_displayer->setTool(nullptr); delete m_displayerTool; delete m_displayer; delete m_recognizer; delete m_config; s_instance = nullptr; } void MainWindow::openFiles(const QStringList& files) { m_sourceManager->addSources(files); } void MainWindow::openOutput(const QString& filename) { if(filename.endsWith(".txt", Qt::CaseInsensitive)) { if(setOutputMode(OutputModeText)) { m_outputEditor->open(filename); } } else if(filename.endsWith(".html", Qt::CaseInsensitive)) { if(setOutputMode(OutputModeHOCR)) { m_outputEditor->open(filename); } } } void MainWindow::setOutputPaneVisible(bool visible) { ui.actionToggleOutputPane->setChecked(visible); } void MainWindow::pushState(MainWindow::State state, const QString& msg) { m_stateStack.push(QPair(state, msg)); ui.statusbar->showMessage(msg); setState(state); if(state == State::Busy) { QApplication::setOverrideCursor(Qt::WaitCursor); } } void MainWindow::popState() { if(m_stateStack.top().first == State::Busy) { QApplication::restoreOverrideCursor(); } m_stateStack.pop(); const QPair& pair = m_stateStack.top(); ui.statusbar->showMessage(pair.second); setState(pair.first); } void MainWindow::setState(State state) { bool isIdle = state == State::Idle; m_idleActions.setEnabled(!isIdle); for(QWidget* widget : m_idleWidgets) { widget->setEnabled(!isIdle); } } void MainWindow::closeEvent(QCloseEvent* ev) { if(m_stateStack.top().first == State::Busy) { ev->ignore(); } else if(!m_outputEditor->clear()) { ev->ignore(); } else { if(!isMaximized()) { ConfigSettings::get>("wingeom")->setValue(saveGeometry()); } ConfigSettings::get>("winstate")->setValue(saveState()); } } void MainWindow::onSourceChanged() { QList sources = m_sourceManager->getSelectedSources(); if(m_displayer->setSources(sources) && !sources.empty()) { setWindowTitle(QString("%1 - %2").arg(sources.size() == 1 ? sources.front()->displayname : _("Multiple sources (%1)").arg(sources.size())).arg(PACKAGE_NAME)); if(m_stateStack.top().first == State::Idle) { pushState(State::Normal, _("Ready")); } } else { if(m_stateStack.top().first == State::Normal) { popState(); } setWindowTitle(PACKAGE_NAME); } } void MainWindow::showAbout() { QDialog d(this); Ui::AboutDialog aboutDialogUi; aboutDialogUi.setupUi(&d); aboutDialogUi.labelVersion->setText(QString("%1 (%2)").arg(PACKAGE_VERSION, QString(PACKAGE_REVISION).left(6)));; aboutDialogUi.labelTesseractVer->setText(QString("

      %1 %2

      ").arg(_("Using tesseract")).arg(TESSERACT_VERSION_STR)); d.exec(); } void MainWindow::showHelp(const QString& chapter) { #ifdef Q_OS_WIN32 // Always use relative path on Windows QString manualDirPath; #else QString manualDirPath(MANUAL_DIR); #endif if(manualDirPath.isEmpty()) { manualDirPath = QString("%1/../share/doc/gimagereader").arg(QApplication::applicationDirPath()); } QDir manualDir(manualDirPath); QString language = QLocale::system().name().left(2); QString manualFile = manualDir.absoluteFilePath(QString("manual-%1.html").arg(language)); if(!QFile(manualFile).exists()) { manualFile = manualDir.absoluteFilePath("manual.html"); } QUrl manualUrl = QUrl::fromLocalFile(manualFile); manualUrl.setFragment(chapter); QDesktopServices::openUrl(manualUrl); } void MainWindow::manageLanguages() { TessdataManager manager(MAIN); if(manager.setup()) { manager.exec(); } } void MainWindow::showConfig() { m_config->showDialog(); m_recognitionMenu->rebuild(); } bool MainWindow::setOutputMode(OutputMode mode) { if(m_outputEditor && !m_outputEditor->clear()) { ui.comboBoxOCRMode->blockSignals(true); if(dynamic_cast(m_outputEditor)) { ui.comboBoxOCRMode->setCurrentIndex(ui.comboBoxOCRMode->findData(OutputModeText)); } else { /*if(dynamic_cast(m_outputEditor))*/ ui.comboBoxOCRMode->setCurrentIndex(ui.comboBoxOCRMode->findData(OutputModeHOCR)); } ui.comboBoxOCRMode->blockSignals(false); return false; } else { delete m_displayerTool; delete m_outputEditor; if(mode == OutputModeText) { m_displayerTool = new DisplayerToolSelect(m_displayer); m_outputEditor = new OutputEditorText(); } else { /*if(mode == OutputModeHOCR)*/ m_displayerTool = new DisplayerToolHOCR(m_displayer); m_outputEditor = new OutputEditorHOCR(static_cast(m_displayerTool)); } ui.actionAutodetectLayout->setVisible(m_displayerTool->allowAutodetectOCRAreas()); m_displayer->setTool(m_displayerTool); m_outputEditor->setLanguage(m_recognitionMenu->getRecognitionLanguage()); connect(ui.actionToggleOutputPane, &QAction::toggled, m_outputEditor, &OutputEditor::onVisibilityChanged); ui.dockWidgetOutput->setWidget(m_outputEditor->getUI()); ui.comboBoxOCRMode->blockSignals(true); ui.comboBoxOCRMode->setCurrentIndex(ui.comboBoxOCRMode->findData(mode)); ui.comboBoxOCRMode->blockSignals(false); return true; } } void MainWindow::addNotification(const QString& title, const QString& message, const QList& actions, MainWindow::Notification* handle) { QFrame* frame = new QFrame(); frame->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); frame->setStyleSheet("background: #FFD000;"); QHBoxLayout* layout = new QHBoxLayout(frame); layout->addWidget(new QLabel(QString("%1").arg(title), frame)); QLabel* msgLabel = new QLabel(message, frame); msgLabel->setWordWrap(true); layout->addWidget(msgLabel, 1); for(const NotificationAction& action : actions) { QToolButton* btn = new QToolButton(frame); btn->setText(action.text); connect(btn, &QToolButton::clicked, action.slot); if(action.close) { btn->setProperty("handle", QVariant::fromValue(reinterpret_cast(handle))); btn->setProperty("frame", QVariant::fromValue(reinterpret_cast(frame))); connect(btn, &QToolButton::clicked, this, [this] { hideNotification(); }); } layout->addWidget(btn); } QToolButton* closeBtn = new QToolButton(); closeBtn->setIcon(QIcon::fromTheme("dialog-close")); closeBtn->setProperty("handle", QVariant::fromValue(reinterpret_cast(handle))); closeBtn->setProperty("frame", QVariant::fromValue(reinterpret_cast(frame))); connect(closeBtn, &QToolButton::clicked, this, [this] { hideNotification(); }); layout->addWidget(closeBtn); ui.centralwidget->layout()->addWidget(frame); if(handle) { *handle = frame; } } void MainWindow::hideNotification(Notification handle) { if(!handle && QObject::sender()) { handle = static_cast(static_cast(QObject::sender())->property("frame").value()); Notification* h = reinterpret_cast(static_cast(QObject::sender())->property("handle").value()); if(h) { *h = nullptr; } } if(handle) { static_cast(handle)->deleteLater(); } } void MainWindow::checkVersion(const QString& newver) { qDebug("Newest version is: %s", qPrintable(newver)); if(newver.isEmpty()) { return; } QString curver = PACKAGE_VERSION; if(newver.compare(curver) > 0) { addNotification(_("New version"), _("gImageReader %1 is available").arg(newver), { {_("Download"), [this]{ openDownloadUrl(); }, false}, {_("Changelog"), [this]{ openChangeLogUrl(); }, false}, {_("Don't notify again"), [this]{ m_config->disableUpdateCheck(); }, true} }); } } void MainWindow::openDownloadUrl() { QDesktopServices::openUrl(QUrl(DOWNLOADURL)); } void MainWindow::openChangeLogUrl() { QDesktopServices::openUrl(QUrl(CHANGELOGURL)); } void MainWindow::showProgress(ProgressMonitor* monitor, int updateInterval) { m_progressMonitor = monitor; m_progressTimer.start(updateInterval); m_progressCancelButton->setEnabled(true); m_progressBar->setValue(0); m_progressWidget->show(); } void MainWindow::hideProgress() { m_progressWidget->hide(); m_progressTimer.stop(); m_progressMonitor = nullptr; } void MainWindow::progressCancel() { if(m_progressMonitor) { m_progressCancelButton->setEnabled(false); m_progressMonitor->cancel(); } } void MainWindow::progressUpdate() { if(m_progressMonitor) { m_progressBar->setValue(m_progressMonitor->getProgress()); } } void MainWindow::languageChanged(const Config::Lang& lang) { if(m_outputEditor) { m_outputEditor->setLanguage(lang); } hideNotification(m_notifierHandle); m_notifierHandle = nullptr; const QString& code = lang.code; if(!code.isEmpty() && !QtSpell::checkLanguageInstalled(code) && ConfigSettings::get("dictinstall")->getValue()) { NotificationAction actionDontShowAgain = {_("Don't show again"), [this]{ m_config->disableDictInstall(); }, true}; NotificationAction actionInstall = {_("Install"), [this]{ dictionaryAutoinstall(); }, false}; #ifdef Q_OS_LINUX if(getConfig()->useSystemDataLocations()) { QDBusConnectionInterface* iface = QDBusConnection::sessionBus().interface(); iface->startService("org.freedesktop.PackageKit"); if(!iface->isServiceRegistered("org.freedesktop.PackageKit").value()) { actionInstall = {_("Help"), [this]{ showHelp(); }, false}; // TODO #InstallSpelling qWarning("Could not find PackageKit on DBus, dictionary autoinstallation will not work"); } } #endif const QString& name = m_recognitionMenu->getRecognitionLanguage().name; addNotification(_("Spelling dictionary missing"), _("The spellcheck dictionary for %1 is not installed").arg(name), {actionInstall, actionDontShowAgain}, &m_notifierHandle); } } void MainWindow::dictionaryAutoinstall() { QString code = m_recognitionMenu->getRecognitionLanguage().code; pushState(State::Busy, _("Installing spelling dictionary for '%1'").arg(code)); #ifdef Q_OS_WIN bool isWindows = true; #else bool isWindows = false; #endif if(!isWindows && MAIN->getConfig()->useSystemDataLocations()) { // Place this in a ifdef since DBus stuff cannot be compiled on Windows #ifdef Q_OS_LINUX QStringList files; for(const QString& langCulture : m_config->searchLangCultures(code)) { files.append("/usr/share/myspell/" + langCulture + ".dic"); files.append("/usr/share/hunspell/" + langCulture + ".dic"); } QDBusMessage req = QDBusMessage::createMethodCall("org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify", "InstallProvideFiles"); req.setArguments(QList() << QVariant::fromValue((quint32)winId()) << QVariant::fromValue(files) << QVariant::fromValue(QString("always"))); QDBusMessage reply = QDBusConnection::sessionBus().call(req, QDBus::BlockWithGui, 3600000); if(reply.type() == QDBusMessage::ErrorMessage) { if(QMessageBox::Help == QMessageBox::critical(this, _("Error"), _("Failed to install spelling dictionary: %1").arg(reply.errorMessage()), QMessageBox::Ok | QMessageBox::Help, QMessageBox::Ok)) { showHelp("#InstallSpelling"); } } m_recognitionMenu->rebuild(); popState(); #endif } else { QString url = "https://cgit.freedesktop.org/libreoffice/dictionaries/tree/"; QString plainurl = "https://cgit.freedesktop.org/libreoffice/dictionaries/plain/"; QDir spellingDir(getConfig()->spellingLocation()); if(!QDir().mkpath(spellingDir.absolutePath())) { popState(); if(QMessageBox::Help == QMessageBox::critical(this, _("Error"), _("Failed to create directory for spelling dictionaries."), QMessageBox::Ok | QMessageBox::Help, QMessageBox::Ok)) { showHelp("#InstallSpelling"); } return; } QString messages; QString html = QString(Utils::download(url, messages)); if(html.isEmpty()) { popState(); if(QMessageBox::Help == QMessageBox::critical(this, _("Error"), _("Could not read %1: %2.").arg(url).arg(messages), QMessageBox::Ok | QMessageBox::Help, QMessageBox::Ok)) { showHelp("#InstallSpelling"); } return; } QString langCode = code.left(code.indexOf('_')); QRegularExpression langPat(QString(">(%1_?[A-Z]*)<").arg(langCode)); QRegularExpression dictPat(QString(">(%1_?[\\w_]*\\.(dic|aff))<").arg(langCode)); QStringList downloaded; QStringList failed; int pos = 0; QRegularExpressionMatch match; while((match = langPat.match(html, pos)).hasMatch()) { QString lang = match.captured(1); pos = match.capturedEnd(); QString dictHtml = QString(Utils::download(url + lang + "/", messages)); if(dictHtml.isEmpty()) { continue; } int dictPos = 0; QRegularExpressionMatch dictMatch; while((dictMatch = dictPat.match(dictHtml, dictPos)).hasMatch()) { QString filename = dictMatch.captured(1); pushState(State::Busy, _("Downloading '%1'...").arg(filename)); QByteArray data = Utils::download(plainurl + lang + "/" + filename, messages); if(!data.isNull()) { QFile file(spellingDir.absoluteFilePath(filename)); if(file.open(QIODevice::WriteOnly)) { file.write(data); downloaded.append(filename); } else { failed.append(filename); } } else { failed.append(filename); } popState(); dictPos += dictMatch.capturedEnd(); } } popState(); if(!failed.isEmpty()) { QMessageBox::critical(this, _("Error"), _("The following dictionaries could not be downloaded:\n%1\n\nCheck the connectivity and directory permissions.\nHint: If you don't have write permissions in system folders, you can switch to user paths in the settings dialog.").arg(failed.join("\n"))); } else if(!downloaded.isEmpty()) { m_recognitionMenu->rebuild(); QMessageBox::information(this, _("Dictionaries installed"), _("The following dictionary files were installed:\n%1").arg(downloaded.join("\n"))); } else { if(QMessageBox::Help == QMessageBox::critical(this, _("Error"), _("No spelling dictionaries found for '%1'.").arg(code), QMessageBox::Ok | QMessageBox::Help, QMessageBox::Ok)) { showHelp("#InstallSpelling"); } } } } void MainWindow::batchExport() { HOCRBatchExportDialog dialog; dialog.exec(); } gImageReader-3.4.0/qt/src/MainWindow.hh000066400000000000000000000111411417507262200176460ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * MainWindow.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef MAINWINDOW_HH #define MAINWINDOW_HH #include #include #include #include #include #include #include #include #include "common.hh" #include "Config.hh" #include "Ui_MainWindow.hh" #define MAIN MainWindow::getInstance() class Acquirer; class Displayer; class DisplayerTool; class OutputEditor; class RecognitionMenu; class Recognizer; class SourceManager; class Source; class QProgressBar; class MainWindow : public QMainWindow { Q_OBJECT public: enum class State { Idle, Normal, Busy }; enum OutputMode {OutputModeText, OutputModeHOCR}; struct NotificationAction { QString text; std::function slot; bool close; }; class ProgressMonitor { public: ProgressMonitor(int total) : mTotal(total) {} virtual ~ProgressMonitor() {} void increaseProgress() { QMutexLocker locker(&mMutex); ++mProgress; } virtual int getProgress() const { QMutexLocker locker(&mMutex); return (mProgress * 100) / mTotal; } virtual void cancel() { QMutexLocker locker(&mMutex); mCancelled = true; } bool cancelled() const { QMutexLocker locker(&mMutex); return mCancelled; } protected: mutable QMutex mMutex; const int mTotal; int mProgress = 0; bool mCancelled = false; }; typedef void* Notification; static MainWindow* getInstance() { return s_instance; } static void signalHandler(int signal); static void tesseractCrash(int signal); MainWindow(const QStringList& files); ~MainWindow(); Config* getConfig() const { return m_config; } Displayer* getDisplayer() const { return m_displayer; } OutputEditor* getOutputEditor() const { return m_outputEditor; } Recognizer* getRecognizer() const { return m_recognizer; } SourceManager* getSourceManager() const { return m_sourceManager; } RecognitionMenu* getRecognitionMenu() const { return m_recognitionMenu; } void addNotification(const QString& title, const QString& message, const QList& actions, Notification* handle = nullptr); void openFiles(const QStringList& files); void openOutput(const QString& filename); void setOutputPaneVisible(bool visible); void showProgress(ProgressMonitor* monitor, int updateInterval = 500); void hideProgress(); public slots: bool setOutputMode(OutputMode mode); void manageLanguages(); void popState(); void pushState(MainWindow::State state, const QString& msg); void showHelp(const QString& chapter = ""); void hideNotification(Notification handle = nullptr); private: static void signalHandlerExec(int signal, bool tesseractCrash); friend class BusyEventFilter; static MainWindow* s_instance; UI_MainWindow ui; Config* m_config = nullptr; Acquirer* m_acquirer = nullptr; Displayer* m_displayer = nullptr; DisplayerTool* m_displayerTool = nullptr; OutputEditor* m_outputEditor = nullptr; RecognitionMenu* m_recognitionMenu = nullptr; Recognizer* m_recognizer = nullptr; SourceManager* m_sourceManager = nullptr; QActionGroup m_idleActions; QList m_idleWidgets; QStack> m_stateStack; MainWindow::Notification m_notifierHandle = nullptr; QWidget* m_progressWidget = nullptr; QProgressBar* m_progressBar = nullptr; QToolButton* m_progressCancelButton = nullptr; QTimer m_progressTimer; ProgressMonitor* m_progressMonitor = nullptr; QFutureWatcher m_versionWatcher; void closeEvent(QCloseEvent* ev); void setState(State state); private slots: void checkVersion(const QString& newver); void onSourceChanged(); void showAbout(); void showConfig(); void openDownloadUrl(); void openChangeLogUrl(); void progressCancel(); void progressUpdate(); void languageChanged(const Config::Lang& lang); void dictionaryAutoinstall(); void batchExport(); }; Q_DECLARE_METATYPE(MainWindow::State) #endif gImageReader-3.4.0/qt/src/OutputEditor.cc000066400000000000000000000020331417507262200202270ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditor.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "OutputEditor.hh" Q_DECLARE_METATYPE(OutputEditor::ReadSessionData) OutputEditor::OutputEditor(QObject* parent) : QObject(parent) { static int reg = qRegisterMetaType("ReadSessionData"); Q_UNUSED(reg); } gImageReader-3.4.0/qt/src/OutputEditor.hh000066400000000000000000000047171417507262200202540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditor.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITOR_HH #define OUTPUTEDITOR_HH #include #include "Config.hh" namespace tesseract { class TessBaseAPI; } class OutputEditor : public QObject { Q_OBJECT public: struct PageInfo { QString filename; int page; double angle; int resolution; }; struct ReadSessionData { virtual ~ReadSessionData() = default; bool prependFile; bool prependPage; PageInfo pageInfo; }; class BatchProcessor { public: virtual ~BatchProcessor() = default; virtual QString fileSuffix() const = 0; virtual void writeHeader(QIODevice* /*dev*/, tesseract::TessBaseAPI* /*tess*/, const PageInfo& /*pageInfo*/) const {} virtual void writeFooter(QIODevice* /*dev*/) const {} virtual void appendOutput(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const = 0; }; OutputEditor(QObject* parent = 0); virtual QWidget* getUI() = 0; virtual ReadSessionData* initRead(tesseract::TessBaseAPI& tess) = 0; virtual void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) = 0; virtual void readError(const QString& errorMsg, ReadSessionData* data) = 0; virtual void finalizeRead(ReadSessionData* data) { delete data; } virtual BatchProcessor* createBatchProcessor(const QMap& options) const = 0; virtual bool containsSource(const QString& source, int sourcePage) const { return false; } virtual bool crashSave(const QString& filename) const = 0; public slots: virtual void onVisibilityChanged(bool /*visible*/) {} virtual bool open(const QString& filename) = 0; virtual bool clear(bool hide = true) = 0; virtual void setLanguage(const Config::Lang& /*lang*/) {} }; #endif // OUTPUTEDITOR_HH gImageReader-3.4.0/qt/src/OutputEditorText.cc000066400000000000000000000464361417507262200211130ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorText.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "OutputEditorText.hh" #include "Recognizer.hh" #include "SourceManager.hh" #include "Utils.hh" void OutputEditorText::TextBatchProcessor::appendOutput(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const { char* text = tess->GetUTF8Text(); if(firstArea && m_prependPage) { dev->write(_("Page: %1\n").arg(pageInfo.page).toUtf8()); } dev->write(text); dev->write("\n"); delete[] text; } OutputEditorText::OutputEditorText() { m_insertMode = InsertMode::Append; m_widget = new QWidget; ui.setupUi(m_widget); m_recentMenu = new QMenu(); ui.toolButtonOpen->setMenu(m_recentMenu); ui.actionOutputModeAppend->setData(static_cast(InsertMode::Append)); ui.actionOutputModeCursor->setData(static_cast(InsertMode::Cursor)); ui.actionOutputModeReplace->setData(static_cast(InsertMode::Replace)); ui.actionOutputReplace->setShortcut(Qt::CTRL | Qt::Key_F); ui.actionOutputSave->setShortcut(Qt::CTRL | Qt::Key_S); m_spell.setDecodeLanguageCodes(true); m_spell.setShowCheckSpellingCheckbox(true); m_spell.setUndoRedoEnabled(true); connect(ui.toolButtonOpen, &QToolButton::clicked, [this] { open(); }); connect(m_recentMenu, &QMenu::aboutToShow, this, &OutputEditorText::prepareRecentMenu); connect(ui.menuOutputMode, &QMenu::triggered, this, &OutputEditorText::setInsertMode); connect(ui.toolButtonOutputPostproc, &QToolButton::clicked, this, &OutputEditorText::filterBuffer); connect(ui.actionOutputReplace, &QAction::toggled, ui.searchFrame, &SearchReplaceFrame::setVisible); connect(ui.actionOutputReplace, &QAction::toggled, ui.searchFrame, &SearchReplaceFrame::clear); connect(ui.actionOutputUndo, &QAction::triggered, &m_spell, &QtSpell::TextEditChecker::undo); connect(ui.actionOutputRedo, &QAction::triggered, &m_spell, &QtSpell::TextEditChecker::redo); connect(ui.actionOutputSave, &QAction::triggered, this, [this] { save(); }); connect(ui.actionOutputClear, &QAction::triggered, this, &OutputEditorText::clear); connect(ui.searchFrame, &SearchReplaceFrame::findReplace, this, &OutputEditorText::findReplace); connect(ui.searchFrame, &SearchReplaceFrame::replaceAll, this, &OutputEditorText::replaceAll); connect(ui.searchFrame, &SearchReplaceFrame::applySubstitutions, this, &OutputEditorText::applySubstitutions); connect(&m_spell, &QtSpell::TextEditChecker::undoAvailable, ui.actionOutputUndo, &QAction::setEnabled); connect(&m_spell, &QtSpell::TextEditChecker::redoAvailable, ui.actionOutputRedo, &QAction::setEnabled); connect(ConfigSettings::get("customoutputfont"), &FontSetting::changed, this, &OutputEditorText::setFont); connect(ConfigSettings::get("systemoutputfont"), &SwitchSetting::changed, this, &OutputEditorText::setFont); connect(ui.actionOutputPostprocDrawWhitespace, &QAction::toggled, [this] (bool active) { textEdit()->setDrawWhitespace(active); }); connect(ui.tabWidget, &QTabWidget::currentChanged, this, &OutputEditorText::tabChanged); connect(ui.tabWidget, &QTabWidget::tabCloseRequested, this, &OutputEditorText::closeTab); connect(ui.toolButtonAddTab, &QToolButton::clicked, this, [this] { addTab(); }); addTab(); ADD_SETTING(ActionSetting("keepdot", ui.actionOutputPostprocKeepEndMark, true)); ADD_SETTING(ActionSetting("keepquote", ui.actionOutputPostprocKeepQuote)); ADD_SETTING(ActionSetting("joinhyphen", ui.actionOutputPostprocJoinHyphen, true)); ADD_SETTING(ActionSetting("joinspace", ui.actionOutputPostprocCollapseSpaces, true)); ADD_SETTING(ActionSetting("keepparagraphs", ui.actionOutputPostprocKeepParagraphs, true)); ADD_SETTING(ActionSetting("drawwhitespace", ui.actionOutputPostprocDrawWhitespace)); ADD_SETTING(VarSetting("recenttxtitems")); setFont(); } OutputEditorText::~OutputEditorText() { delete m_widget; } int OutputEditorText::addTab(const QString& title) { OutputTextEdit* textEdit = new OutputTextEdit; if(ConfigSettings::get("systemoutputfont")->getValue()) { textEdit->setFont(QFont()); } else { textEdit->setFont(ConfigSettings::get("customoutputfont")->getValue()); } textEdit->setWordWrapMode(QTextOption::WordWrap); QString tabLabel = title.isEmpty() ? QString("Untitled %1").arg(++m_tabCounter) : title; int page = ui.tabWidget->addTab(textEdit, tabLabel); auto documentChanged = [this, textEdit, page] { QString text = ui.tabWidget->tabText(page); if (textEdit->document()->isModified()) { ui.tabWidget->setTabText(page, text.endsWith('*') ? text : text + "*"); } else { ui.tabWidget->setTabText(page, text.endsWith('*') ? text.left(text.length() - 1) : text); } }; connect(textEdit->document(), &QTextDocument::modificationChanged, documentChanged); connect(textEdit->document(), &QTextDocument::contentsChanged, documentChanged); ui.tabWidget->setCurrentIndex(page); return page; } void OutputEditorText::tabChanged(int) { if (ui.tabWidget->currentIndex() >= 0) { OutputTextEdit* edit = textEdit(); bool isModified = edit->document()->isModified(); m_spell.setTextEdit(edit); edit->document()->setModified(isModified); // FIXME: setModified above seems to not trigger the modificationChanged signal, manually force the correct tab title text QString text = ui.tabWidget->tabText(ui.tabWidget->currentIndex()); if (isModified && !text.endsWith("*")) { ui.tabWidget->setTabText(ui.tabWidget->currentIndex(), text + "*"); } else if (!isModified && text.endsWith("*")) { ui.tabWidget->setTabText(ui.tabWidget->currentIndex(), text.left(text.length() - 1)); } edit->setDrawWhitespace(ui.actionOutputPostprocDrawWhitespace->isChecked()); edit->setFocus(); } } void OutputEditorText::closeTab(int page) { if(textEdit(page)->document()->isModified()) { int response = QMessageBox::question(MAIN, _("Document not saved"), _("Save document before proceeding?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if (response == QMessageBox::Cancel) { return; } if (response == QMessageBox::Save && !save(page, textEdit(page)->filename())) { return; } } ui.tabWidget->removeTab(page); if (ui.tabWidget->count() == 0) { m_tabCounter = 0; addTab(); } } QString OutputEditorText::tabName(int page) const { QString title = ui.tabWidget->tabText(page); return title.endsWith("*") ? title.left(title.length() - 1) : title; } void OutputEditorText::setTabName(int page, const QString& title) { ui.tabWidget->setTabText(page, title); } OutputTextEdit* OutputEditorText::textEdit(int page) const { page = page == -1 ? ui.tabWidget->currentIndex() : page; return qobject_cast(ui.tabWidget->widget(page)); } void OutputEditorText::setFont() { QFont font; if(!ConfigSettings::get("systemoutputfont")->getValue()) { QFont font = ConfigSettings::get("customoutputfont")->getValue(); } for(int i = 0, n = ui.tabWidget->count(); i < n; ++i) { textEdit(i)->setFont(font); } } void OutputEditorText::setInsertMode(QAction* action) { m_insertMode = static_cast(action->data().value()); ui.toolButtonOutputMode->setIcon(action->icon()); } void OutputEditorText::filterBuffer() { QTextCursor cursor = textEdit()->regionBounds(); QString txt = cursor.selectedText(); Utils::busyTask([this, &txt] { // Always remove trailing whitespace txt.replace(QRegularExpression("\\s+$"), ""); if(ui.actionOutputPostprocJoinHyphen->isChecked()) { txt.replace(QRegularExpression("[-\u2014]\\s*\u2029\\s*"), ""); } QString preChars, sucChars; if(ui.actionOutputPostprocKeepParagraphs->isChecked()) { preChars += "\u2029"; // Keep if preceded by line break } if(ui.actionOutputPostprocKeepEndMark->isChecked()) { preChars += "\\.\\?!"; // Keep if preceded by end mark (.?!) } if(ui.actionOutputPostprocKeepQuote->isChecked()) { preChars += "'\"\u00BB\u00AB"; // Keep if preceded by quote sucChars += "'\"\u00AB\u00BB"; // Keep if succeeded by quote } if(ui.actionOutputPostprocKeepParagraphs->isChecked()) { sucChars += "\u2029"; // Keep if succeeded by line break } if(!preChars.isEmpty()) { preChars = "([^" + preChars + "])"; } if(!sucChars.isEmpty()) { sucChars = "(?![" + sucChars + "])"; } QString expr = preChars + "\u2029" + sucChars; txt.replace(QRegularExpression(expr), preChars.isEmpty() ? " " : "\\1 "); if(ui.actionOutputPostprocCollapseSpaces->isChecked()) { txt.replace(QRegularExpression("[ \t]+"), " "); } return true; }, _("Stripping line breaks...")); textEdit()->setTextCursor(cursor); cursor.insertText(txt); cursor.setPosition(cursor.position() - txt.length(), QTextCursor::KeepAnchor); textEdit()->setTextCursor(cursor); } void OutputEditorText::findReplace(const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace) { ui.searchFrame->clearErrorState(); if(!textEdit()->findReplace(backwards, replace, matchCase, searchstr, replacestr)) { ui.searchFrame->setErrorState(); } } void OutputEditorText::replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Replacing...")); int count = textEdit()->replaceAll(searchstr, replacestr, matchCase); QPoint popupPos = ui.searchFrame->buttonReplaceAll()->parentWidget()->mapToGlobal(ui.searchFrame->buttonReplaceAll()->pos()); QToolTip::showText(popupPos, _("%1 occurrences replaced").arg(count), nullptr, {}, 4000); QTextStream(stdout) << popupPos.x() << " " << popupPos.y() << Qt::endl; if(count == 0) { ui.searchFrame->setErrorState(); } MAIN->popState(); } void OutputEditorText::applySubstitutions(const QMap& substitutions, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Applying substitutions...")); QTextCursor cursor = textEdit()->regionBounds(); int end = cursor.position(); cursor.setPosition(cursor.anchor()); QTextDocument::FindFlags flags; if(matchCase) { flags = QTextDocument::FindCaseSensitively; } int start = cursor.position(); for(auto it = substitutions.begin(), itEnd = substitutions.end(); it != itEnd; ++it) { QString search = it.key(); QString replace = it.value(); int diff = replace.length() - search.length(); cursor.setPosition(start); while(true) { cursor = textEdit()->document()->find(search, cursor, flags); if(cursor.isNull() || std::max(cursor.anchor(), cursor.position()) > end) { break; } cursor.insertText(replace); end += diff; } QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } MAIN->popState(); } void OutputEditorText::read(tesseract::TessBaseAPI& tess, ReadSessionData* data) { char* textbuf = tess.GetUTF8Text(); QString text = QString::fromUtf8(textbuf); if(!text.endsWith('\n')) { text.append('\n'); } if(data->prependFile || data->prependPage) { QStringList prepend; if(data->prependFile) { prepend.append(_("File: %1").arg(data->pageInfo.filename)); } if(data->prependPage) { prepend.append(_("Page: %1").arg(data->pageInfo.page)); } text.prepend(QString("[%1]\n").arg(prepend.join("; "))); } bool& insertText = static_cast(data)->insertText; QMetaObject::invokeMethod(this, "addText", Qt::QueuedConnection, Q_ARG(QString, text), Q_ARG(bool, insertText)); delete[] textbuf; insertText = true; } void OutputEditorText::readError(const QString& errorMsg, ReadSessionData* data) { bool& insertText = static_cast(data)->insertText; QMetaObject::invokeMethod(this, "addText", Qt::QueuedConnection, Q_ARG(QString, errorMsg), Q_ARG(bool, insertText)); insertText = true; } void OutputEditorText::addText(const QString& text, bool insert) { if(insert) { textEdit()->textCursor().insertText(text); } else { QTextCursor cursor = textEdit()->textCursor(); if(m_insertMode == InsertMode::Append) { cursor.movePosition(QTextCursor::End); } else if(m_insertMode == InsertMode::Cursor) { // pass } else if(m_insertMode == InsertMode::Replace) { cursor.movePosition(QTextCursor::Start); cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); } cursor.insertText(text); textEdit()->setTextCursor(cursor); } MAIN->setOutputPaneVisible(true); } bool OutputEditorText::open(const QString& filename) { QStringList files; if (filename.isEmpty()) { files = FileDialogs::openDialog(_("Select Files"), "", "outputdir", QString("%1 (*.txt)").arg(_("Text Files")), true, MAIN); if (files.isEmpty()) { return false; } } else { files.append(filename); } int currentPage = -1; QStringList failed; QStringList recentItems = ConfigSettings::get>("recenttxtitems")->getValue(); for(const QString& file : files) { QFile fh(file); if(!fh.open(QIODevice::ReadOnly)) { failed.append(file); continue; } recentItems.removeAll(file); recentItems.prepend(file); // Look if document already opened, if so, switch to that tab bool alreadyOpen = false; for(int i = 0, n = ui.tabWidget->count(); i < n; ++i) { if (textEdit(i)->filename() == file) { currentPage = i; alreadyOpen = true; break; } } if (!alreadyOpen) { OutputTextEdit* edit = textEdit(); int page = ui.tabWidget->currentIndex(); // Only add new tab if current tab is not empty if (edit->document()->isModified() == true || !edit->filename().isEmpty()) { page = addTab(QFileInfo(file).fileName()); edit = textEdit(page); } else { setTabName(page, QFileInfo(file).fileName()); } edit->setPlainText(fh.readAll()); edit->document()->setModified(false); edit->document()->clearUndoRedoStacks(); edit->setFilename(file); currentPage = page; } } if (currentPage >= 0) { ui.tabWidget->setCurrentIndex(currentPage); m_spell.clearUndoRedo(); m_spell.checkSpelling(); } if (!failed.empty()) { QMessageBox::critical(MAIN, _("Unable to open files"), _("The following files could not be opened:\n%1").arg(failed.join("\n"))); } ConfigSettings::get>("recenttxtitems")->setValue(recentItems.mid(0, sMaxNumRecent)); MAIN->setOutputPaneVisible(true); return failed.empty(); } bool OutputEditorText::save(int page, const QString& filename) { QString outname = filename; page = page == -1 ? ui.tabWidget->currentIndex() : page; OutputTextEdit* edit = textEdit(page); if(outname.isEmpty()) { QString suggestion = edit->filename(); suggestion = suggestion.isEmpty() ? tabName(page) + ".txt" : suggestion; outname = FileDialogs::saveDialog(_("Save Output..."), suggestion, "outputdir", QString("%1 (*.txt)").arg(_("Text Files"))); if(outname.isEmpty()) { return false; } } QFile file(outname); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(MAIN, _("Failed to save output"), _("Check that you have writing permissions in the selected folder.")); return false; } file.write(MAIN->getConfig()->useUtf8() ? edit->toPlainText().toUtf8() : edit->toPlainText().toLocal8Bit()); edit->document()->setModified(false); edit->setFilename(outname); setTabName(page, QFileInfo(outname).fileName()); QStringList recentItems = ConfigSettings::get>("recenttxtitems")->getValue(); recentItems.removeAll(outname); recentItems.prepend(outname); ConfigSettings::get>("recenttxtitems")->setValue(recentItems.mid(0, sMaxNumRecent)); return true; } bool OutputEditorText::crashSave(const QString& filename) const { QFile file(filename); if(file.open(QIODevice::WriteOnly)) { file.write(MAIN->getConfig()->useUtf8() ? textEdit()->toPlainText().toUtf8() : textEdit()->toPlainText().toLocal8Bit()); return true; } return false; } bool OutputEditorText::clear(bool hide) { if(!m_widget->isVisible()) { return true; } QMap changed; for(int i = 0, n = ui.tabWidget->count(); i < n; ++i) { if (textEdit(i)->document()->isModified()) { changed.insert(i, true); } } if(!changed.isEmpty()) { QListWidget* list = new QListWidget();; for(auto it = changed.begin(), itEnd = changed.end(); it != itEnd; ++it) { QListWidgetItem* item = new QListWidgetItem(tabName(it.key())); item->setCheckState(Qt::Checked); item->setData(Qt::UserRole, it.key()); list->addItem(item); } QDialogButtonBox* bbox = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Discard | QDialogButtonBox::Cancel); QDialog dialog; dialog.setLayout(new QVBoxLayout); dialog.layout()->addWidget(new QLabel(_("The following documents have unsaved changes. Which documents do you want to save before proceeding?"))); dialog.layout()->addWidget(list); dialog.layout()->addWidget(bbox); connect(list, &QListWidget::itemChanged, [&](QListWidgetItem * item) { changed[item->data(Qt::UserRole).toInt()] = item->checkState() == Qt::Checked; }); connect(bbox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); connect(bbox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); int response = QDialogButtonBox::Cancel; connect(bbox, &QDialogButtonBox::clicked, [&](QAbstractButton * button) { response = bbox->standardButton(button); dialog.accept(); }); dialog.exec(); if (response == QDialogButtonBox::Cancel) { return false; } if (response == QDialogButtonBox::Save) { for(auto it = changed.begin(), itEnd = changed.end(); it != itEnd; ++it) { if(it.value() && !save(it.key(), textEdit(it.key())->filename())) { return false; } } } } for(int i = ui.tabWidget->count(); i >= 0; --i) { ui.tabWidget->removeTab(i); } m_tabCounter = 0; addTab(); // Add one empty tab if(hide) { MAIN->setOutputPaneVisible(false); } return true; } void OutputEditorText::onVisibilityChanged(bool /*visible*/) { ui.searchFrame->hideSubstitutionsManager(); } void OutputEditorText::setLanguage(const Config::Lang& lang) { m_spell.setLanguage(lang.code.isEmpty() ? Utils::getSpellingLanguage(lang.prefix) : lang.code); } void OutputEditorText::prepareRecentMenu() { // Build recent menu m_recentMenu->clear(); int count = 0; for(const QString& filename : ConfigSettings::get>("recenttxtitems")->getValue()) { if(QFile(filename).exists()) { QAction* action = new QAction(QFileInfo(filename).fileName(), m_recentMenu); action->setToolTip(filename); connect(action, &QAction::triggered, this, [this, action] { open(action->toolTip()); }); m_recentMenu->addAction(action); if(++count >= sMaxNumRecent) { break; } } } if(m_recentMenu->isEmpty()) { m_recentMenu->addAction(_("No recent files"))->setEnabled(false); } } gImageReader-3.4.0/qt/src/OutputEditorText.hh000066400000000000000000000064411417507262200211150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorText.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITORTEXT_HH #define OUTPUTEDITORTEXT_HH #include #include "Config.hh" #include "MainWindow.hh" #include "OutputEditor.hh" #include "Ui_OutputEditorText.hh" class OutputEditorText : public OutputEditor { Q_OBJECT public: class TextBatchProcessor : public BatchProcessor { public: TextBatchProcessor(bool prependPage) : m_prependPage(prependPage) {} QString fileSuffix() const override { return QString(".txt"); } void appendOutput(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo, bool firstArea) const override; private: bool m_prependPage = false; }; OutputEditorText(); ~OutputEditorText(); QWidget* getUI() override { return m_widget; } ReadSessionData* initRead(tesseract::TessBaseAPI& /*tess*/) override { return new TextReadSessionData; } void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) override; void readError(const QString& errorMsg, ReadSessionData* data) override; BatchProcessor* createBatchProcessor(const QMap& options) const override { return new TextBatchProcessor(options["prependPage"].toBool()); } bool crashSave(const QString& filename) const override; public slots: bool open(const QString& filename = QString()) override; void onVisibilityChanged(bool visible) override; bool clear(bool hide = true) override; bool save(int page = -1, const QString& filename = ""); void setLanguage(const Config::Lang& lang) override; private: struct TextReadSessionData : ReadSessionData { bool insertText = false; }; enum class InsertMode { Append, Cursor, Replace }; static constexpr int sMaxNumRecent = 15; QWidget* m_widget = nullptr; QMenu* m_recentMenu = nullptr; UI_OutputEditorText ui; InsertMode m_insertMode; QtSpell::TextEditChecker m_spell; int m_tabCounter = 0; int addTab(const QString& title = QString()); QString tabName(int page) const; void setTabName(int page, const QString& title); OutputTextEdit* textEdit(int page = -1) const; private slots: void addText(const QString& text, bool insert); void filterBuffer(); void findReplace(const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace); void replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase); void applySubstitutions(const QMap& substitutions, bool matchCase); void setFont(); void setInsertMode(QAction* action); void tabChanged(int); void closeTab(int); void prepareRecentMenu(); }; #endif // OUTPUTEDITORTEXT_HH gImageReader-3.4.0/qt/src/OutputTextEdit.cc000066400000000000000000000242751417507262200205470ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputTextEdit.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "OutputTextEdit.hh" #include #include #include #include #include class OutputTextEdit::WhitespaceHighlighter : public QSyntaxHighlighter { public: WhitespaceHighlighter(QTextDocument* document) : QSyntaxHighlighter(document) {} private: void highlightBlock(const QString& text) { QTextCharFormat fmt; fmt.setForeground(Qt::gray); QRegularExpression expression("\\s"); QRegularExpressionMatch match; int offset = 0; while ((match = expression.match(text, offset)).hasMatch()) { offset = match.capturedEnd(); setFormat(match.capturedStart(), match.capturedLength(), fmt); } } }; OutputTextEdit::OutputTextEdit(QWidget* parent) : QPlainTextEdit(parent) { m_wsHighlighter = new WhitespaceHighlighter(document()); m_regionCursor = textCursor(); m_regionCursor.movePosition(QTextCursor::Start); m_regionCursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); m_entireRegion = true; connect(this, &OutputTextEdit::cursorPositionChanged, this, &OutputTextEdit::saveRegionBounds); connect(this, &OutputTextEdit::selectionChanged, this, &OutputTextEdit::saveRegionBounds); // Force inactive selection to have same color as active selection QColor highlightColor = palette().color(QPalette::Highlight); QColor highlightedTextColor = palette().color(QPalette::HighlightedText); auto colorToString = [&](const QColor & color) { return QString("rgb(%1, %2, %3)").arg(color.red()).arg(color.green()).arg(color.blue()); }; setStyleSheet(QString("QPlainTextEdit { selection-background-color: %1; selection-color: %2; }") .arg(colorToString(highlightColor), colorToString(highlightedTextColor))); } OutputTextEdit::~OutputTextEdit() { delete m_wsHighlighter; } QTextCursor OutputTextEdit::regionBounds() const { QTextCursor c = m_regionCursor; if(c.anchor() > c.position()) { int pos = c.anchor(); int anchor = c.position(); c.setPosition(anchor); c.setPosition(pos, QTextCursor::KeepAnchor); } return c; } bool OutputTextEdit::findReplace(bool backwards, bool replace, bool matchCase, const QString& searchstr, const QString& replacestr) { clearFocus(); if(searchstr.isEmpty()) { return false; } QTextDocument::FindFlags flags; Qt::CaseSensitivity cs = Qt::CaseInsensitive; if(backwards) { flags |= QTextDocument::FindBackward; } if(matchCase) { flags |= QTextDocument::FindCaseSensitively; cs = Qt::CaseSensitive; } QTextCursor regionCursor = regionBounds(); QTextCursor selCursor = textCursor(); if(selCursor.selectedText().compare(searchstr, cs) == 0) { if(replace) { selCursor.insertText(replacestr); selCursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, replacestr.length()); setTextCursor(selCursor); ensureCursorVisible(); return true; } if(backwards) { selCursor.setPosition(std::min(selCursor.position(), selCursor.anchor())); } else { selCursor.setPosition(std::max(selCursor.position(), selCursor.anchor())); } } QTextCursor findcursor = document()->find(searchstr, selCursor, flags); if(findcursor.isNull() || !(findcursor.anchor() >= regionCursor.anchor() && findcursor.position() <= regionCursor.position())) { if(backwards) { selCursor.setPosition(regionCursor.position()); } else { selCursor.setPosition(regionCursor.anchor()); } findcursor = document()->find(searchstr, selCursor, flags); if(findcursor.isNull() || !(findcursor.anchor() >= regionCursor.anchor() && findcursor.position() <= regionCursor.position())) { return false; } } setTextCursor(findcursor); ensureCursorVisible(); return true; } int OutputTextEdit::replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase) { QTextCursor cursor = regionBounds(); int end = cursor.position(); QString cursel = cursor.selectedText(); if(cursor.anchor() == cursor.position() || cursel == searchstr || cursel == replacestr) { cursor.movePosition(QTextCursor::Start); QTextCursor tmp(cursor); tmp.movePosition(QTextCursor::End); end = tmp.position(); } else { cursor.setPosition(std::min(cursor.anchor(), cursor.position())); } QTextDocument::FindFlags flags; if(matchCase) { flags = QTextDocument::FindCaseSensitively; } int diff = replacestr.length() - searchstr.length(); int count = 0; while(true) { cursor = document()->find(searchstr, cursor, flags); if(cursor.isNull() || cursor.position() > end) { break; } cursor.insertText(replacestr); end += diff; ++count; QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } return count; } void OutputTextEdit::setDrawWhitespace(bool drawWhitespace) { m_drawWhitespace = drawWhitespace; QTextOption textOption = document()->defaultTextOption(); if(drawWhitespace) { textOption.setFlags(QTextOption::ShowTabsAndSpaces | QTextOption::AddSpaceForLineAndParagraphSeparators); } else { textOption.setFlags(QTextOption::Flags()); } document()->setDefaultTextOption(textOption); } void OutputTextEdit::paintEvent(QPaintEvent* e) { QPointF offset = contentOffset(); if(!m_entireRegion) { QPainter painter(viewport()); painter.setBrush(palette().color(QPalette::Highlight).lighter(160)); painter.setPen(Qt::NoPen); QTextCursor regionCursor = regionBounds(); QTextCursor regionStart(document()); regionStart.setPosition(regionCursor.anchor()); QTextBlock startBlock = regionStart.block(); int startLinePos = regionStart.position() - startBlock.position(); QTextLine startLine = startBlock.layout()->lineForTextPosition(startLinePos); QTextCursor regionEnd(document()); regionEnd.setPosition(regionCursor.position()); QTextBlock endBlock = regionEnd.block(); int endLinePos = regionEnd.position() - endBlock.position(); QTextLine endLine = endBlock.layout()->lineForTextPosition(endLinePos); // Draw selection qreal top; QRectF rect; if(startBlock.blockNumber() == endBlock.blockNumber() && startLine.lineNumber() == endLine.lineNumber()) { top = blockBoundingGeometry(startBlock).translated(offset).top(); rect = startLine.naturalTextRect().translated(offset.x() - 0.5, top); rect.setLeft(startLine.cursorToX(startLinePos) - 0.5); rect.setRight(endLine.cursorToX(endLinePos)); painter.drawRect(rect); } else { // Draw selection on start line top = blockBoundingGeometry(startBlock).translated(offset).top(); rect = startLine.naturalTextRect().translated(offset.x() - 0.5, top); rect.setLeft(startLine.cursorToX(startLinePos) - 0.5); painter.drawRect(rect); // Draw selections in between QTextBlock block = startBlock; int lineNo = startLine.lineNumber() + 1; while(!(block.blockNumber() == endBlock.blockNumber() && lineNo == endLine.lineNumber())) { if(block.isValid() && lineNo < block.lineCount()) { painter.drawRect(block.layout()->lineAt(lineNo).naturalTextRect().translated(offset.x() - 0.5, top)); } ++lineNo; if(lineNo >= block.lineCount()) { block = block.next(); top = blockBoundingGeometry(block).translated(offset).top(); lineNo = 0; } } // Draw selection on end line top = blockBoundingGeometry(endBlock).translated(offset).top(); rect = endLine.naturalTextRect().translated(offset.x() - 0.5, top); rect.setRight(endLine.cursorToX(endLinePos)); painter.drawRect(rect); } } QPlainTextEdit::paintEvent(e); if(m_drawWhitespace) { QTextBlock block = firstVisibleBlock(); qreal top = blockBoundingGeometry(block).translated(offset).top(); qreal bottom = top + blockBoundingRect(block).height(); QPainter painter(viewport()); painter.setPen(Qt::gray); QChar visualArrow((ushort)0x21b5); QChar paragraph((ushort)0x00b6); // block.next().isValid(): don't draw line break on last block while(block.isValid() && block.next().isValid() && top <= e->rect().bottom()) { if(block.isVisible() && bottom >= e->rect().top()) { QTextLayout* layout = block.layout(); // Draw hard line breaks (i.e. those not due to word wrapping) QTextLine line = layout->lineAt(layout->lineCount() - 1); QRectF lineRect = line.naturalTextRect().translated(offset.x(), top); if(line.textLength() == 0) { painter.drawText(QPointF(lineRect.right(), lineRect.top() + line.ascent()), paragraph); } else { painter.drawText(QPointF(lineRect.right(), lineRect.top() + line.ascent()), visualArrow); } } block = block.next(); top = bottom; bottom = top + blockBoundingRect(block).height(); } } } void OutputTextEdit::saveRegionBounds() { QTextCursor c = textCursor(); if(hasFocus()) { bool dorepaint = m_regionCursor.hasSelection() && !((m_regionCursor.anchor() == c.anchor() && m_regionCursor.position() == c.position()) || (m_regionCursor.anchor() == c.position() && m_regionCursor.position() == c.anchor())); m_regionCursor = c; if(dorepaint) { viewport()->repaint(); } // If only one word is selected, don't treat it as a region if(!m_regionCursor.selectedText().contains(QRegularExpression("\\s"))) { m_regionCursor.clearSelection(); } } c.movePosition(QTextCursor::Start); c.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); // If nothing is selected, set the region to the entire contents if(!m_regionCursor.hasSelection()) { m_regionCursor.setPosition(c.anchor()); m_regionCursor.setPosition(c.position(), QTextCursor::KeepAnchor); } m_entireRegion = (m_regionCursor.anchor() == c.anchor() && m_regionCursor.position() == c.position()); } gImageReader-3.4.0/qt/src/OutputTextEdit.hh000066400000000000000000000033651417507262200205560ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputTextEdit.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTTEXTEDIT_HH #define OUTPUTTEXTEDIT_HH #include class OutputTextEdit : public QPlainTextEdit { Q_OBJECT public: explicit OutputTextEdit(QWidget* parent = 0); ~OutputTextEdit(); QTextCursor regionBounds() const; bool findReplace(bool backwards, bool replace, bool matchCase, const QString& searchstr, const QString& replacestr); int replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase); void setFilename(const QString& filename) { m_filename = filename; } const QString& filename() const { return m_filename; } public slots: void setDrawWhitespace(bool drawWhitespace); protected: void paintEvent(QPaintEvent* e) override; private: class WhitespaceHighlighter; WhitespaceHighlighter* m_wsHighlighter = nullptr; bool m_drawWhitespace = false; QTextCursor m_regionCursor; bool m_entireRegion; QString m_filename; private slots: void saveRegionBounds(); }; #endif // OUTPUTTEXTEDIT_HH gImageReader-3.4.0/qt/src/RecognitionMenu.cc000066400000000000000000000246721417507262200207020ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * RecognitionMenu.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include "ConfigSettings.hh" #include "MainWindow.hh" #include "RecognitionMenu.hh" RecognitionMenu::RecognitionMenu(QWidget* parent) : QMenu(parent) { m_charListDialog = new QDialog(this); m_charListDialogUi.setupUi(m_charListDialog); connect(m_charListDialogUi.radioButtonBlacklist, &QRadioButton::toggled, m_charListDialogUi.lineEditBlacklist, &QLineEdit::setEnabled); connect(m_charListDialogUi.radioButtonWhitelist, &QRadioButton::toggled, m_charListDialogUi.lineEditWhitelist, &QLineEdit::setEnabled); ADD_SETTING(VarSetting("language", "eng:en_EN")); ADD_SETTING(VarSetting("psm", 6)); ADD_SETTING(LineEditSetting("ocrcharwhitelist", m_charListDialogUi.lineEditWhitelist)); ADD_SETTING(LineEditSetting("ocrcharblacklist", m_charListDialogUi.lineEditBlacklist)); ADD_SETTING(SwitchSetting("ocrblacklistenabled", m_charListDialogUi.radioButtonBlacklist, true)); ADD_SETTING(SwitchSetting("ocrwhitelistenabled", m_charListDialogUi.radioButtonWhitelist, false)); installEventFilter(this); } void RecognitionMenu::rebuild() { clear(); delete m_langMenuRadioGroup; m_langMenuRadioGroup = new QActionGroup(this); delete m_langMenuCheckGroup; m_langMenuCheckGroup = new QActionGroup(this); m_langMenuCheckGroup->setExclusive(false); delete m_psmCheckGroup; m_psmCheckGroup = new QActionGroup(this); connect(m_psmCheckGroup, &QActionGroup::triggered, this, &RecognitionMenu::psmSelected); delete m_menuMultilanguage; m_menuMultilanguage = nullptr; m_curLang = Config::Lang(); emit languageChanged(m_curLang); QAction* curitem = nullptr; QAction* activeitem = nullptr; bool haveOsd = false; QStringList parts = ConfigSettings::get>("language")->getValue().split(":"); Config::Lang curlang = {parts.empty() ? "eng" : parts[0], parts.size() < 2 ? "" : parts[1], parts.size() < 3 ? "" : parts[2]}; QList dicts = QtSpell::Checker::getLanguageList(); QStringList availLanguages = Config::getAvailableLanguages(); if(availLanguages.empty()) { QMessageBox::warning(MAIN, _("No languages available"), _("No tesseract languages are available for use. Recognition will not work.")); } // Add menu items for languages, with spelling submenu if available for(const QString& langprefix : availLanguages) { if(langprefix == "osd") { haveOsd = true; continue; } Config::Lang lang = {langprefix, QString(), QString()}; if(!MAIN->getConfig()->searchLangSpec(lang)) { lang.name = lang.prefix; } QList spelldicts; if(!lang.code.isEmpty()) { for(const QString& dict : dicts) { if(dict.left(2) == lang.code.left(2)) { spelldicts.append(dict); } } std::sort(spelldicts.begin(), spelldicts.end()); } if(!spelldicts.empty()) { QAction* item = new QAction(lang.name, this); QMenu* submenu = new QMenu(); for(const QString& dict : spelldicts) { Config::Lang itemlang = {lang.prefix, dict, lang.name}; curitem = new QAction(QtSpell::Checker::decodeLanguageCode(dict), m_langMenuRadioGroup); curitem->setCheckable(true); curitem->setData(QVariant::fromValue(itemlang)); connect(curitem, &QAction::triggered, this, &RecognitionMenu::setLanguage); if(curlang.prefix == lang.prefix && ( curlang.code == dict || (!activeitem && (curlang.code == dict.left(2) || curlang.code.isEmpty())))) { curlang = itemlang; activeitem = curitem; } submenu->addAction(curitem); } item->setMenu(submenu); addAction(item); } else { curitem = new QAction(lang.name, m_langMenuRadioGroup); curitem->setCheckable(true); curitem->setData(QVariant::fromValue(lang)); connect(curitem, &QAction::triggered, this, &RecognitionMenu::setLanguage); if(curlang.prefix == lang.prefix) { curlang = lang; activeitem = curitem; } addAction(curitem); } } // Add multilanguage menu bool isMultilingual = false; if(!availLanguages.isEmpty()) { addSeparator(); m_multilingualAction = new QAction(_("Multilingual"), m_langMenuRadioGroup); m_multilingualAction->setCheckable(true); m_menuMultilanguage = new QMenu(); isMultilingual = curlang.prefix.contains('+'); QStringList sellangs = curlang.prefix.split('+', Qt::SkipEmptyParts); for(const QString& langprefix : availLanguages) { if(langprefix == "osd") { continue; } Config::Lang lang = {langprefix, "", ""}; if(!MAIN->getConfig()->searchLangSpec(lang)) { lang.name = lang.prefix; } int index = sellangs.indexOf(lang.prefix); QAction* item = new QAction(lang.name, m_langMenuCheckGroup); item->setCheckable(true); item->setData(QVariant::fromValue(lang.prefix)); item->setChecked(isMultilingual && index != -1); item->setProperty("last_click", QDateTime::fromSecsSinceEpoch(1 + index)); // Hack to preserve order connect(item, &QAction::triggered, item, [item] { item->setProperty("last_click", QDateTime::currentDateTime()); }); connect(item, &QAction::triggered, this, &RecognitionMenu::setMultiLanguage); m_menuMultilanguage->addAction(item); } m_menuMultilanguage->installEventFilter(this); m_multilingualAction->setMenu(m_menuMultilanguage); addAction(m_multilingualAction); } if(isMultilingual) { activeitem = m_multilingualAction; setMultiLanguage(); } else if(activeitem == nullptr) { activeitem = curitem; } if(activeitem) { activeitem->trigger(); } // Add PSM items addSeparator(); QMenu* psmMenu = new QMenu(); int activePsm = ConfigSettings::get>("psm")->getValue(); struct PsmEntry { QString label; tesseract::PageSegMode psmMode; bool requireOsd; }; QVector psmModes = { PsmEntry{_("Automatic page segmentation"), tesseract::PSM_AUTO, false}, PsmEntry{_("Page segmentation with orientation and script detection"), tesseract::PSM_AUTO_OSD, true}, PsmEntry{_("Assume single column of text"), tesseract::PSM_SINGLE_COLUMN, false}, PsmEntry{_("Assume single block of vertically aligned text"), tesseract::PSM_SINGLE_BLOCK_VERT_TEXT, false}, PsmEntry{_("Assume a single uniform block of text"), tesseract::PSM_SINGLE_BLOCK, false}, PsmEntry{_("Assume a line of text"), tesseract::PSM_SINGLE_LINE, false}, PsmEntry{_("Assume a single word"), tesseract::PSM_SINGLE_WORD, false}, PsmEntry{_("Assume a single word in a circle"), tesseract::PSM_CIRCLE_WORD, false}, PsmEntry{_("Sparse text in no particular order"), tesseract::PSM_SPARSE_TEXT, false}, PsmEntry{_("Sparse text with orientation and script detection"), tesseract::PSM_SPARSE_TEXT_OSD, true} }; for(const auto& entry : psmModes) { QAction* item = psmMenu->addAction(entry.label); item->setData(entry.psmMode); item->setEnabled(!entry.requireOsd || haveOsd); item->setCheckable(true); item->setChecked(activePsm == entry.psmMode); m_psmCheckGroup->addAction(item); } QAction* psmAction = new QAction(_("Page segmentation mode"), this); psmAction->setMenu(psmMenu); addAction(psmAction); addAction(_("Character whitelist / blacklist..."), m_charListDialog, &QDialog::exec); // Add installer item addSeparator(); addAction(_("Manage languages..."), MAIN, &MainWindow::manageLanguages); } tesseract::PageSegMode RecognitionMenu::getPageSegmentationMode() const { return static_cast(m_psmCheckGroup->checkedAction()->data().toInt()); } QString RecognitionMenu::getCharacterWhitelist() const { return m_charListDialogUi.radioButtonWhitelist->isChecked() ? m_charListDialogUi.lineEditWhitelist->text() : QString(); } QString RecognitionMenu::getCharacterBlacklist() const { return m_charListDialogUi.radioButtonBlacklist->isChecked() ? m_charListDialogUi.lineEditBlacklist->text() : QString(); } void RecognitionMenu::psmSelected(QAction* action) { ConfigSettings::get>("psm")->setValue(action->data().toInt()); } void RecognitionMenu::setLanguage() { QAction* item = qobject_cast(QObject::sender()); if(item->isChecked()) { m_curLang = item->data().value(); ConfigSettings::get>("language")->setValue(m_curLang.prefix + ":" + m_curLang.code); emit languageChanged(m_curLang); } } void RecognitionMenu::setMultiLanguage() { m_multilingualAction->setChecked(true); QList> langs; for(QAction* action : m_langMenuCheckGroup->actions()) { if(action->isChecked()) { langs.append(qMakePair(action->data().toString(), action->property("last_click").toDateTime())); } } std::sort(langs.begin(), langs.end(), [](auto a, auto b) { return a.second < b.second; }); QString lang; if(langs.isEmpty()) { lang = "eng+"; } else { for(const auto& pair : langs) { lang += pair.first + "+"; } } lang = lang.left(lang.length() - 1); m_curLang = {lang, "", "Multilingual"}; ConfigSettings::get>("language")->setValue(lang + ":"); emit languageChanged(m_curLang); } bool RecognitionMenu::eventFilter(QObject* obj, QEvent* ev) { if(obj == this && ev->type() == QEvent::MouseButtonPress) { QMouseEvent* mouseEvent = static_cast(ev); QAction* actionAtPos = actionAt(mouseEvent->pos()); if(actionAtPos && actionAtPos == m_multilingualAction) { m_multilingualAction->toggle(); if(m_multilingualAction->isChecked()) { setMultiLanguage(); } return true; } } else if(obj == m_menuMultilanguage && (ev->type() == QEvent::MouseButtonPress || ev->type() == QEvent::MouseButtonRelease)) { QMouseEvent* mouseEvent = static_cast(ev); QAction* action = m_menuMultilanguage->actionAt(mouseEvent->pos()); if(action) { if(ev->type() == QEvent::MouseButtonRelease) { action->trigger(); } return true; } } return QObject::eventFilter(obj, ev); } gImageReader-3.4.0/qt/src/RecognitionMenu.hh000066400000000000000000000036421417507262200207060ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * RecognitionMenu.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef RECOGNITIONMENU_HH #define RECOGNITIONMENU_HH #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "Config.hh" #include "ui_CharacterListDialog.h" class QActionGroup; class RecognitionMenu : public QMenu { Q_OBJECT public: RecognitionMenu(QWidget* parent = nullptr); void rebuild(); const Config::Lang& getRecognitionLanguage() const { return m_curLang; } tesseract::PageSegMode getPageSegmentationMode() const; QString getCharacterWhitelist() const; QString getCharacterBlacklist() const; signals: void languageChanged(Config::Lang lang); private slots: void psmSelected(QAction* action); void setLanguage(); void setMultiLanguage(); private: Config::Lang m_curLang; QMenu* m_menuMultilanguage = nullptr; QActionGroup* m_langMenuRadioGroup = nullptr; QActionGroup* m_langMenuCheckGroup = nullptr; QActionGroup* m_psmCheckGroup = nullptr; QAction* m_multilingualAction = nullptr; QDialog* m_charListDialog = nullptr; Ui::CharacterListDialog m_charListDialogUi; bool eventFilter(QObject* obj, QEvent* ev) override; }; #endif // RECOGNITIONMENU_HH gImageReader-3.4.0/qt/src/Recognizer.cc000066400000000000000000000414051417507262200176750ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Recognizer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #define USE_STD_NAMESPACE #include #include #undef USE_STD_NAMESPACE #include #ifdef Q_OS_WIN #include #define pipe(fds) _pipe(fds, 5000, _O_BINARY) #endif #include "ConfigSettings.hh" #include "Displayer.hh" #include "MainWindow.hh" #include "OutputEditor.hh" #include "RecognitionMenu.hh" #include "Recognizer.hh" #include "Utils.hh" class Recognizer::ProgressMonitor : public MainWindow::ProgressMonitor { public: #if TESSERACT_MAJOR_VERSION < 5 ETEXT_DESC desc; #else tesseract::ETEXT_DESC desc; #endif ProgressMonitor(int nPages) : MainWindow::ProgressMonitor(nPages) { desc.progress = 0; desc.cancel = cancelCallback; desc.cancel_this = this; } int getProgress() const override { QMutexLocker locker(&mMutex); return 100.0 * ((mProgress + desc.progress / 100.0) / mTotal); } static bool cancelCallback(void* instance, int /*words*/) { ProgressMonitor* monitor = reinterpret_cast(instance); QMutexLocker locker(&monitor->mMutex); return monitor->mCancelled; } }; Recognizer::Recognizer(const UI_MainWindow& _ui) : ui(_ui) { QAction* currentPageAction = new QAction(_("Current Page"), this); currentPageAction->setData(static_cast(PageSelection::Current)); QAction* multiplePagesAction = new QAction(_("Multiple Pages..."), this); multiplePagesAction->setData(static_cast(PageSelection::Multiple)); m_actionBatchMode = new QAction(_("Batch mode..."), this); m_actionBatchMode->setData(static_cast(PageSelection::Batch)); m_menuPages = new QMenu(ui.toolButtonRecognize); m_menuPages->addAction(currentPageAction); m_menuPages->addAction(multiplePagesAction); m_menuPages->addAction(m_actionBatchMode); m_pagesDialog = new QDialog(MAIN); m_pagesDialogUi.setupUi(m_pagesDialog); m_batchDialog = new QDialog(MAIN); m_batchDialogUi.setupUi(m_batchDialog); m_batchDialogUi.comboBoxExisting->addItem(_("Overwrite existing output"), BatchOverwriteOutput); m_batchDialogUi.comboBoxExisting->addItem(_("Skip processing source"), BatchSkipSource); ui.toolButtonLanguages->setMenu(MAIN->getRecognitionMenu()); connect(ui.toolButtonRecognize, &QToolButton::clicked, this, &Recognizer::recognizeButtonClicked); connect(currentPageAction, &QAction::triggered, this, &Recognizer::recognizeCurrentPage); connect(multiplePagesAction, &QAction::triggered, this, &Recognizer::recognizeMultiplePages); connect(m_actionBatchMode, &QAction::triggered, this, &Recognizer::recognizeBatch); connect(m_pagesDialogUi.lineEditPageRange, &QLineEdit::textChanged, this, &Recognizer::clearLineEditPageRangeStyle); connect(MAIN->getRecognitionMenu(), &RecognitionMenu::languageChanged, this, &Recognizer::recognitionLanguageChanged); ADD_SETTING(ComboSetting("ocrregionstrategy", m_pagesDialogUi.comboBoxRecognitionArea, 0)); ADD_SETTING(SwitchSetting("ocraddsourcefilename", m_pagesDialogUi.checkBoxPrependFilename)); ADD_SETTING(SwitchSetting("ocraddsourcepage", m_pagesDialogUi.checkBoxPrependPage)); } void Recognizer::setRecognizeMode(const QString& mode) { m_modeLabel = mode; ui.toolButtonRecognize->setText(QString("%1\n%2").arg(m_modeLabel).arg(m_langLabel)); } void Recognizer::recognitionLanguageChanged(const Config::Lang& lang) { if(!lang.code.isEmpty()) { m_langLabel = QString("%1 (%2)").arg(lang.name, lang.code); } else if(lang.name == "Multilingual") { m_langLabel = QString("%1").arg(lang.prefix); } else { m_langLabel = QString("%1").arg(lang.name); } ui.toolButtonRecognize->setText(QString("%1\n%2").arg(m_modeLabel).arg(m_langLabel)); } void Recognizer::clearLineEditPageRangeStyle() { qobject_cast(QObject::sender())->setStyleSheet(""); } QList Recognizer::selectPages(bool& autodetectLayout) { int nPages = MAIN->getDisplayer()->getNPages(); m_pagesDialogUi.lineEditPageRange->setText(QString("1-%1").arg(nPages)); m_pagesDialogUi.lineEditPageRange->setFocus(); m_pagesDialogUi.labelRecognitionArea->setVisible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); m_pagesDialogUi.comboBoxRecognitionArea->setVisible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); m_pagesDialogUi.groupBoxPrepend->setVisible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); m_pagesDialogUi.comboBoxRecognitionArea->setItemText(0, MAIN->getDisplayer()->hasMultipleOCRAreas() ? _("Current selection") : _("Entire page")); QRegularExpression validateRegEx("^[\\d,\\-\\s]+$"); QRegularExpressionMatch match; QList pages; while(m_pagesDialog->exec() == QDialog::Accepted) { pages.clear(); QString text = m_pagesDialogUi.lineEditPageRange->text(); if((match = validateRegEx.match(text)).hasMatch()) { text.replace(QRegularExpression("\\s+"), ""); for(const QString& block : text.split(',', Qt::SkipEmptyParts)) { QStringList ranges = block.split('-', Qt::SkipEmptyParts); if(ranges.size() == 1) { int page = ranges[0].toInt(); if(page > 0 && page <= nPages) { pages.append(page); } } else if(ranges.size() == 2) { int start = std::max(1, ranges[0].toInt()); int end = std::min(nPages, ranges[1].toInt()); for(int page = start; page <= end; ++page) { pages.append(page); } } else { pages.clear(); break; } } } if(pages.empty()) { m_pagesDialogUi.lineEditPageRange->setStyleSheet("background: #FF7777; color: #FFFFFF;"); } else { break; } } std::sort(pages.begin(), pages.end()); autodetectLayout = m_pagesDialogUi.comboBoxRecognitionArea->isVisible() ? m_pagesDialogUi.comboBoxRecognitionArea->currentIndex() == 1 : false; return pages; } void Recognizer::recognizeButtonClicked() { int nPages = MAIN->getDisplayer()->getNPages(); if(nPages == 1) { recognize({MAIN->getDisplayer()->getCurrentPage()}); } else { m_actionBatchMode->setVisible(MAIN->getDisplayer()->getNSources() > 1); ui.toolButtonRecognize->setCheckable(true); ui.toolButtonRecognize->setChecked(true); m_menuPages->popup(ui.toolButtonRecognize->mapToGlobal(QPoint(0, ui.toolButtonRecognize->height()))); ui.toolButtonRecognize->setChecked(false); ui.toolButtonRecognize->setCheckable(false); } } void Recognizer::recognizeCurrentPage() { recognize({MAIN->getDisplayer()->getCurrentPage()}); } void Recognizer::recognizeMultiplePages() { bool autodetectLayout = false; QList pages = selectPages(autodetectLayout); recognize(pages, autodetectLayout); } std::unique_ptr Recognizer::setupTesseract() { Config::Lang lang = MAIN->getRecognitionMenu()->getRecognitionLanguage(); auto tess = std::unique_ptr(new Utils::TesseractHandle(lang.prefix.toLocal8Bit().constData())); if(tess->get()) { tess->get()->SetPageSegMode(MAIN->getRecognitionMenu()->getPageSegmentationMode()); tess->get()->SetVariable("tessedit_char_whitelist", MAIN->getRecognitionMenu()->getCharacterWhitelist().toLocal8Bit()); tess->get()->SetVariable("tessedit_char_blacklist", MAIN->getRecognitionMenu()->getCharacterBlacklist().toLocal8Bit()); #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(5, 0, 0) tess->get()->SetVariable("thresholding_method", "1"); #endif } else { QMessageBox::critical(MAIN, _("Recognition errors occurred"), _("Failed to initialize tesseract")); } return tess; } void Recognizer::recognize(const QList& pages, bool autodetectLayout) { bool prependFile = pages.size() > 1 && ConfigSettings::get("ocraddsourcefilename")->getValue(); bool prependPage = pages.size() > 1 && ConfigSettings::get("ocraddsourcepage")->getValue(); auto tess = setupTesseract(); if(!tess->get()) { return; } bool contains = false; for(int page : pages) { QString source; int sourcePage; if(MAIN->getDisplayer()->resolvePage(page, source, sourcePage)) { if(MAIN->getOutputEditor()->containsSource(source, sourcePage)) { contains = true; break; } } } if(contains) { if(QMessageBox::No == QMessageBox::question(MAIN, _("Source already recognized"), _("One or more selected sources were already recognized. Proceed anyway?"))) { return; } } QStringList errors; OutputEditor::ReadSessionData* readSessionData = MAIN->getOutputEditor()->initRead(*tess->get()); ProgressMonitor monitor(pages.size()); MAIN->showProgress(&monitor); MAIN->getDisplayer()->setBlockAutoscale(true); Utils::busyTask([&] { int npages = pages.size(); int idx = 0; QString prevFile; for(int page : pages) { monitor.desc.progress = 0; ++idx; QMetaObject::invokeMethod(MAIN, "pushState", Qt::QueuedConnection, Q_ARG(MainWindow::State, MainWindow::State::Busy), Q_ARG(QString, _("Recognizing page %1 (%2 of %3)").arg(page).arg(idx).arg(npages))); PageData pageData; pageData.success = false; QMetaObject::invokeMethod(this, "setPage", Qt::BlockingQueuedConnection, Q_RETURN_ARG(PageData, pageData), Q_ARG(int, page), Q_ARG(bool, autodetectLayout)); if(!pageData.success) { errors.append(_("- Page %1: failed to render page").arg(page)); MAIN->getOutputEditor()->readError(_("\n[Failed to recognize page %1]\n"), readSessionData); continue; } readSessionData->pageInfo = pageData.pageInfo; bool firstChunk = true; bool newFile = readSessionData->pageInfo.filename != prevFile; prevFile = readSessionData->pageInfo.filename; for(const QImage& image : pageData.ocrAreas) { readSessionData->prependPage = prependPage && firstChunk; readSessionData->prependFile = prependFile && (readSessionData->prependPage || newFile); firstChunk = false; newFile = false; tess->get()->SetImage(image.bits(), image.width(), image.height(), 4, image.bytesPerLine()); tess->get()->SetSourceResolution(MAIN->getDisplayer()->getCurrentResolution()); tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { MAIN->getOutputEditor()->read(*tess->get(), readSessionData); } } QMetaObject::invokeMethod(MAIN, "popState", Qt::QueuedConnection); monitor.increaseProgress(); if(monitor.cancelled()) { break; } } return true; }, _("Recognizing...")); MAIN->getDisplayer()->setBlockAutoscale(false); MAIN->hideProgress(); MAIN->getOutputEditor()->finalizeRead(readSessionData); if(!errors.isEmpty()) { showRecognitionErrorsDialog(errors); } } void Recognizer::recognizeImage(const QImage& image, OutputDestination dest) { auto tess = setupTesseract(); if(!tess->get()) { return; } tess->get()->SetImage(image.bits(), image.width(), image.height(), 4, image.bytesPerLine()); ProgressMonitor monitor(1); MAIN->showProgress(&monitor); if(dest == OutputDestination::Buffer) { OutputEditor::ReadSessionData* readSessionData = MAIN->getOutputEditor()->initRead(*tess->get()); readSessionData->pageInfo.filename = MAIN->getDisplayer()->getCurrentImage(readSessionData->pageInfo.page); readSessionData->pageInfo.angle = MAIN->getDisplayer()->getCurrentAngle(); readSessionData->pageInfo.resolution = MAIN->getDisplayer()->getCurrentResolution(); Utils::busyTask([&] { tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { MAIN->getOutputEditor()->read(*tess->get(), readSessionData); } return true; }, _("Recognizing...")); MAIN->getOutputEditor()->finalizeRead(readSessionData); } else if(dest == OutputDestination::Clipboard) { QString output; if(Utils::busyTask([&] { tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { char* text = tess->get()->GetUTF8Text(); output = QString::fromUtf8(text); delete[] text; return true; } return false; }, _("Recognizing..."))) { QApplication::clipboard()->setText(output); } } MAIN->hideProgress(); } void Recognizer::recognizeBatch() { m_batchDialogUi.checkBoxPrependPage->setVisible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); m_batchDialogUi.checkBoxAutolayout->setVisible(MAIN->getDisplayer()->allowAutodetectOCRAreas()); if(m_batchDialog->exec() != QDialog::Accepted) { return; } BatchExistingBehaviour existingBehaviour = static_cast(m_batchDialogUi.comboBoxExisting->currentData().toInt()); bool prependPage = MAIN->getDisplayer()->allowAutodetectOCRAreas() && m_batchDialogUi.checkBoxPrependPage->isChecked(); bool autolayout = MAIN->getDisplayer()->allowAutodetectOCRAreas() && m_batchDialogUi.checkBoxAutolayout->isChecked(); int nPages = MAIN->getDisplayer()->getNPages(); auto tess = setupTesseract(); if(!tess->get()) { return; } QMap batchOptions; batchOptions["prependPage"] = prependPage; OutputEditor::BatchProcessor* batchProcessor = MAIN->getOutputEditor()->createBatchProcessor(batchOptions); QStringList errors; ProgressMonitor monitor(nPages); MAIN->showProgress(&monitor); MAIN->getDisplayer()->setBlockAutoscale(true); Utils::busyTask([&] { int idx = 0; QString currFilename; QFile outputFile; for(int page = 1; page <= nPages; ++page) { monitor.desc.progress = 0; ++idx; QMetaObject::invokeMethod(MAIN, "pushState", Qt::QueuedConnection, Q_ARG(MainWindow::State, MainWindow::State::Busy), Q_ARG(QString, _("Recognizing page %1 (%2 of %3)").arg(page).arg(idx).arg(nPages))); PageData pageData; pageData.success = false; QMetaObject::invokeMethod(this, "setPage", Qt::BlockingQueuedConnection, Q_RETURN_ARG(PageData, pageData), Q_ARG(int, page), Q_ARG(bool, autolayout)); if(!pageData.success) { errors.append(_("- %1:%2: failed to render page").arg(QFileInfo(pageData.pageInfo.filename).fileName()).arg(page)); continue; } if(pageData.pageInfo.filename != currFilename) { if(outputFile.isOpen()) { batchProcessor->writeFooter(&outputFile); outputFile.close(); } currFilename = pageData.pageInfo.filename; QFileInfo finfo(pageData.pageInfo.filename); QString fileName = QDir(finfo.absolutePath()).absoluteFilePath(finfo.baseName() + batchProcessor->fileSuffix()); bool exists = QFileInfo(fileName).exists(); if(exists && existingBehaviour == BatchSkipSource) { errors.append(_("- %1: output already exists, skipping").arg(finfo.fileName())); } else { outputFile.setFileName(fileName); if(!outputFile.open(QIODevice::WriteOnly)) { errors.append(_("- %1: failed to create output file").arg(finfo.fileName()).arg(page)); } else { batchProcessor->writeHeader(&outputFile, tess->get(), pageData.pageInfo); } } } if(outputFile.isOpen()) { bool firstChunk = true; for(const QImage& image : pageData.ocrAreas) { tess->get()->SetImage(image.bits(), image.width(), image.height(), 4, image.bytesPerLine()); tess->get()->SetSourceResolution(MAIN->getDisplayer()->getCurrentResolution()); tess->get()->Recognize(&monitor.desc); if(!monitor.cancelled()) { batchProcessor->appendOutput(&outputFile, tess->get(), pageData.pageInfo, firstChunk); } firstChunk = false; } } QMetaObject::invokeMethod(MAIN, "popState", Qt::QueuedConnection); monitor.increaseProgress(); if(monitor.cancelled()) { break; } } if(outputFile.isOpen()) { batchProcessor->writeFooter(&outputFile); outputFile.close(); } return true; }, _("Recognizing...")); MAIN->getDisplayer()->setBlockAutoscale(false); MAIN->hideProgress(); if(!errors.isEmpty()) { showRecognitionErrorsDialog(errors); } delete batchProcessor; } Recognizer::PageData Recognizer::setPage(int page, bool autodetectLayout) { PageData pageData; pageData.success = MAIN->getDisplayer()->setup(&page); if(pageData.success) { if(autodetectLayout) { MAIN->getDisplayer()->autodetectOCRAreas(); } pageData.pageInfo.filename = MAIN->getDisplayer()->getCurrentImage(pageData.pageInfo.page); pageData.pageInfo.angle = MAIN->getDisplayer()->getCurrentAngle(); pageData.pageInfo.resolution = MAIN->getDisplayer()->getCurrentResolution(); pageData.ocrAreas = MAIN->getDisplayer()->getOCRAreas(); } return pageData; } void Recognizer::showRecognitionErrorsDialog(const QStringList& errors) { Utils::messageBox(MAIN, _("Recognition errors occurred"), _("The following errors occurred:"), errors.join("\n"), QMessageBox::Warning, QDialogButtonBox::Close); } gImageReader-3.4.0/qt/src/Recognizer.hh000066400000000000000000000047251417507262200177130ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Recognizer.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef RECOGNIZER_HPP #define RECOGNIZER_HPP #include #include #include "Config.hh" #include "OutputEditor.hh" #include "ui_PageRangeDialog.h" #include "ui_BatchModeDialog.h" class QActionGroup; class UI_MainWindow; namespace Utils { class TesseractHandle; } class Recognizer : public QObject { Q_OBJECT public: enum class OutputDestination { Buffer, Clipboard }; Recognizer(const UI_MainWindow& _ui); public slots: void recognizeImage(const QImage& image, OutputDestination dest); void setRecognizeMode(const QString& mode); private: class ProgressMonitor; enum class PageSelection { Prompt, Current, Multiple, Batch }; enum class PageArea { EntirePage, Autodetect }; struct PageData { bool success; QList ocrAreas; OutputEditor::PageInfo pageInfo; }; enum BatchExistingBehaviour { BatchOverwriteOutput, BatchSkipSource }; const UI_MainWindow& ui; QMenu* m_menuPages = nullptr; QAction* m_actionBatchMode = nullptr; QDialog* m_pagesDialog; Ui::PageRangeDialog m_pagesDialogUi; QDialog* m_batchDialog; Ui::BatchModeDialog m_batchDialogUi; QString m_modeLabel; QString m_langLabel; QList selectPages(bool& autodetectLayout); std::unique_ptr setupTesseract(); void recognize(const QList& pages, bool autodetectLayout = false); void showRecognitionErrorsDialog(const QStringList& errors); private slots: void recognitionLanguageChanged(const Config::Lang& lang); void clearLineEditPageRangeStyle(); void recognizeButtonClicked(); void recognizeCurrentPage(); void recognizeMultiplePages(); void recognizeBatch(); PageData setPage(int page, bool autodetectLayout); }; #endif // RECOGNIZER_HPP gImageReader-3.4.0/qt/src/Scanner.cc000066400000000000000000000015721417507262200171600ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Scanner.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Scanner.hh" // Empty file to have automoc run moc on Scanner.hh...gImageReader-3.4.0/qt/src/Scanner.hh000066400000000000000000000034751417507262200171760ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Scanner.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_HH #define SCANNER_HH #include "common.hh" #include #include class Scanner : public QObject { Q_OBJECT public: enum class State { IDLE = 0, OPEN, SET_OPTIONS, START, GET_PARAMETERS, READ }; enum class ScanMode { DEFAULT = 0, COLOR, GRAY, LINEART }; enum class ScanType { SINGLE = 0, ADF_FRONT, ADF_BACK, ADF_BOTH }; struct Device { QString name; QString label; }; struct Params { QString device; QString filename; double dpi; ScanMode scan_mode; int depth; ScanType type; int page_width; int page_height; }; virtual ~Scanner() {} virtual void init() = 0; virtual void redetect() = 0; virtual void scan(const Params& params) = 0; virtual void cancel() = 0; virtual void close() = 0; signals: void initFailed(); void devicesDetected(QList devices); void scanFailed(const QString& message); void scanStateChanged(Scanner::State state); void pageAvailable(const QString& filename); }; Q_DECLARE_METATYPE(Scanner::State) #endif // SCANNER_HH gImageReader-3.4.0/qt/src/SearchReplaceFrame.cc000066400000000000000000000052021417507262200212350ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SearchReplaceFrame.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "SearchReplaceFrame.hh" #include "SubstitutionsManager.hh" SearchReplaceFrame::SearchReplaceFrame(QWidget* parent, Qt::WindowFlags f) : QFrame(parent, f) { ui.setupUi(this); m_substitutionsManager = new SubstitutionsManager(this); connect(ui.checkBoxMatchCase, &QCheckBox::toggled, this, &SearchReplaceFrame::clearErrorState); connect(ui.lineEditSearch, &QLineEdit::textChanged, this, &SearchReplaceFrame::clearErrorState); connect(ui.lineEditSearch, &QLineEdit::returnPressed, this, &SearchReplaceFrame::findNext); connect(ui.lineEditReplace, &QLineEdit::returnPressed, this, &SearchReplaceFrame::replaceNext); connect(ui.toolButtonFindNext, &QToolButton::clicked, this, &SearchReplaceFrame::findNext); connect(ui.toolButtonFindPrev, &QToolButton::clicked, this, &SearchReplaceFrame::findPrev); connect(ui.toolButtonReplace, &QToolButton::clicked, this, &SearchReplaceFrame::replaceNext); connect(ui.toolButtonReplaceAll, &QToolButton::clicked, this, &SearchReplaceFrame::emitReplaceAll); connect(ui.pushButtonSubstitutions, &QPushButton::clicked, m_substitutionsManager, &SubstitutionsManager::show); connect(ui.pushButtonSubstitutions, &QPushButton::clicked, m_substitutionsManager, &SubstitutionsManager::raise); connect(m_substitutionsManager, &SubstitutionsManager::applySubstitutions, this, &SearchReplaceFrame::emitApplySubstitutions); ADD_SETTING(SwitchSetting("searchmatchcase", ui.checkBoxMatchCase)); } void SearchReplaceFrame::clear() { ui.lineEditSearch->clear(); ui.lineEditReplace->clear(); } void SearchReplaceFrame::clearErrorState() { ui.lineEditSearch->setStyleSheet(""); } void SearchReplaceFrame::setErrorState() { ui.lineEditSearch->setStyleSheet("background: #FF7777; color: #FFFFFF;"); } void SearchReplaceFrame::hideSubstitutionsManager() { m_substitutionsManager->hide(); } gImageReader-3.4.0/qt/src/SearchReplaceFrame.hh000066400000000000000000000047071417507262200212600ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SearchReplaceFrame.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SEARCHREPLACEFRAME_HH #define SEARCHREPLACEFRAME_HH #include "common.hh" #include "ui_SearchReplaceFrame.h" #include class SubstitutionsManager; class SearchReplaceFrame : public QFrame { Q_OBJECT public: explicit SearchReplaceFrame(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); QToolButton* buttonReplaceAll() const { return ui.toolButtonReplaceAll; } public slots: void clear(); void clearErrorState(); void setErrorState(); void hideSubstitutionsManager(); signals: void findReplace(const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace); void replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase); void applySubstitutions(const QMap& substitutions, bool matchCase); private: Ui::SearchReplaceFrame ui; SubstitutionsManager* m_substitutionsManager; private slots: void findNext() { emit findReplace(ui.lineEditSearch->text(), ui.lineEditReplace->text(), ui.checkBoxMatchCase->isChecked(), false, false); } void findPrev() { emit findReplace(ui.lineEditSearch->text(), ui.lineEditReplace->text(), ui.checkBoxMatchCase->isChecked(), true, false); } void replaceNext() { emit findReplace(ui.lineEditSearch->text(), ui.lineEditReplace->text(), ui.checkBoxMatchCase->isChecked(), false, true); } void emitReplaceAll() { emit replaceAll(ui.lineEditSearch->text(), ui.lineEditReplace->text(), ui.checkBoxMatchCase->isChecked()); } void emitApplySubstitutions(const QMap& substitutions) { emit applySubstitutions(substitutions, ui.checkBoxMatchCase->isChecked()); } }; #endif // SEARCHREPLACEFRAME_HH gImageReader-3.4.0/qt/src/SourceManager.cc000066400000000000000000000467631417507262200203350ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SourceManager.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include #else #pragma GCC push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #pragma GCC pop #endif #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "FileTreeModel.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "Utils.hh" Source::~Source() { if(isTemp) { QFile(path).remove(); } } SourceManager::SourceManager(const UI_MainWindow& _ui) : ui(_ui) { m_recentMenu = new QMenu(MAIN); ui.toolButtonSourceAdd->setMenu(m_recentMenu); m_fileTreeModel = new FileTreeModel(this); ui.treeViewSources->setModel(m_fileTreeModel); ui.treeViewSources->setAcceptDrops(true); ui.treeViewSources->installEventFilter(this); ui.treeViewSources->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui.treeViewSources->header()->setSectionResizeMode(1, QHeaderView::Fixed); ui.treeViewSources->header()->resizeSection(1, 16); ui.actionSourcePaste->setEnabled(!QApplication::clipboard()->pixmap().isNull()); connect(ui.actionSources, &QAction::toggled, ui.dockWidgetSources, &QDockWidget::setVisible); connect(ui.toolButtonSourceAdd, &QToolButton::clicked, this, &SourceManager::openSources); connect(m_recentMenu, &QMenu::aboutToShow, this, &SourceManager::prepareRecentMenu); connect(ui.actionSourceFolder, &QAction::triggered, this, &SourceManager::addFolder); connect(ui.actionSourcePaste, &QAction::triggered, this, &SourceManager::pasteClipboard); connect(ui.actionSourceScreenshot, &QAction::triggered, this, &SourceManager::takeScreenshot); connect(ui.actionSourceRemove, &QAction::triggered, this, &SourceManager::removeSource); connect(ui.actionSourceDelete, &QAction::triggered, this, &SourceManager::deleteSource); connect(ui.actionSourceClear, &QAction::triggered, this, &SourceManager::clearSources); connect(ui.treeViewSources->selectionModel(), &QItemSelectionModel::selectionChanged, this, [this](const QItemSelection&, const QItemSelection&) { currentSourceChanged(); }); connect(ui.treeViewSources, &QTreeView::clicked, this, &SourceManager::indexClicked); connect(&m_fsWatcher, &QFileSystemWatcher::fileChanged, this, &SourceManager::fileChanged); connect(&m_fsWatcher, &QFileSystemWatcher::directoryChanged, this, &SourceManager::directoryChanged); connect(QApplication::clipboard(), &QClipboard::dataChanged, this, [this] { ui.actionSourcePaste->setEnabled(!QApplication::clipboard()->pixmap().isNull()); }); connect(m_fileTreeModel, &FileTreeModel::rowsInserted, [this] { ui.actionSourceClear->setEnabled(m_fileTreeModel->rowCount() > 0); }); connect(m_fileTreeModel, &FileTreeModel::rowsRemoved, [this] { ui.actionSourceClear->setEnabled(m_fileTreeModel->rowCount() > 0); }); ADD_SETTING(VarSetting("recentitems")); } SourceManager::~SourceManager() { clearSources(); } int SourceManager::addSources(const QStringList& files, bool suppressWarnings) { QStringList failed; QItemSelection sel; QModelIndex index; QStringList recentItems = ConfigSettings::get>("recentitems")->getValue(); PdfWithTextAction textAction = suppressWarnings ? PdfWithTextAction::Add : PdfWithTextAction::Ask; ui.treeViewSources->selectionModel()->blockSignals(true); ui.treeViewSources->setUpdatesEnabled(false); for(const QString& filename : files) { if(!QFile(filename).exists()) { failed.append(filename); continue; } index = m_fileTreeModel->findFile(filename); if(index.isValid()) { sel.select(index, index); continue; } QFileInfo finfo(filename); Source* source = new Source(filename, finfo.fileName()); if(source->path.endsWith(".pdf", Qt::CaseInsensitive) && !checkPdfSource(source, textAction, failed)) { delete source; continue; } index = m_fileTreeModel->insertFile(filename, source); QString base = finfo.absoluteDir().absoluteFilePath(finfo.baseName()); m_watchedDirectories[finfo.absolutePath()] += 1; if(m_watchedDirectories[finfo.absolutePath()] == 1) { m_fsWatcher.addPath(finfo.absolutePath()); } if(QFile(base + ".txt").exists() || QFile(base + ".html").exists()) { m_fileTreeModel->setFileEditable(index, true); } sel.select(index, index); m_fsWatcher.addPath(filename); recentItems.removeAll(filename); recentItems.prepend(filename); } ConfigSettings::get>("recentitems")->setValue(recentItems.mid(0, sMaxNumRecent)); ui.treeViewSources->selectionModel()->blockSignals(true); ui.treeViewSources->setUpdatesEnabled(false); if(!sel.isEmpty()) { ui.treeViewSources->selectionModel()->select(sel, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Select | QItemSelectionModel::Rows); QModelIndex parent = sel.indexes().front().parent(); while(parent.isValid()) { ui.treeViewSources->expand(parent); parent = parent.parent(); } ui.treeViewSources->setCurrentIndex(sel.indexes().front()); } ui.treeViewSources->selectionModel()->blockSignals(false); ui.treeViewSources->setUpdatesEnabled(true); currentSourceChanged(); if(!failed.isEmpty() && !suppressWarnings) { QMessageBox::critical(MAIN, _("Unable to open files"), _("The following files could not be opened:\n%1").arg(failed.join("\n"))); } return !sel.isEmpty(); } bool SourceManager::checkPdfSource(Source* source, PdfWithTextAction& textAction, QStringList& failed) const { std::unique_ptr document(Poppler::Document::load(source->path)); if(!document) { failed.append(source->path); return false; } // Unlock if necessary if(document->isLocked()) { bool ok = false; QString message = QString(_("Enter password for file '%1':")).arg(QFileInfo(source->path).fileName()); QString text; while(true) { text = QInputDialog::getText(MAIN, _("Protected PDF"), message, QLineEdit::Password, text, &ok); if(!ok) { failed.append(source->path); return false; } if(!document->unlock(text.toLocal8Bit(), text.toLocal8Bit())) { source->password = text.toLocal8Bit(); break; } } } // Check whether the PDF already contains text if(textAction != PdfWithTextAction::Add) { bool haveText = false; for (int i = 0, n = document->numPages(); i < n; ++i) { if(!document->page(i)->text(QRectF()).isEmpty()) { haveText = true; break; } } if(haveText && textAction == PdfWithTextAction::Skip) { return false; } int response = QMessageBox::question(MAIN->getInstance(), _("PDF with text"), _("The PDF file already contains text:\n%1\nOpen it regardless?").arg(source->path), QMessageBox::Yes | QMessageBox::YesAll | QMessageBox::No | QMessageBox::NoAll); if(response == QMessageBox::No) { return false; } else if(response == QMessageBox::NoAll) { textAction = PdfWithTextAction::Skip; return false; } else if(response == QMessageBox::YesAll) { textAction = PdfWithTextAction::Add; } } // Extract document metadata source->author = document->author(); source->creator = document->creator(); source->keywords = document->keywords(); source->producer = document->producer(); source->title = document->title(); source->subject = document->subject(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) Poppler::Document::PdfVersion pdfVersion = document->getPdfVersion(); source->pdfVersionMajor = pdfVersion.major; source->pdfVersionMinor = pdfVersion.minor; #else document->getPdfVersion(&source->pdfVersionMajor, &source->pdfVersionMinor); #endif return true; } QList SourceManager::getSelectedSources() const { QList selectedSources; for(QModelIndex index : ui.treeViewSources->selectionModel()->selectedRows()) { Source* source = m_fileTreeModel->fileData(index); if(source) { selectedSources.append(source); } } return selectedSources; } void SourceManager::prepareRecentMenu() { // Build recent menu m_recentMenu->clear(); int count = 0; for(const QString& filename : ConfigSettings::get>("recentitems")->getValue()) { if(QFile(filename).exists()) { QAction* action = new QAction(QFileInfo(filename).fileName(), m_recentMenu); action->setToolTip(filename); connect(action, &QAction::triggered, this, &SourceManager::openRecentItem); m_recentMenu->addAction(action); if(++count >= sMaxNumRecent) { break; } } } if(m_recentMenu->isEmpty()) { m_recentMenu->addAction(_("No recent files"))->setEnabled(false); } } void SourceManager::openSources() { QList current = getSelectedSources(); QString initialFolder = Utils::documentsFolder(); if(!current.isEmpty() && !current.front()->isTemp) { initialFolder = QFileInfo(current.front()->path).absolutePath(); } QSet formats; for(const QByteArray& format : QImageReader::supportedImageFormats()) { formats.insert(QString("*.%1").arg(QString(format).toLower())); } formats.insert("*.pdf"); formats.insert("*.djvu"); QString filter = QString("%1 (%2)").arg(_("Images and PDFs")).arg(QStringList(formats.values()).join(" ")); addSources(FileDialogs::openDialog(_("Select Files"), initialFolder, "sourcedir", filter, true)); } void SourceManager::addFolder() { QList current = getSelectedSources(); QString initialFolder = Utils::documentsFolder(); if(!current.isEmpty() && !current.front()->isTemp) { initialFolder = QFileInfo(current.front()->path).absolutePath(); } QString dir = QFileDialog::getExistingDirectory(MAIN, _("Select folder..."), initialFolder); if(dir.isEmpty()) { return; } QStringList nameFilters; QSet formats; for(const QByteArray& format : QImageReader::supportedImageFormats()) { formats.insert(QString("*.%1").arg(QString(format).toLower())); } formats.insert("*.pdf"); formats.insert("*.djvu"); nameFilters = formats.values(); QDirIterator it(dir, nameFilters, QDir::Files, QDirIterator::Subdirectories); QStringList filenames; while(it.hasNext()) { filenames.append(it.next()); } if(!filenames.isEmpty()) { addSources(filenames); } } void SourceManager::openRecentItem() { const QString& filename = qobject_cast(QObject::sender())->toolTip(); addSources(QStringList() << filename); } void SourceManager::pasteClipboard() { QPixmap pixmap = QApplication::clipboard()->pixmap(); if(pixmap.isNull()) { QMessageBox::critical(MAIN, _("Clipboard Error"), _("Failed to read the clipboard.")); return; } ++m_pasteCount; QString displayname = _("Pasted %1").arg(m_pasteCount); savePixmap(pixmap, displayname); } void SourceManager::addSourceImage(const QImage& image) { ++m_pasteCount; QString displayname = _("Pasted %1").arg(m_pasteCount); savePixmap(QPixmap::fromImage(image), displayname); } void SourceManager::takeScreenshot() { MAIN->hide(); QApplication::processEvents(); QTimer* timer = new QTimer(); connect(timer, &QTimer::timeout, [this, timer] { timer->deleteLater(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QScreen* screen = QGuiApplication::primaryScreen(); QPixmap pixmap = screen ? screen->grabWindow() : QPixmap(); #else QPixmap pixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId()); #endif MAIN->show(); if(pixmap.isNull()) { QMessageBox::critical(MAIN, _("Screenshot Error"), _("Failed to take screenshot.")); return; } ++m_screenshotCount; QString displayname = _("Screenshot %1").arg(m_screenshotCount); savePixmap(pixmap, displayname); }); timer->start(250); } void SourceManager::savePixmap(const QPixmap& pixmap, const QString& displayname) { MAIN->pushState(MainWindow::State::Busy, _("Saving image...")); QString filename; bool success = true; QTemporaryFile tmpfile(QDir::temp().absoluteFilePath("gimagereader_XXXXXX.png")); if(!tmpfile.open()) { success = false; } else { tmpfile.setAutoRemove(false); filename = tmpfile.fileName(); success = pixmap.save(filename); } MAIN->popState(); if(!success) { QMessageBox::critical(MAIN, _("Cannot Write File"), _("Could not write to %1.").arg(filename)); } else { Source* source = new Source(filename, displayname, QByteArray(), true); QModelIndex index = m_fileTreeModel->insertFile(filename, source, displayname); m_fsWatcher.addPath(filename); QFileInfo finfo(filename); m_watchedDirectories[finfo.absolutePath()] += 1; if(m_watchedDirectories[finfo.absolutePath()] == 1) { m_fsWatcher.addPath(finfo.absolutePath()); } ui.treeViewSources->selectionModel()->blockSignals(true); ui.treeViewSources->clearSelection(); ui.treeViewSources->selectionModel()->blockSignals(false); ui.treeViewSources->setCurrentIndex(index); } } void SourceManager::removeSource(bool deleteFile) { QStringList paths; for(const QModelIndex& index : ui.treeViewSources->selectionModel()->selectedRows()) { Source* source = m_fileTreeModel->fileData(index); if(source) { paths.append(source->path); } } if(paths.isEmpty()) { return; } if(deleteFile && QDialogButtonBox::Yes != Utils::messageBox(MAIN, _("Delete Files"), _("Delete the following files?"), paths.join("\n"), QMessageBox::Question, QDialogButtonBox::Yes | QDialogButtonBox::No)) { return; } // Avoid multiple sourceChanged emissions when removing items ui.treeViewSources->selectionModel()->blockSignals(true); ui.treeViewSources->setUpdatesEnabled(false); while(ui.treeViewSources->selectionModel()->hasSelection()) { QModelIndex index = ui.treeViewSources->selectionModel()->selectedRows().front(); if(deleteFile && m_fileTreeModel->isDir(index)) { // Skip directories (they are pruned from the tree automatically if empty), otherwise descendant selected file indices are possibly removed without the files getting deleted ui.treeViewSources->selectionModel()->select(index, QItemSelectionModel::Deselect); } else { Source* source = m_fileTreeModel->fileData(index); if(source) { m_fsWatcher.removePath(source->path); QString dir = QFileInfo(source->path).absolutePath(); m_watchedDirectories[dir] -= 1; if(m_watchedDirectories[dir] == 0) { m_fsWatcher.removePath(dir); m_watchedDirectories.remove(dir); } if(deleteFile) { QFile(source->path).remove(); } } m_fileTreeModel->removeIndex(index); } } ui.treeViewSources->selectionModel()->clear(); ui.treeViewSources->selectionModel()->select(ui.treeViewSources->currentIndex(), QItemSelectionModel::Select); ui.treeViewSources->selectionModel()->blockSignals(false); ui.treeViewSources->setUpdatesEnabled(true); currentSourceChanged(); } void SourceManager::clearSources() { if(!m_fsWatcher.files().isEmpty()) { m_fsWatcher.removePaths(m_fsWatcher.files()); } if(!m_fsWatcher.directories().isEmpty()) { m_fsWatcher.removePaths(m_fsWatcher.directories()); } m_fileTreeModel->clear(); } void SourceManager::currentSourceChanged() { if(m_inCurrentSourceChanged) { return; } m_inCurrentSourceChanged = true; // Merge selection of all children of selected items QItemSelection selection = ui.treeViewSources->selectionModel()->selection(); QItemSelection extendedSel; for(const QModelIndex& index : selection.indexes()) { selectRecursive(extendedSel, index); } extendedSel.merge(selection, QItemSelectionModel::Select); ui.treeViewSources->selectionModel()->select(extendedSel, QItemSelectionModel::Select | QItemSelectionModel::Rows); bool enabled = !ui.treeViewSources->selectionModel()->selectedRows().isEmpty(); ui.actionSourceRemove->setEnabled(enabled); ui.actionSourceDelete->setEnabled(enabled); emit sourceChanged(); m_inCurrentSourceChanged = false; } void SourceManager::indexClicked(const QModelIndex& index) { Source* source = m_fileTreeModel->fileData(index); if(index.column() == 1 && source && m_fileTreeModel->isFileEditable(index)) { QFileInfo finfo(source->path); QString base = finfo.absoluteDir().absoluteFilePath(finfo.baseName()); bool hasTxt = QFile(base + ".txt").exists(); bool hasHtml = QFile(base + ".html").exists(); if(hasTxt && hasHtml) { QMessageBox box(QMessageBox::Question, _("Open output"), _("Both a text and a hOCR output were found. Which one do you want to open?"), QMessageBox::Cancel); QAbstractButton* textButton = box.addButton(_("Text"), QMessageBox::AcceptRole); QAbstractButton* hocrButton = box.addButton(_("hOCR"), QMessageBox::AcceptRole); connect(textButton, &QAbstractButton::clicked, this, [base] { MAIN->openOutput(base + ".txt"); }); connect(hocrButton, &QAbstractButton::clicked, this, [base] { MAIN->openOutput(base + ".html"); }); box.exec(); } else if(hasTxt) { MAIN->openOutput(base + ".txt"); } else if(hasHtml) { MAIN->openOutput(base + ".html"); } } } void SourceManager::selectRecursive(QItemSelection& parentsel, const QModelIndex& index) { int rows = m_fileTreeModel->rowCount(index); for(int row = 0; row < rows; ++row) { QModelIndex child = m_fileTreeModel->index(row, 0, index); selectRecursive(parentsel, child); } QItemSelection sel(m_fileTreeModel->index(0, 0, index), m_fileTreeModel->index(rows - 1, 0, index)); parentsel.merge(sel, QItemSelectionModel::Select | QItemSelectionModel::Rows); } void SourceManager::fileChanged(const QString& filename) { if(!QFile(filename).exists()) { QModelIndex index = m_fileTreeModel->findFile(filename); if(index.isValid()) { QMessageBox::warning(MAIN, _("Missing File"), _("The following file has been deleted or moved:\n%1").arg(filename)); m_fileTreeModel->removeIndex(index); } } m_fsWatcher.removePath(filename); m_watchedDirectories.remove(filename); // In case it was a directory } void SourceManager::directoryChanged(const QString& dir) { // Update editable status of files in directory QModelIndex index = m_fileTreeModel->findFile(dir, false); for(int row = 0, n = m_fileTreeModel->rowCount(index); row < n; ++row) { QModelIndex child = m_fileTreeModel->index(row, 0, index); Source* source = m_fileTreeModel->fileData(child); if(source) { QFileInfo finfo(source->path); QString base = finfo.absoluteDir().absoluteFilePath(finfo.baseName()); m_fileTreeModel->setFileEditable(child, QFile(base + ".txt").exists() || QFile(base + ".html").exists()); } } } bool SourceManager::eventFilter(QObject* object, QEvent* event) { if(event->type() == QEvent::DragEnter) { QDragEnterEvent* dragEnterEvent = static_cast(event); if(Utils::handleSourceDragEvent(dragEnterEvent->mimeData())) { dragEnterEvent->acceptProposedAction(); } return true; } else if(event->type() == QEvent::Drop) { QDropEvent* dropEvent = static_cast(event); Utils::handleSourceDropEvent(dropEvent->mimeData()); return true; } return QObject::eventFilter(object, event); } gImageReader-3.4.0/qt/src/SourceManager.hh000066400000000000000000000062731417507262200203370ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SourceManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SOURCEMANAGER_HH #define SOURCEMANAGER_HH #include #include #include #include #include "common.hh" class FileTreeModel; class QMenu; class QPixmap; class UI_MainWindow; class Source : public DataObject { public: Source(const QString& _path, const QString& _displayname, const QByteArray& _password = "", bool _isTemp = false) : path(_path), displayname(_displayname), password(_password), isTemp(_isTemp) {} ~Source(); QString path; QString displayname; QByteArray password; bool isTemp; int brightness = 0; int contrast = 0; int resolution = -1; int page = 1; QVector angle; bool invert = false; //Additional info from original file QString author, title, creator, producer, keywords, subject; int pdfVersionMajor = -1, pdfVersionMinor = -1; }; class SourceManager : public QObject { Q_OBJECT public: SourceManager(const UI_MainWindow& _ui); ~SourceManager(); QList getSelectedSources() const; void addSourceImage(const QImage& image); int addSources(const QStringList& files, bool suppressWarnings = false); public slots: bool addSource(const QString& file, bool suppressWarnings = false) { return addSources(QStringList() << file, suppressWarnings) == 1; } signals: void sourceChanged(); private: enum class PdfWithTextAction {Ask, Add, Skip}; const UI_MainWindow& ui; FileTreeModel* m_fileTreeModel = nullptr; QMenu* m_recentMenu = nullptr; QFileSystemWatcher m_fsWatcher; QMap m_watchedDirectories; static constexpr int sMaxNumRecent = 15; int m_screenshotCount = 0; int m_pasteCount = 0; bool m_inCurrentSourceChanged = false; bool checkPdfSource(Source* source, PdfWithTextAction& textAction, QStringList& failed) const; void savePixmap(const QPixmap& pixmap, const QString& displayname); bool eventFilter(QObject* object, QEvent* event) override; void selectRecursive(QItemSelection& parentsel, const QModelIndex& index); private slots: void clearSources(); void currentSourceChanged(); void indexClicked(const QModelIndex& index); void deleteSource() { removeSource(true); } void fileChanged(const QString& filename); void directoryChanged(const QString& dir); void addFolder(); void openRecentItem(); void openSources(); void pasteClipboard(); void prepareRecentMenu(); void removeSource(bool deleteFile = false); void takeScreenshot(); }; #endif // SOURCEMANAGER_HH gImageReader-3.4.0/qt/src/SubstitutionsManager.cc000066400000000000000000000166241417507262200217650ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SubstitutionsManager.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include "ConfigSettings.hh" #include "FileDialogs.hh" #include "MainWindow.hh" #include "OutputTextEdit.hh" #include "SubstitutionsManager.hh" #include "Utils.hh" SubstitutionsManager::SubstitutionsManager(QWidget* parent) : QDialog(parent) { setWindowTitle(_("Substitutions")); QAction* openAction = new QAction(QIcon::fromTheme("document-open"), _("Open"), this); openAction->setToolTip(_("Open")); QAction* saveAction = new QAction(QIcon::fromTheme("document-save"), _("Save"), this); saveAction->setToolTip(_("Save")); QAction* clearAction = new QAction(QIcon::fromTheme("edit-clear"), _("Clear"), this); clearAction->setToolTip(_("Clear")); QAction* addAction = new QAction(QIcon::fromTheme("list-add"), _("Add"), this); addAction->setToolTip(_("Add")); m_removeAction = new QAction(QIcon::fromTheme("list-remove"), _("Remove"), this); m_removeAction->setToolTip(_("Remove")); m_removeAction->setEnabled(false); QToolBar* toolbar = new QToolBar(this); toolbar->setIconSize(QSize(1, 1) * toolbar->style()->pixelMetric(QStyle::PM_SmallIconSize)); toolbar->addAction(openAction); toolbar->addAction(saveAction); toolbar->addAction(clearAction); toolbar->addSeparator(); toolbar->addAction(addAction); toolbar->addAction(m_removeAction); m_tableWidget = new QTableWidget(0, 2, this); m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); m_tableWidget->setEditTriggers(QAbstractItemView::CurrentChanged); m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_tableWidget->horizontalHeader()->setVisible(true); m_tableWidget->verticalHeader()->setVisible(false); m_tableWidget->setHorizontalHeaderLabels(QStringList() << _("Search for") << _("Replace with")); QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Apply | QDialogButtonBox::Close); QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(4, 4, 4, 4); layout->addWidget(toolbar); layout->addWidget(m_tableWidget); layout->addWidget(buttonBox); setLayout(layout); connect(openAction, &QAction::triggered, this, &SubstitutionsManager::openList); connect(saveAction, &QAction::triggered, this, &SubstitutionsManager::saveList); connect(clearAction, &QAction::triggered, this, &SubstitutionsManager::clearList); connect(addAction, &QAction::triggered, this, &SubstitutionsManager::addRow); connect(buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &SubstitutionsManager::emitApplySubstitutions); connect(buttonBox->button(QDialogButtonBox::Close), &QPushButton::clicked, this, &SubstitutionsManager::hide); connect(m_removeAction, &QAction::triggered, this, &SubstitutionsManager::removeRows); connect(m_tableWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &SubstitutionsManager::onTableSelectionChanged); ADD_SETTING(TableSetting("substitutionslist", m_tableWidget)); } SubstitutionsManager::~SubstitutionsManager() { ConfigSettings::get("substitutionslist")->serialize(); } void SubstitutionsManager::openList() { if(!clearList()) { return; } QString dir = !m_currentFile.isEmpty() ? QFileInfo(m_currentFile).absolutePath() : ""; QStringList files = FileDialogs::openDialog(_("Open Substitutions List"), dir, "auxdir", QString("%1 (*.txt)").arg(_("Substitutions List")), false, this); if(!files.isEmpty()) { QString filename = files.front(); QFile file(filename); if(!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, _("Error Reading File"), _("Unable to read '%1'.").arg(filename)); return; } m_currentFile = filename; bool errors = false; m_tableWidget->blockSignals(true); while(!file.atEnd()) { QString line = MAIN->getConfig()->useUtf8() ? QString::fromUtf8(file.readLine()) : QString::fromLocal8Bit(file.readLine()); line.chop(1); if(line.isEmpty()) { continue; } QList fields = line.split('\t'); if(fields.size() < 2) { errors = true; continue; } int row = m_tableWidget->rowCount(); m_tableWidget->insertRow(row); m_tableWidget->setItem(row, 0, new QTableWidgetItem(fields[0])); m_tableWidget->setItem(row, 1, new QTableWidgetItem(fields[1])); } m_tableWidget->blockSignals(false); if(errors) { QMessageBox::warning(this, _("Errors Occurred Reading File"), _("Some entries of the substitutions list could not be read.")); } } } bool SubstitutionsManager::saveList() { QString filename = FileDialogs::saveDialog(_("Save Substitutions List"), m_currentFile, "auxdir", QString("%1 (*.txt)").arg(_("Substitutions List")), false, this); if(filename.isEmpty()) { return false; } QFile file(filename); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(this, _("Error Saving File"), _("Unable to write to '%1'.").arg(filename)); return false; } m_currentFile = filename; for(int row = 0, nRows = m_tableWidget->rowCount(); row < nRows; ++row) { QString line = QString("%1\t%2\n").arg(m_tableWidget->item(row, 0)->text()).arg(m_tableWidget->item(row, 1)->text()); file.write(MAIN->getConfig()->useUtf8() ? line.toUtf8() : line.toLocal8Bit()); } return true; } bool SubstitutionsManager::clearList() { if(m_tableWidget->rowCount() > 0) { int response = QMessageBox::question(this, _("Save List?"), _("Do you want to save the current list?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if(response == QMessageBox::Save) { if(!saveList()) { return false; } } else if(response != QMessageBox::Discard) { return false; } m_tableWidget->setRowCount(0); } return true; } void SubstitutionsManager::addRow() { int row = m_tableWidget->rowCount(); m_tableWidget->insertRow(row); m_tableWidget->setItem(row, 0, new QTableWidgetItem()); m_tableWidget->setItem(row, 1, new QTableWidgetItem()); m_tableWidget->editItem(m_tableWidget->item(row, 0)); } void SubstitutionsManager::removeRows() { m_tableWidget->blockSignals(true); for(const QModelIndex& index : m_tableWidget->selectionModel()->selectedRows()) { m_tableWidget->removeRow(index.row()); } m_tableWidget->blockSignals(false); } void SubstitutionsManager::onTableSelectionChanged(const QItemSelection& selected, const QItemSelection& /*deselected*/) { m_removeAction->setEnabled(!selected.isEmpty()); } void SubstitutionsManager::emitApplySubstitutions() { QMap substitutions; for(int row = 0, nRows = m_tableWidget->rowCount(); row < nRows; ++row) { substitutions.insert(m_tableWidget->item(row, 0)->text(), m_tableWidget->item(row, 1)->text()); } emit applySubstitutions(substitutions); } gImageReader-3.4.0/qt/src/SubstitutionsManager.hh000066400000000000000000000030531417507262200217670ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * SubstitutionsManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SUBSTITUTIONS_MANAGER_HH #define SUBSTITUTIONS_MANAGER_HH #include class QCheckBox; class QItemSelection; class OutputTextEdit; class QTableWidget; class SubstitutionsManager : public QDialog { Q_OBJECT public: SubstitutionsManager(QWidget* parent = nullptr); ~SubstitutionsManager(); signals: void applySubstitutions(const QMap& substitutions); private: QAction* m_removeAction; QString m_currentFile; QTableWidget* m_tableWidget; private slots: void addRow(); void emitApplySubstitutions(); bool clearList(); void onTableSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected); void openList(); void removeRows(); bool saveList(); }; #endif // SUBSTITUTIONS_MANAGER_HH gImageReader-3.4.0/qt/src/TessdataManager.cc000066400000000000000000000274741417507262200206430ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * TessdataManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "MainWindow.hh" #include "RecognitionMenu.hh" #include "TessdataManager.hh" #include "Utils.hh" TessdataManager::TessdataManager(QWidget* parent) : QDialog(parent) { setWindowTitle(_("Tessdata Manager")); setLayout(new QVBoxLayout()); layout()->addWidget(new QLabel(_("Manage installed languages:"))); m_languageList = new QListWidget(this); layout()->addWidget(m_languageList); QDialogButtonBox* bbox = new QDialogButtonBox(); bbox->addButton(QDialogButtonBox::Close); bbox->addButton(QDialogButtonBox::Apply); QPushButton* refreshButton = bbox->addButton(_("Refresh"), QDialogButtonBox::ActionRole); connect(bbox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &TessdataManager::applyChanges); connect(bbox, &QDialogButtonBox::accepted, this, &TessdataManager::accept); connect(bbox, &QDialogButtonBox::rejected, this, &TessdataManager::reject); connect(refreshButton, &QPushButton::clicked, this, &TessdataManager::refresh); layout()->addWidget(bbox); setFixedWidth(320); } bool TessdataManager::setup() { #ifdef Q_OS_LINUX if(MAIN->getConfig()->useSystemDataLocations()) { QDBusConnectionInterface* iface = QDBusConnection::sessionBus().interface(); iface->startService("org.freedesktop.PackageKit"); if(!iface->isServiceRegistered("org.freedesktop.PackageKit").value()) { QMessageBox::critical(MAIN, _("Error"), _("A session connection to the PackageKit backend is required for managing system-wide tesseract language packs, but it was not found. This service is usually provided by a software-management application such as Gnome Software. Please install software which provides the necessary PackageKit interface, use other system package management software to manage the tesseract language packs directly, or switch to using the user tessdata path in the configuration dialog.")); return false; } } #endif MAIN->pushState(MainWindow::State::Busy, _("Fetching available languages")); QString messages; bool success = fetchLanguageList(messages); MAIN->popState(); if(!success) { QMessageBox::critical(MAIN, _("Error"), _("Failed to fetch list of available languages: %1").arg(messages)); return false; } return true; } bool TessdataManager::fetchLanguageList(QString& messages) { m_languageList->clear(); // Get newest tag older or equal to used tesseract version #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(4, 0, 0) QUrl url("https://api.github.com/repos/tesseract-ocr/tessdata_fast/tags"); #else QUrl url("https://api.github.com/repos/tesseract-ocr/tessdata/tags"); #endif QByteArray data = Utils::download(url, messages); if(data.isEmpty()) { return false; } QString tessdataVer; int bestMatchDist = std::numeric_limits::max(); static const QRegularExpression verRegEx("^[vV]?(\\d+).(\\d+).(\\d+)-?(\\w?.*)$"); QJsonParseError err; QJsonDocument json = QJsonDocument::fromJson(data, &err); if(json.isNull()) { messages = _("Parsing error: %1").arg(err.errorString()); return false; } for(const QJsonValue& value : json.array()) { QString tag = value.toObject().value("name").toString(); QRegularExpressionMatch match; if((match = verRegEx.match(tag)).hasMatch()) { int tagVer = TESSERACT_MAKE_VERSION(match.captured(1).toInt(), match.captured(2).toInt(), match.captured(3).toInt()); int dist = TESSERACT_VERSION - tagVer; if(dist >= 0 && dist < bestMatchDist) { bestMatchDist = dist; tessdataVer = tag; } } } QVector> extraFiles; QList dataUrls; #if TESSERACT_VERSION >= TESSERACT_MAKE_VERSION(4, 0, 0) dataUrls.append(QUrl("https://api.github.com/repos/tesseract-ocr/tessdata_fast/contents?ref=" + tessdataVer)); dataUrls.append(QUrl("https://api.github.com/repos/tesseract-ocr/tessdata_fast/contents/script?ref=" + tessdataVer)); #else dataUrls.append(QUrl("https://api.github.com/repos/tesseract-ocr/tessdata/contents?ref=" + tessdataVer)); #endif for(const QUrl& url : dataUrls) { data = Utils::download(url, messages); if(data.isEmpty()) { continue; } err = QJsonParseError(); json = QJsonDocument::fromJson(data, &err); if(json.isNull()) { continue; } for(const QJsonValue& value : json.array()) { QJsonObject treeObj = value.toObject(); QString fileName = treeObj.value("name").toString(); QString url = treeObj.value("download_url").toString(); QString subdir = ""; // If filename starts with upper case letter, it is a script if(fileName.left(1) == fileName.left(1).toUpper()) { subdir = "script/"; } if(fileName.endsWith(".traineddata")) { QString prefix = subdir + fileName.left(fileName.indexOf(".")); m_languageFiles[prefix].append({subdir + fileName, url}); } else { // Delay decision to determine whether file is a supplementary language file extraFiles.append(qMakePair(subdir + fileName, url)); } } for(const QPair& extraFile : extraFiles) { QString lang = extraFile.first.left(extraFile.first.indexOf(".")); if(m_languageFiles.contains(lang)) { m_languageFiles[lang].append({extraFile.first, extraFile.second}); } } } if(m_languageFiles.isEmpty()) { return false; } QStringList availableLanguages = MAIN->getConfig()->getAvailableLanguages(); typedef QPair string_pair_t; QList languages; for(const QString& prefix : m_languageFiles.keys()) { Config::Lang lang; lang.prefix = prefix; if(MAIN->getConfig()->searchLangSpec(lang)) { languages.push_back(qMakePair(lang.prefix, lang.name)); } else { languages.push_back(qMakePair(lang.prefix, lang.prefix)); } } std::sort(languages.begin(), languages.end(), [](const string_pair_t& p1, const string_pair_t& p2) { bool p1Script = p1.first.startsWith("script") || p1.first.left(1) == p1.first.left(1).toUpper(); bool p2Script = p2.first.startsWith("script") || p2.first.left(1) == p2.first.left(1).toUpper(); if(p1Script != p2Script) { return !p1Script; } else { return p1.second.toLower() < p2.second.toLower(); } }); for(const string_pair_t& entry : languages) { QListWidgetItem* item = new QListWidgetItem(entry.second); item->setData(Qt::UserRole, entry.first); item->setCheckState(availableLanguages.contains(entry.first) ? Qt::Checked : Qt::Unchecked); m_languageList->addItem(item); } return true; } void TessdataManager::applyChanges() { MAIN->pushState(MainWindow::State::Busy, _("Applying changes...")); setEnabled(false); QString errorMsg; QStringList availableLanguages = MAIN->getConfig()->getAvailableLanguages(); QDir tessDataDir(MAIN->getConfig()->tessdataLocation()); #ifdef Q_OS_WIN bool isWindows = true; #else bool isWindows = false; #endif if(!isWindows && MAIN->getConfig()->useSystemDataLocations()) { // Place this in a ifdef since DBus stuff cannot be compiled on Windows #ifdef Q_OS_LINUX QStringList installFiles; QStringList removeFiles; for(int row = 0, nRows = m_languageList->count(); row < nRows; ++row) { QListWidgetItem* item = m_languageList->item(row); QString prefix = item->data(Qt::UserRole).toString(); if(item->checkState() == Qt::Checked && !availableLanguages.contains(prefix)) { installFiles.append(tessDataDir.absoluteFilePath(QString("%1.traineddata").arg(prefix))); } else if(item->checkState() != Qt::Checked && availableLanguages.contains(prefix)) { removeFiles.append(tessDataDir.absoluteFilePath(QString("%1.traineddata").arg(prefix))); } } if(!installFiles.isEmpty()) { QDBusMessage req = QDBusMessage::createMethodCall("org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify", "InstallProvideFiles"); req.setArguments(QList() << QVariant::fromValue((quint32)winId()) << QVariant::fromValue(installFiles) << QVariant::fromValue(QString("always"))); QDBusMessage reply = QDBusConnection::sessionBus().call(req, QDBus::BlockWithGui, 3600000); if(reply.type() == QDBusMessage::ErrorMessage) { errorMsg = reply.errorMessage(); } } if(errorMsg.isEmpty() && !removeFiles.isEmpty()) { QDBusMessage req = QDBusMessage::createMethodCall("org.freedesktop.PackageKit", "/org/freedesktop/PackageKit", "org.freedesktop.PackageKit.Modify", "RemovePackageByFiles"); req.setArguments(QList() << QVariant::fromValue((quint32)winId()) << QVariant::fromValue(removeFiles) << QVariant::fromValue(QString("always"))); QDBusMessage reply = QDBusConnection::sessionBus().call(req, QDBus::BlockWithGui, 3600000); if(reply.type() == QDBusMessage::ErrorMessage) { errorMsg = reply.errorMessage(); } } #endif } else { QStringList errors; QDir scriptDir = QDir(tessDataDir.absoluteFilePath("script")); if(!QDir().mkpath(tessDataDir.absoluteFilePath("script"))) { errors.append(_("Failed to create directory for tessdata files.")); } else { for(int row = 0, nRows = m_languageList->count(); row < nRows; ++row) { QListWidgetItem* item = m_languageList->item(row); QString prefix = item->data(Qt::UserRole).toString(); if(item->checkState() == Qt::Checked && !availableLanguages.contains(prefix)) { for(const LangFile& langFile : m_languageFiles.value(prefix)) { QFile file(QDir(tessDataDir).absoluteFilePath(langFile.name)); if(!file.exists()) { MAIN->pushState(MainWindow::State::Busy, _("Downloading %1...").arg(langFile.name)); QString messages; QByteArray data = Utils::download(QUrl(langFile.url), messages); if(data.isEmpty() || !file.open(QIODevice::WriteOnly)) { errors.append(langFile.name); } else { file.write(data); } MAIN->popState(); } } } else if(item->checkState() != Qt::Checked && availableLanguages.contains(prefix)) { for(const LangFile& langFile : m_languageFiles.value(prefix)) { if(!QFile(QDir(tessDataDir).absoluteFilePath(langFile.name)).remove()) { errors.append(langFile.name); } } } } } if(!errors.isEmpty()) { errorMsg = _("The following files could not be downloaded or removed:\n%1\n\nCheck the connectivity and directory permissions.\nHint: If you don't have write permissions in system folders, you can switch to user paths in the settings dialog.").arg(errors.join("\n")); } } setEnabled(true); MAIN->popState(); refresh(); if(!errorMsg.isEmpty()) { QMessageBox::critical(this, _("Error"), errorMsg); } } void TessdataManager::refresh() { MAIN->getRecognitionMenu()->rebuild(); QStringList availableLanguages = MAIN->getConfig()->getAvailableLanguages(); for(int row = 0, nRows = m_languageList->count(); row < nRows; ++row) { QListWidgetItem* item = m_languageList->item(row); QString prefix = item->data(Qt::UserRole).toString(); item->setCheckState(availableLanguages.contains(prefix) ? Qt::Checked : Qt::Unchecked); } } gImageReader-3.4.0/qt/src/TessdataManager.hh000066400000000000000000000024501417507262200206400ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * TessdataManager.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef TESSDATAMANAGER_HH #define TESSDATAMANAGER_HH #include #include class QListWidget; class TessdataManager : public QDialog { Q_OBJECT public: TessdataManager(QWidget* parent = 0); bool setup(); private: struct LangFile { QString name; QString url; }; QListWidget* m_languageList; QMap> m_languageFiles; bool fetchLanguageList(QString& messages); private slots: void applyChanges(); void refresh(); }; #endif // TESSDATAMANAGER_HH gImageReader-3.4.0/qt/src/Ui_MainWindow.hh000066400000000000000000000217671417507262200203220ustar00rootroot00000000000000#ifndef UI_MAINWINDOW_HH #define UI_MAINWINDOW_HH #include "common.hh" #include "ui_MainWindow.h" #include #include #include class UI_MainWindow : public Ui_MainWindow { public: QAction* actionAbout; QAction* actionHelp; QAction* actionPreferences; QAction* actionRedetectLanguages; QAction* actionManageLanguages; QAction* actionRotateCurrentPage; QAction* actionRotateAllPages; QAction* actionSourceClear; QAction* actionSourceDelete; QAction* actionSourcePaste; QAction* actionSourceFolder; QAction* actionSourceRemove; QAction* actionSourceScreenshot; QComboBox* comboBoxOCRMode; QDoubleSpinBox* spinBoxRotation; QSpinBox* spinBoxPage; QFrame* frameRotation; QFrame* framePage; QMenu* menuAppMenu; QMenu* menuRotation; QToolBar* toolBarSources; QToolButton* toolButtonRotation; QToolButton* toolButtonRecognize; QToolButton* toolButtonLanguages; QToolButton* toolButtonAppMenu; QToolButton* toolButtonSourceAdd; QWidgetAction* actionRotate; QWidgetAction* actionPage; void setupUi(QMainWindow* MainWindow) { Ui_MainWindow::setupUi(MainWindow); // Do remaining things which are not possible in designer toolBarMain->setContextMenuPolicy(Qt::PreventContextMenu); // Remove & from some labels which designer insists in adding dockWidgetSources->setWindowTitle(gettext("Sources")); dockWidgetOutput->setWindowTitle(gettext("Output")); // Hide image controls widget widgetImageControls->setVisible(false); // Rotate spinbox frameRotation = new QFrame(MainWindow); frameRotation->setFrameShape(QFrame::StyledPanel); frameRotation->setFrameShadow(QFrame::Sunken); frameRotation->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); frameRotation->setToolTip(gettext("Rotate page")); QHBoxLayout* layoutRotation = new QHBoxLayout(frameRotation); layoutRotation->setContentsMargins(1, 1, 1, 1); layoutRotation->setSpacing(0); actionRotateCurrentPage = new QAction(QIcon(":/icons/rotate_page"), gettext("Rotate current page"), MainWindow); actionRotateAllPages = new QAction(QIcon(":/icons/rotate_pages"), gettext("Rotate all pages"), MainWindow); menuRotation = new QMenu(MainWindow); menuRotation->addAction(actionRotateCurrentPage); menuRotation->addAction(actionRotateAllPages); toolButtonRotation = new QToolButton(MainWindow); toolButtonRotation->setIcon(QIcon(":/icons/rotate_pages")); toolButtonRotation->setToolTip(gettext("Select rotation mode")); toolButtonRotation->setPopupMode(QToolButton::InstantPopup); toolButtonRotation->setAutoRaise(true); toolButtonRotation->setMenu(menuRotation); layoutRotation->addWidget(toolButtonRotation); spinBoxRotation = new QDoubleSpinBox(MainWindow); spinBoxRotation->setRange(0.0, 359.9); spinBoxRotation->setDecimals(1); spinBoxRotation->setSingleStep(0.1); spinBoxRotation->setWrapping(true); spinBoxRotation->setFrame(false); spinBoxRotation->setKeyboardTracking(false); spinBoxRotation->setSizePolicy(spinBoxRotation->sizePolicy().horizontalPolicy(), QSizePolicy::MinimumExpanding); layoutRotation->addWidget(spinBoxRotation); actionRotate = new QWidgetAction(MainWindow); actionRotate->setDefaultWidget(frameRotation); toolBarMain->insertAction(actionImageControls, actionRotate); // Page spinbox framePage = new QFrame(MainWindow); framePage->setFrameShape(QFrame::StyledPanel); framePage->setFrameShadow(QFrame::Sunken); framePage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); framePage->setToolTip(gettext("Select page")); QHBoxLayout* layoutPage = new QHBoxLayout(framePage); layoutPage->setContentsMargins(1, 1, 1, 1); layoutPage->setSpacing(0); QToolButton* toolButtonPage = new QToolButton(MainWindow); toolButtonPage->setIcon(QPixmap(":/icons/page")); toolButtonPage->setEnabled(false); toolButtonPage->setAutoRaise(true); layoutPage->addWidget(toolButtonPage); spinBoxPage = new QSpinBox(MainWindow); spinBoxPage->setRange(1, 1); spinBoxPage->setFrame(false); spinBoxPage->setKeyboardTracking(false); spinBoxPage->setSizePolicy(spinBoxPage->sizePolicy().horizontalPolicy(), QSizePolicy::MinimumExpanding); layoutPage->addWidget(spinBoxPage); actionPage = new QWidgetAction(MainWindow); actionPage->setDefaultWidget(framePage); toolBarMain->insertAction(actionImageControls, actionPage); actionPage->setVisible(false); QFont smallFont; smallFont.setPointSizeF(smallFont.pointSizeF() * 0.9); // OCR mode button QWidget* ocrModeWidget = new QWidget(); ocrModeWidget->setLayout(new QVBoxLayout()); ocrModeWidget->layout()->setContentsMargins(0, 0, 0, 0); ocrModeWidget->layout()->setSpacing(0); QLabel* outputModeLabel = new QLabel(gettext("OCR mode:")); outputModeLabel->setFont(smallFont); ocrModeWidget->layout()->addWidget(outputModeLabel); comboBoxOCRMode = new QComboBox(); comboBoxOCRMode->setFont(smallFont); comboBoxOCRMode->setFrame(false); comboBoxOCRMode->setCurrentIndex(-1); ocrModeWidget->layout()->addWidget(comboBoxOCRMode); toolBarMain->insertWidget(actionAutodetectLayout, ocrModeWidget); actionAutodetectLayout->setVisible(false); // Recognize and language button toolButtonRecognize = new QToolButton(MainWindow); toolButtonRecognize->setIcon(QIcon::fromTheme("insert-text")); toolButtonRecognize->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolButtonRecognize->setFont(smallFont); toolBarMain->insertWidget(actionToggleOutputPane, toolButtonRecognize); toolButtonLanguages = new QToolButton(MainWindow); toolButtonLanguages->setIcon(QIcon::fromTheme("applications-education-language")); toolButtonLanguages->setPopupMode(QToolButton::InstantPopup); toolBarMain->insertWidget(actionToggleOutputPane, toolButtonLanguages); toolBarMain->insertSeparator(actionToggleOutputPane); // Spacer before app menu button QWidget* toolBarMainSpacer = new QWidget(toolBarMain); toolBarMainSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); toolBarMain->addWidget(toolBarMainSpacer); // App menu menuAppMenu = new QMenu(MainWindow); actionRedetectLanguages = new QAction(QIcon::fromTheme("view-refresh"), gettext("Redetect Languages"), MainWindow); menuAppMenu->addAction(actionRedetectLanguages); actionManageLanguages = new QAction(QIcon::fromTheme("applications-education-language"), gettext("Manage Languages"), MainWindow); menuAppMenu->addAction(actionManageLanguages); actionPreferences = new QAction(QIcon::fromTheme("preferences-system"), gettext("Preferences"), MainWindow); menuAppMenu->addAction(actionPreferences); menuAppMenu->addSeparator(); actionHelp = new QAction(QIcon::fromTheme("help-contents"), gettext("Help"), MainWindow); menuAppMenu->addAction(actionHelp); actionAbout = new QAction(QIcon::fromTheme("help-about"), gettext("About"), MainWindow); menuAppMenu->addAction(actionAbout); // App menu button toolButtonAppMenu = new QToolButton(MainWindow); toolButtonAppMenu->setIcon(QIcon::fromTheme("preferences-system")); toolButtonAppMenu->setPopupMode(QToolButton::InstantPopup); toolButtonAppMenu->setMenu(menuAppMenu); toolBarMain->addWidget(toolButtonAppMenu); // Sources toolbar actionSourceFolder = new QAction(QIcon::fromTheme("folder-open"), gettext("Add folder"), MainWindow); actionSourcePaste = new QAction(QIcon::fromTheme("edit-paste"), gettext("Paste"), MainWindow); actionSourceScreenshot = new QAction(QIcon::fromTheme("camera-photo"), gettext("Take Screenshot"), MainWindow); toolButtonSourceAdd = new QToolButton(MainWindow); toolButtonSourceAdd->setIcon(QIcon::fromTheme("document-open")); toolButtonSourceAdd->setText(gettext("Add Images")); toolButtonSourceAdd->setToolTip(gettext("Add images")); toolButtonSourceAdd->setPopupMode(QToolButton::MenuButtonPopup); actionSourceRemove = new QAction(QIcon::fromTheme("list-remove"), gettext("Remove Image"), MainWindow); actionSourceRemove->setToolTip(gettext("Remove image from list")); actionSourceRemove->setEnabled(false); actionSourceDelete = new QAction(QIcon::fromTheme("user-trash"), gettext("Delete Image"), MainWindow); actionSourceDelete->setToolTip(gettext("Delete image")); actionSourceDelete->setEnabled(false); actionSourceClear = new QAction(QIcon::fromTheme("edit-clear"), gettext("Clear List"), MainWindow); actionSourceClear->setToolTip(gettext("Clear list")); actionSourceClear->setEnabled(false); toolBarSources = new QToolBar(MainWindow); toolBarSources->setToolButtonStyle(Qt::ToolButtonIconOnly); toolBarSources->setIconSize(QSize(1, 1) * toolBarSources->style()->pixelMetric(QStyle::PM_SmallIconSize)); toolBarSources->addWidget(toolButtonSourceAdd); toolBarSources->addAction(actionSourceFolder); toolBarSources->addAction(actionSourcePaste); toolBarSources->addAction(actionSourceScreenshot); toolBarSources->addSeparator(); toolBarSources->addAction(actionSourceRemove); toolBarSources->addAction(actionSourceDelete); toolBarSources->addAction(actionSourceClear); static_cast(tabSources->layout())->insertWidget(0, toolBarSources); } }; #endif // UI_MAINWINDOW_HH gImageReader-3.4.0/qt/src/Ui_OutputEditorText.hh000066400000000000000000000154771417507262200215630ustar00rootroot00000000000000#ifndef UI_OUTPUTEDITORTEXT_HH #define UI_OUTPUTEDITORTEXT_HH #include "common.hh" #include "OutputTextEdit.hh" #include "SearchReplaceFrame.hh" #include #include #include #include #include #include #include #include #include #include #include class UI_OutputEditorText { public: QAction* actionOutputModeAppend; QAction* actionOutputModeCursor; QAction* actionOutputModeReplace; QAction* actionOutputClear; QAction* actionOutputRedo; QAction* actionOutputReplace; QAction* actionOutputSave; QAction* actionOutputPostprocTitle1; QAction* actionOutputPostprocKeepEndMark; QAction* actionOutputPostprocKeepQuote; QAction* actionOutputPostprocTitle2; QAction* actionOutputPostprocJoinHyphen; QAction* actionOutputPostprocCollapseSpaces; QAction* actionOutputPostprocKeepParagraphs; QAction* actionOutputPostprocTitle3; QAction* actionOutputPostprocDrawWhitespace; QAction* actionOutputUndo; QMenu* menuOutputMode; QMenu* menuOutputPostproc; QTabWidget* tabWidget; QToolBar* toolBarOutput; QToolButton* toolButtonOpen; QToolButton* toolButtonOutputMode; QToolButton* toolButtonOutputPostproc; QToolButton* toolButtonAddTab; SearchReplaceFrame* searchFrame; void setupUi(QWidget* widget) { widget->setLayout(new QVBoxLayout()); widget->layout()->setContentsMargins(0, 0, 0, 0); widget->layout()->setSpacing(0); // Open toolButtonOpen = new QToolButton(widget); toolButtonOpen->setIcon(QIcon::fromTheme("document-open")); toolButtonOpen->setToolTip(gettext("Open")); toolButtonOpen->setPopupMode(QToolButton::MenuButtonPopup); // Output insert mode actionOutputModeAppend = new QAction(QIcon(":/icons/ins_append"), gettext("Append to current text"), widget); actionOutputModeCursor = new QAction(QIcon(":/icons/ins_cursor"), gettext("Insert at cursor"), widget); actionOutputModeReplace = new QAction(QIcon(":/icons/ins_replace"), gettext("Replace current text"), widget); menuOutputMode = new QMenu(widget); menuOutputMode->addAction(actionOutputModeAppend); menuOutputMode->addAction(actionOutputModeCursor); menuOutputMode->addAction(actionOutputModeReplace); // Output postprocessing actionOutputPostprocTitle1 = new QAction(gettext("Keep line break if..."), widget); actionOutputPostprocTitle1->setEnabled(false); actionOutputPostprocKeepEndMark = new QAction(gettext("Preceded by end mark (.?!)"), widget); actionOutputPostprocKeepEndMark->setCheckable(true); actionOutputPostprocKeepQuote = new QAction(gettext("Preceded or succeeded by quote"), widget); actionOutputPostprocKeepQuote->setCheckable(true); actionOutputPostprocTitle2 = new QAction(gettext("Other options"), widget); actionOutputPostprocTitle2->setEnabled(false); actionOutputPostprocJoinHyphen = new QAction(gettext("Join hyphenated words"), widget); actionOutputPostprocJoinHyphen->setCheckable(true); actionOutputPostprocCollapseSpaces = new QAction(gettext("Collapse whitespace"), widget); actionOutputPostprocCollapseSpaces->setCheckable(true); actionOutputPostprocKeepParagraphs = new QAction(gettext("Preserve paragraphs"), widget); actionOutputPostprocKeepParagraphs->setCheckable(true); actionOutputPostprocTitle3 = new QAction(gettext("Visual aids"), widget); actionOutputPostprocTitle3->setEnabled(false); actionOutputPostprocDrawWhitespace = new QAction(gettext("Draw whitespace"), widget); actionOutputPostprocDrawWhitespace->setCheckable(true); menuOutputPostproc = new QMenu(widget); menuOutputPostproc->addAction(actionOutputPostprocTitle1); menuOutputPostproc->addAction(actionOutputPostprocKeepEndMark); menuOutputPostproc->addAction(actionOutputPostprocKeepQuote); menuOutputPostproc->addAction(actionOutputPostprocTitle2); menuOutputPostproc->addAction(actionOutputPostprocJoinHyphen); menuOutputPostproc->addAction(actionOutputPostprocCollapseSpaces); menuOutputPostproc->addAction(actionOutputPostprocKeepParagraphs); menuOutputPostproc->addAction(actionOutputPostprocTitle3); menuOutputPostproc->addAction(actionOutputPostprocDrawWhitespace); // Output toolbar toolButtonOutputMode = new QToolButton(widget); toolButtonOutputMode->setIcon(QIcon(":/icons/ins_append")); toolButtonOutputMode->setToolTip(gettext("Select insert mode")); toolButtonOutputMode->setPopupMode(QToolButton::InstantPopup); toolButtonOutputMode->setMenu(menuOutputMode); toolButtonOutputPostproc = new QToolButton(widget); toolButtonOutputPostproc->setIcon(QIcon(":/icons/stripcrlf")); toolButtonOutputPostproc->setText(gettext("Strip Line Breaks")); toolButtonOutputPostproc->setToolTip(gettext("Strip line breaks on selected text")); toolButtonOutputPostproc->setPopupMode(QToolButton::MenuButtonPopup); toolButtonOutputPostproc->setMenu(menuOutputPostproc); actionOutputReplace = new QAction(QIcon::fromTheme("edit-find-replace"), gettext("Find and Replace"), widget); actionOutputReplace->setToolTip(gettext("Find and replace")); actionOutputReplace->setCheckable(true); actionOutputUndo = new QAction(QIcon::fromTheme("edit-undo"), gettext("Undo"), widget); actionOutputUndo->setToolTip(gettext("Undo")); actionOutputUndo->setEnabled(false); actionOutputRedo = new QAction(QIcon::fromTheme("edit-redo"), gettext("Redo"), widget); actionOutputRedo->setToolTip(gettext("Redo")); actionOutputRedo->setEnabled(false); actionOutputSave = new QAction(QIcon::fromTheme("document-save-as"), gettext("Save Output"), widget); actionOutputSave->setToolTip(gettext("Save output")); actionOutputClear = new QAction(QIcon::fromTheme("edit-clear"), gettext("Clear Output"), widget); actionOutputClear->setToolTip(gettext("Clear output")); toolBarOutput = new QToolBar(widget); toolBarOutput->setToolButtonStyle(Qt::ToolButtonIconOnly); toolBarOutput->setIconSize(QSize(1, 1) * toolBarOutput->style()->pixelMetric(QStyle::PM_SmallIconSize)); toolBarOutput->addWidget(toolButtonOpen); toolBarOutput->addAction(actionOutputSave); toolBarOutput->addWidget(toolButtonOutputMode); toolBarOutput->addWidget(toolButtonOutputPostproc); toolBarOutput->addAction(actionOutputReplace); toolBarOutput->addAction(actionOutputUndo); toolBarOutput->addAction(actionOutputRedo); toolBarOutput->addAction(actionOutputClear); widget->layout()->addWidget(toolBarOutput); searchFrame = new SearchReplaceFrame(widget); searchFrame->setVisible(false); widget->layout()->addWidget(searchFrame); toolButtonAddTab = new QToolButton(); toolButtonAddTab->setIcon(QIcon::fromTheme("list-add")); toolButtonAddTab->setToolTip(gettext("Add tab")); toolButtonAddTab->setAutoRaise(true); tabWidget = new QTabWidget(widget); tabWidget->setTabsClosable(true); tabWidget->setCornerWidget(toolButtonAddTab); widget->layout()->addWidget(tabWidget); } }; #endif // UI_OUTPUTEDITORTEXT_HH gImageReader-3.4.0/qt/src/Utils.cc000066400000000000000000000250231417507262200166640ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Utils.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "Utils.hh" #include "Config.hh" #include "MainWindow.hh" #include "SourceManager.hh" QString Utils::documentsFolder() { QString documentsFolder; documentsFolder = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); return (documentsFolder.isEmpty() || !QDir(documentsFolder).exists()) ? QDir::homePath() : documentsFolder; } QString Utils::makeOutputFilename(const QString& filename) { // Ensure directory exists QFileInfo finfo(filename); QDir dir = finfo.absoluteDir(); if(!dir.exists()) { dir = QDir(Utils::documentsFolder()); } // Generate non-existing file QString ext = finfo.completeSuffix(); QString base = finfo.baseName().replace(QRegularExpression(QString("_[0-9]+.%1$").arg(ext)), ""); QString newfilename = dir.absoluteFilePath(base + "." + ext); for(int i = 1; QFile(newfilename).exists(); ++i) { newfilename = dir.absoluteFilePath(QString("%1_%2.%3").arg(base).arg(i).arg(ext)); } return newfilename; } class BusyTaskThread : public QThread { public: BusyTaskThread(const std::function& f) : m_f(f), m_result(false) {} bool getResult() const { return m_result; } private: std::function m_f; bool m_result; void run() { m_result = m_f(); } }; class BusyEventFilter : public QObject { public: bool eventFilter(QObject* /*obj*/, QEvent* ev) { if(dynamic_cast(ev)) { QMouseEvent* mev = static_cast(ev); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QPoint evp = MAIN->m_progressCancelButton->mapFromGlobal(mev->globalPosition()).toPoint(); #else QPoint evp = MAIN->m_progressCancelButton->mapFromGlobal(mev->globalPos()); #endif return !QRect(QPoint(0, 0), MAIN->m_progressCancelButton->size()).contains(evp); } return dynamic_cast(ev); } }; bool Utils::busyTask(const std::function& f, const QString& msg) { MAIN->pushState(MainWindow::State::Busy, msg); QEventLoop evLoop; BusyTaskThread thread(f); QObject::connect(&thread, &QThread::finished, &evLoop, &QEventLoop::quit); thread.start(); BusyEventFilter filter; QApplication::instance()->installEventFilter(&filter); evLoop.exec(); QApplication::instance()->removeEventFilter(&filter); MAIN->popState(); return thread.getResult(); } void Utils::setSpinBlocked(QSpinBox* spin, int value) { spin->blockSignals(true); spin->setValue(value); spin->blockSignals(false); } void Utils::setSpinBlocked(QDoubleSpinBox* spin, double value) { spin->blockSignals(true); spin->setValue(value); spin->blockSignals(false); } bool Utils::handleSourceDragEvent(const QMimeData* mimeData) { if(mimeData->hasImage()) { return true; } QList formats = QImageReader::supportedImageFormats(); formats.append("pdf"); for(const QUrl& url : mimeData->urls()) { QFile file(url.toLocalFile()); if(!file.exists()) { continue; } for(const QByteArray& format : formats) { if(file.fileName().endsWith(format, Qt::CaseInsensitive)) { return true; } } } return false; } void Utils::handleSourceDropEvent(const QMimeData* mimeData) { if(mimeData->hasImage()) { MAIN->getSourceManager()->addSourceImage(qvariant_cast(mimeData->imageData())); return; } QList formats = QImageReader::supportedImageFormats(); formats.append("pdf"); formats.append("djvu"); for(const QUrl& url : mimeData->urls()) { QFile file(url.toLocalFile()); if(!file.exists()) { continue; } for(const QByteArray& format : formats) { if(file.fileName().endsWith(format, Qt::CaseInsensitive)) { MAIN->getSourceManager()->addSource(file.fileName()); break; } } } } QByteArray Utils::download(QUrl url, QString& messages, int timeout) { QNetworkAccessManager networkMgr; QNetworkReply* reply = nullptr; while(true) { QNetworkRequest req(url); req.setRawHeader("User-Agent", "Wget/1.13.4"); QSslConfiguration conf = req.sslConfiguration(); conf.setPeerVerifyMode(QSslSocket::VerifyNone); req.setSslConfiguration(conf); reply = networkMgr.get(req); QTimer timer; QEventLoop loop; QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); timer.setSingleShot(true); timer.start(timeout); loop.exec(); if(reply->isRunning()) { // Timeout reply->close(); delete reply; return QByteArray(); } QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if(redirectUrl.isValid() && url != redirectUrl) { delete reply; url = redirectUrl; } else { break; } } QByteArray result = reply->error() == QNetworkReply::NoError ? reply->readAll() : QByteArray(); messages = reply->error() == QNetworkReply::NoError ? QString() : reply->errorString(); delete reply; return result; } QString Utils::getSpellingLanguage(const QString& lang, const QString& defaultLanguage) { // If it is already a valid code, return it if(QRegularExpression("^[a-z]{2}(_[A-Z]{2})?$").match(lang).hasMatch()) { return lang; } // Treat the language as a tesseract lang spec and try to find a matching code Config::Lang langspec = {lang, "", ""}; if(!lang.isEmpty() && MAIN->getConfig()->searchLangSpec(langspec)) { // If default language starts with the returned code, return default language if(!defaultLanguage.isEmpty() && defaultLanguage.startsWith(langspec.code)) { return defaultLanguage; } // Return any one language culture code QStringList langCultures = MAIN->getConfig()->searchLangCultures(langspec.code); if(!langCultures.isEmpty()) { return langCultures.front(); } // Return incomplete code (only country) return langspec.code; } // Return default language if specified if(!defaultLanguage.isEmpty()) { return defaultLanguage; } // Use the application locale, if specified, otherwise fall back to en QString syslang = QLocale::system().name(); if(syslang.toLower() == "c" || syslang.isEmpty()) { return "en_US"; } return syslang; } Utils::TesseractHandle::TesseractHandle(const char* language) { // unfortunately tesseract creates deliberate aborts when an error occurs std::signal(SIGABRT, MainWindow::tesseractCrash); QByteArray current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); m_tess = new tesseract::TessBaseAPI(); int ret = m_tess->Init(nullptr, language); setlocale(LC_ALL, current.constData()); if(ret == -1) { delete m_tess; m_tess = nullptr; } } Utils::TesseractHandle::~TesseractHandle() { delete m_tess; std::signal(SIGABRT, MainWindow::signalHandler); } QDialogButtonBox::StandardButton Utils::messageBox(QWidget* parent, const QString& title, const QString& text, const QString& body, QMessageBox::Icon icon, QDialogButtonBox::StandardButtons buttons) { QDialog dialog(parent); dialog.setWindowTitle(title); QGridLayout* layout = new QGridLayout; dialog.setLayout(layout); QIcon ico; switch (icon) { case QMessageBox::Information: ico = dialog.style()->standardIcon(QStyle::SP_MessageBoxInformation, 0, &dialog); break; case QMessageBox::Warning: ico = dialog.style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, &dialog); break; case QMessageBox::Critical: ico = dialog.style()->standardIcon(QStyle::SP_MessageBoxCritical, 0, &dialog); break; case QMessageBox::Question: ico = dialog.style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, &dialog); default: break; } QLabel* iconLabel = new QLabel(); iconLabel->setPixmap(ico.pixmap(QSize(48, 48))); iconLabel->setFixedSize(48, 48); layout->addWidget(iconLabel, 0, 0, 2, 1, Qt::AlignTop); layout->addWidget(new QLabel(text), 0, 1); QPlainTextEdit* plainTextEdit = new QPlainTextEdit(); plainTextEdit->setReadOnly(true); plainTextEdit->setPlainText(body); layout->addWidget(plainTextEdit, 1, 1); QDialogButtonBox* bbox = new QDialogButtonBox(buttons); dialog.connect(bbox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); dialog.connect(bbox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); layout->addWidget(bbox, 2, 0, 1, 2); dialog.resize(480, dialog.height()); QDialogButtonBox::StandardButton clicked; dialog.connect(bbox, &QDialogButtonBox::clicked, bbox, [&](QAbstractButton * button) { clicked = bbox->standardButton(button); }); dialog.exec(); return clicked; } QString Utils::removeDiacritics(const QString& string) { static QString diacriticLetters_ = QString::fromUtf8("ŠŒŽšœžŸ¥µÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿſ"); static QStringList noDiacriticLetters_ = QStringList() << "S" << "OE" << "Z" << "s" << "oe" << "z" << "Y" << "Y" << "u" << "A" << "A" << "A" << "A" << "A" << "A" << "AE" << "C" << "E" << "E" << "E" << "E" << "I" << "I" << "I" << "I" << "D" << "N" << "O" << "O" << "O" << "O" << "O" << "O" << "U" << "U" << "U" << "U" << "Y" << "s" << "a" << "a" << "a" << "a" << "a" << "a" << "ae" << "c" << "e" << "e" << "e" << "e" << "i" << "i" << "i" << "i" << "o" << "n" << "o" << "o" << "o" << "o" << "o" << "o" << "u" << "u" << "u" << "u" << "y" << "y" << "s"; QString output = ""; for (int i = 0; i < string.length(); i++) { QChar c = string[i]; int dIndex = diacriticLetters_.indexOf(c); if (dIndex < 0) { output.append(c); } else { QString replacement = noDiacriticLetters_[dIndex]; output.append(replacement); } } return output; } gImageReader-3.4.0/qt/src/Utils.hh000066400000000000000000000054211417507262200166760ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * Utils.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef UTILS_HH #define UTILS_HH #include #include #include #include #include #include #include #include class QMimeData; class QSpinBox; class QDoubleSpinBox; class QUrl; namespace tesseract { class TessBaseAPI; } #ifdef MAKE_VERSION #define TESSERACT_MAKE_VERSION(maj,min,patch) MAKE_VERSION((maj),(min),(patch)) #else #define TESSERACT_MAKE_VERSION(maj,min,patch) ((maj) << 16 | (min) << 8 | (patch)) #endif namespace Utils { QString documentsFolder(); QString makeOutputFilename(const QString& filename); bool busyTask(const std::function& f, const QString& msg); void setSpinBlocked(QSpinBox* spin, int value); void setSpinBlocked(QDoubleSpinBox* spin, double value); bool handleSourceDragEvent(const QMimeData* mimeData); void handleSourceDropEvent(const QMimeData* mimeData); QByteArray download(QUrl url, QString& messages, int timeout = 60000); QString getSpellingLanguage(const QString& lang = QString(), const QString& defaultLanguage = QString()); class TesseractHandle { public: TesseractHandle(const char* language = nullptr); ~TesseractHandle(); tesseract::TessBaseAPI* get() const { return m_tess; } private: tesseract::TessBaseAPI* m_tess; }; QDialogButtonBox::StandardButton messageBox(QWidget* parent, const QString& title, const QString& text, const QString& body, QMessageBox::Icon icon, QDialogButtonBox::StandardButtons buttons); QString removeDiacritics(const QString& string); template class AsyncQueue { public: bool empty() { QMutexLocker locker(&m_mutex); return m_queue.isEmpty(); } void enqueue(const T& item) { QMutexLocker locker(&m_mutex); m_queue.enqueue(item); m_cond.wakeOne(); } T dequeue() { QMutexLocker locker(&m_mutex); if(m_queue.isEmpty()) { while(m_queue.isEmpty()) { m_cond.wait(&m_mutex); } } return m_queue.dequeue(); } private: QQueue m_queue; QMutex m_mutex; QWaitCondition m_cond; }; } #endif gImageReader-3.4.0/qt/src/common.hh000066400000000000000000000017161417507262200170710ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * common.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef COMMON_HH #define COMMON_HH #include #define _(x) QString(gettext(x)) class DataObject { public: virtual ~DataObject() = default; }; #endif gImageReader-3.4.0/qt/src/hocr/000077500000000000000000000000001417507262200162065ustar00rootroot00000000000000gImageReader-3.4.0/qt/src/hocr/DisplayerToolHOCR.cc000066400000000000000000000105151417507262200217650ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolHOCR.cc * Copyright (C) 2016-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "DisplayerToolHOCR.hh" #include "MainWindow.hh" #include "Recognizer.hh" #include #include DisplayerToolHOCR::DisplayerToolHOCR(Displayer* displayer, QObject* parent) : DisplayerTool(displayer, parent) { displayer->setCursor(Qt::ArrowCursor); MAIN->getRecognizer()->setRecognizeMode(_("Recognize")); } DisplayerToolHOCR::~DisplayerToolHOCR() { clearSelection(); } QList DisplayerToolHOCR::getOCRAreas() { return QList() << m_displayer->getImage(m_displayer->getSceneBoundingRect()); } void DisplayerToolHOCR::mousePressEvent(QMouseEvent* event) { m_pressed = true; if(event->button() == Qt::LeftButton && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { clearSelection(); m_selection = new DisplayerSelection(this, m_displayer->mapToSceneClamped(event->pos())); connect(m_selection, &DisplayerSelection::geometryChanged, this, &DisplayerToolHOCR::selectionChanged); m_displayer->scene()->addItem(m_selection); event->accept(); } } void DisplayerToolHOCR::mouseMoveEvent(QMouseEvent* event) { if(m_selection && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { QPointF p = m_displayer->mapToSceneClamped(event->pos()); m_selection->setPoint(p); m_displayer->ensureVisible(QRectF(p, p)); event->accept(); } } void DisplayerToolHOCR::mouseReleaseEvent(QMouseEvent* event) { // Don't do anything if the release event does not follow a press event... if(!m_pressed) { return; } m_pressed = false; if(m_selection && m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { if(m_selection->rect().width() < 5.0 || m_selection->rect().height() < 5.0) { clearSelection(); } else { QRect r = m_selection->rect().translated(-m_displayer->getSceneBoundingRect().toRect().topLeft()).toRect(); emit bboxDrawn(r, m_currentAction); } event->accept(); } else { QPoint p = m_displayer->mapToSceneClamped(event->pos()).toPoint(); emit positionPicked(p); } setAction(ACTION_NONE, false); } void DisplayerToolHOCR::setAction(Action action, bool clearSel) { if(action != m_currentAction) { emit actionChanged(action); } if(clearSel) { clearSelection(); } m_currentAction = action; if(m_currentAction >= ACTION_DRAW_GRAPHIC_RECT && m_currentAction <= ACTION_DRAW_WORD_RECT) { m_displayer->setCursor(Qt::CrossCursor); } else { m_displayer->setCursor(Qt::ArrowCursor); } } void DisplayerToolHOCR::setSelection(const QRect& rect, const QRect& minRect) { setAction(ACTION_NONE, false); QRect r = rect.translated(m_displayer->getSceneBoundingRect().toRect().topLeft()); QRect mr = minRect.translated(m_displayer->getSceneBoundingRect().toRect().topLeft()); if(!m_selection) { m_selection = new DisplayerSelection(this, r.topLeft()); connect(m_selection, &DisplayerSelection::geometryChanged, this, &DisplayerToolHOCR::selectionChanged); m_displayer->scene()->addItem(m_selection); } m_selection->setAnchorAndPoint(r.topLeft(), r.bottomRight()); m_selection->setMinimumRect(mr); m_displayer->ensureVisible(m_selection); } QImage DisplayerToolHOCR::getSelection(const QRect& rect) const { return m_displayer->getImage(rect.translated(m_displayer->getSceneBoundingRect().toRect().topLeft())); } void DisplayerToolHOCR::clearSelection() { delete m_selection; m_selection = nullptr; } void DisplayerToolHOCR::selectionChanged(QRectF rect) { QRect r = rect.translated(-m_displayer->getSceneBoundingRect().toRect().topLeft()).toRect(); emit bboxChanged(r); } gImageReader-3.4.0/qt/src/hocr/DisplayerToolHOCR.hh000066400000000000000000000043101417507262200217730ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * DisplayerToolHOCR.hh * Copyright (C) 2016-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef DISPLAYERTOOLHOCR_HH #define DISPLAYERTOOLHOCR_HH #include "Displayer.hh" class DisplayerToolHOCR : public DisplayerTool { Q_OBJECT public: enum Action {ACTION_NONE, ACTION_DRAW_GRAPHIC_RECT, ACTION_DRAW_CAREA_RECT, ACTION_DRAW_PAR_RECT, ACTION_DRAW_LINE_RECT, ACTION_DRAW_WORD_RECT}; DisplayerToolHOCR(Displayer* displayer, QObject* parent = 0); ~DisplayerToolHOCR(); QList getOCRAreas() override; void pageChanged() override { emit displayedSourceChanged(); reset(); } void resolutionChanged(double /*factor*/) override { reset(); } void rotationChanged(double /*delta*/) override { reset(); } void reset() override { setAction(ACTION_NONE, true); } void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void setAction(Action action, bool clearSel = true); void setSelection(const QRect& rect, const QRect& minRect); QImage getSelection(const QRect& rect) const; void clearSelection(); signals: void displayedSourceChanged(); void bboxDrawn(QRect rect, int action); void bboxChanged(QRect rect); void positionPicked(QPoint pos); void actionChanged(int action); private: DisplayerSelection* m_selection = nullptr; Action m_currentAction = ACTION_NONE; bool m_pressed = false; private slots: void selectionChanged(QRectF rect); }; #endif // DISPLAYERTOOLHOCR_HH gImageReader-3.4.0/qt/src/hocr/HOCRBatchExportDialog.cc000066400000000000000000000151211417507262200225340ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRBatchExportDialog.cc * Copyright (C) 2020-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "HOCRBatchExportDialog.hh" #include "ConfigSettings.hh" #include "FileTreeModel.hh" #include "HOCRDocument.hh" #include "HOCRPdfExporter.hh" #include "HOCRPdfExportWidget.hh" #include "HOCROdtExporter.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include "OutputEditorHOCR.hh" #include "Utils.hh" #include #include HOCRBatchExportDialog::HOCRBatchExportDialog(QWidget* parent) : QDialog(parent) { ui.setupUi(this); ui.comboBoxFormat->addItem(_("PDF"), ExportPdf); ui.comboBoxFormat->addItem(_("ODT"), ExportOdt); ui.comboBoxFormat->addItem(_("Plain text"), ExportTxt); ui.comboBoxFormat->setCurrentIndex(-1); m_sourceTreeModel = new FileTreeModel(this); m_outputTreeModel = new FileTreeModel(this); ui.treeViewInput->setModel(m_sourceTreeModel); ui.treeViewOutput->setModel(m_outputTreeModel); ui.treeViewInput->header()->hideSection(1); ui.treeViewOutput->header()->hideSection(1); ui.progressBar->hide(); ui.tabWidget->setTabEnabled(1, false); m_previewTimer.setSingleShot(true); MAIN->setOutputMode(MainWindow::OutputModeHOCR); connect(ui.toolButtonSourceFolder, &QToolButton::clicked, this, &HOCRBatchExportDialog::setSourceFolder); connect(ui.comboBoxFormat, qOverload(&QComboBox::currentIndexChanged), this, &HOCRBatchExportDialog::setExportFormat); connect(ui.spinBoxExportLevel, qOverload(&QSpinBox::valueChanged), this, &HOCRBatchExportDialog::updateOutputTree); connect(ui.buttonBox->button(QDialogButtonBox::Apply), &QAbstractButton::clicked, this, &HOCRBatchExportDialog::apply); connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &HOCRBatchExportDialog::reject); connect(&m_previewTimer, &QTimer::timeout, this, &HOCRBatchExportDialog::updateExportPreview); ADD_SETTING(ComboSetting("batchexportformat", ui.comboBoxFormat)); } void HOCRBatchExportDialog::setSourceFolder() { QString initialFolder = Utils::documentsFolder(); QString dir = QFileDialog::getExistingDirectory(MAIN, _("Select folder..."), initialFolder); if(dir.isEmpty()) { return; } ui.lineEditSourceFolder->setText(dir); m_sourceTreeModel->clear(); QDirIterator it(dir, QStringList() << "*.html", QDir::Files, QDirIterator::Subdirectories); while(it.hasNext()) { QString filename = it.next(); m_sourceTreeModel->insertFile(filename, nullptr); } ui.treeViewInput->expandAll(); updateOutputTree(); } void HOCRBatchExportDialog::setExportFormat() { updateOutputTree(); ExportMode mode = static_cast(ui.comboBoxFormat->currentData().toInt()); if(mode == ExportPdf) { if(!m_pdfExportWidget) { OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); m_pdfExportWidget = new HOCRPdfExportWidget(editor->getTool()); ui.tabOptions->layout()->addWidget(m_pdfExportWidget); } ui.tabWidget->setTabEnabled(1, true); } else { delete m_pdfExportWidget; m_pdfExportWidget = nullptr; ui.tabWidget->setTabEnabled(1, false); } } void HOCRBatchExportDialog::updateOutputTree() { m_previewTimer.stop(); m_outputTreeModel->clear(); m_outputMap.clear(); int exportLevel = ui.spinBoxExportLevel->value(); QString dir = ui.lineEditSourceFolder->text(); if(dir.isEmpty()) { return; } QString exportSuffix; ExportMode mode = static_cast(ui.comboBoxFormat->currentData().toInt()); switch(mode) { case ExportPdf: exportSuffix = ".pdf"; break; case ExportOdt: exportSuffix = ".pdf"; break; case ExportTxt: exportSuffix = ".txt"; break; } QStringList filenames; QDirIterator it(dir, QStringList() << "*.html", QDir::Files, QDirIterator::Subdirectories); int deepestlevel = 0; while(it.hasNext()) { QString filename = it.next(); filenames.append(filename); deepestlevel = std::max(int(QDir::cleanPath(QDir(dir).relativeFilePath(filename)).count('/')), deepestlevel); } int groupAboveDepth = std::max(0, deepestlevel - exportLevel); for (const QString& filename : filenames) { int level = QDir::cleanPath(QDir(dir).relativeFilePath(filename)).count('/'); QFileInfo finfo(filename); QString output = finfo.dir().absoluteFilePath(finfo.completeBaseName()) + exportSuffix; for (int i = level; i >= groupAboveDepth; --i) { output = QFileInfo(output).path() + exportSuffix; } m_outputMap[output].append(filename); } for(const QString& output : m_outputMap.keys()) { m_outputTreeModel->insertFile(output, nullptr); } ui.treeViewOutput->expandAll(); if(m_pdfExportWidget) { m_previewTimer.start(250); } } void HOCRBatchExportDialog::apply() { m_previewTimer.stop(); ui.progressBar->setRange(0, m_outputMap.size()); ui.progressBar->show(); HOCRExporter* exporter = nullptr; HOCRPdfExporter::PDFSettings settings; ExportMode mode = static_cast(ui.comboBoxFormat->currentData().toInt()); switch(mode) { case ExportPdf: exporter = new HOCRPdfExporter(); settings = m_pdfExportWidget->getPdfSettings(); break; case ExportOdt: exporter = new HOCROdtExporter(); break; case ExportTxt: exporter = new HOCRTextExporter(); break; } OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); for(auto it = m_outputMap.begin(), itEnd = m_outputMap.end(); it != itEnd; ++it) { editor->open(OutputEditorHOCR::InsertMode::Replace, it.value()); exporter->run(editor->getDocument(), it.key(), &settings); ui.progressBar->setValue(ui.progressBar->value() + 1); } delete exporter; ui.progressBar->hide(); } void HOCRBatchExportDialog::updateExportPreview() { OutputEditorHOCR* editor = static_cast(MAIN->getOutputEditor()); editor->open(OutputEditorHOCR::InsertMode::Replace, m_outputMap.first()); HOCRDocument* document = editor->getDocument(); editor->selectPage(0); m_pdfExportWidget->setPreviewPage(document->pageCount() > 0 ? document : nullptr, document->pageCount() > 0 ? document->page(0) : nullptr); } gImageReader-3.4.0/qt/src/hocr/HOCRBatchExportDialog.hh000066400000000000000000000031371417507262200225520ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRBatchExportDialog.hh * Copyright (C) 2020-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRBATCHEXPORTDIALOG_HH #define HOCRBATCHEXPORTDIALOG_HH #include #include #include "common.hh" #include "ui_HOCRBatchExportDialog.h" class FileTreeModel; class HOCRPdfExportWidget; class HOCRBatchExportDialog : public QDialog { Q_OBJECT public: HOCRBatchExportDialog(QWidget* parent = nullptr); private: enum ExportMode { ExportPdf, ExportOdt, ExportTxt }; Ui::BatchExportDialog ui; FileTreeModel* m_sourceTreeModel = nullptr; FileTreeModel* m_outputTreeModel = nullptr; QMap m_outputMap; HOCRPdfExportWidget* m_pdfExportWidget = nullptr; QTimer m_previewTimer; private slots: void apply(); void setSourceFolder(); void setExportFormat(); void updateExportPreview(); void updateOutputTree(); }; #endif // HOCRBATCHEXPORTDIALOG_HH gImageReader-3.4.0/qt/src/hocr/HOCRDocument.cc000066400000000000000000001072571417507262200207630ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRDocument.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include "common.hh" #include "HOCRDocument.hh" #include "HOCRSpellChecker.hh" #include "Utils.hh" HOCRDocument::HOCRDocument(QObject* parent) : QAbstractItemModel(parent) { m_spell = new HOCRSpellChecker(this); } HOCRDocument::~HOCRDocument() { qDeleteAll(m_pages); } void HOCRDocument::clear() { beginResetModel(); qDeleteAll(m_pages); m_pages.clear(); m_pageIdCounter = 0; endResetModel(); } void HOCRDocument::resetMisspelled(const QModelIndex& index) { if(hasChildren(index)) { for(int i = 0, n = rowCount(index); i < n; ++i) { resetMisspelled(this->index(i, 0, index)); } } else { mutableItemAtIndex(index)->setMisspelled(-1); emit dataChanged(index, index, {Qt::ForegroundRole}); } } void HOCRDocument::addSpellingActions(QMenu* menu, const QModelIndex& index) { QStringList suggestions; QString trimmedWord; bool valid = getItemSpellingSuggestions(index, trimmedWord, suggestions, 16); for(const QString& suggestion : suggestions) { menu->addAction(suggestion, menu, [this, suggestion, index] { setData(index, suggestion, Qt::EditRole); }); } if(!trimmedWord.isEmpty()) { if(suggestions.isEmpty()) { menu->addAction(_("No suggestions"))->setEnabled(false); } if(!valid) { menu->addSeparator(); menu->addAction(_("Add to dictionary"), menu, [this, trimmedWord, index] { m_spell->addWordToDictionary(trimmedWord); resetMisspelled(index); }); menu->addAction(_("Ignore word"), menu, [this, trimmedWord, index] { m_spell->ignoreWord(trimmedWord); resetMisspelled(index); }); } } } void HOCRDocument::addWordToDictionary(const QModelIndex& index) { const HOCRItem* item = itemAtIndex(index); if(item && item->isMisspelled()) { QString trimmedWord = HOCRItem::trimmedWord(item->text()); m_spell->addWordToDictionary(trimmedWord); resetMisspelled(index); } } QString HOCRDocument::toHTML() const { QString html = "\n"; for(const HOCRPage* page : m_pages) { html += page->toHtml(1); } html += "\n"; return html; } QModelIndex HOCRDocument::insertPage(int beforeIdx, const QDomElement& pageElement, bool cleanGraphics, const QString& sourceBasePath) { beginInsertRows(QModelIndex(), beforeIdx, beforeIdx); m_pages.insert(beforeIdx, new HOCRPage(pageElement, ++m_pageIdCounter, m_defaultLanguage, cleanGraphics, beforeIdx)); if(!sourceBasePath.isEmpty()) { m_pages[beforeIdx]->convertSourcePath(sourceBasePath, true); } for(int i = beforeIdx + 1; i < m_pages.size(); ++i) { m_pages[i]->m_index = i; } endInsertRows(); emit dataChanged(index(0, 0), index(m_pages.size() - 1, 0), {Qt::DisplayRole}); return index(beforeIdx, 0); } QModelIndex HOCRDocument::indexAtItem(const HOCRItem* item) const { QList parents; HOCRItem* parent = item->parent(); while(parent) { parents.prepend(parent); parent = parent->parent(); } QModelIndex idx; for(HOCRItem* parent : parents) { idx = index(parent->index(), 0, idx); } return index(item->index(), 0, idx); } bool HOCRDocument::editItemAttribute(const QModelIndex& index, const QString& name, const QString& value, const QString& attrItemClass) { HOCRItem* item = mutableItemAtIndex(index); if(!item) { return false; } item->setAttribute(name, value, attrItemClass); if(name == "title:x_wconf") { QModelIndex colIdx = index.sibling(index.row(), 1); emit dataChanged(colIdx, colIdx, {Qt::DisplayRole}); } if(name == "lang") { resetMisspelled(index); } emit itemAttributeChanged(index, name, value); if(name == "title:bbox") { recomputeBBoxes(item->parent()); } return true; } // Might be more logical to accept oldParent and oldRow as parameters rather than itemIndex // (since we need them anyway), if all our callers are likely to know them. Swap does; drag&drop might not. QModelIndex HOCRDocument::moveItem(const QModelIndex& itemIndex, const QModelIndex& newParent, int newRow) { HOCRItem* item = mutableItemAtIndex(itemIndex); HOCRItem* parentItem = mutableItemAtIndex(newParent); if(!item || (!parentItem && item->itemClass() != "ocr_page")) { return QModelIndex(); } QModelIndex ancestor = newParent; while(ancestor.isValid()) { if(ancestor == itemIndex) { return QModelIndex(); } ancestor = ancestor.parent(); } int oldRow = itemIndex.row(); QModelIndex oldParent = itemIndex.parent(); if(oldParent == newParent && oldRow < newRow) { --newRow; } beginRemoveRows(oldParent, oldRow, oldRow); takeItem(item); endRemoveRows(); recomputeBBoxes(mutableItemAtIndex(oldParent)); beginInsertRows(newParent, newRow, newRow); insertItem(parentItem, item, newRow); endInsertRows(); recomputeBBoxes(parentItem); return itemIndex; } QModelIndex HOCRDocument::swapItems(const QModelIndex& parent, int firstRow, int secondRow) { moveItem(index(firstRow, 0, parent), parent, secondRow); moveItem(index(secondRow, 0, parent), parent, firstRow); return index(firstRow, 0, parent); } QModelIndex HOCRDocument::mergeItems(const QModelIndex& parent, int startRow, int endRow) { if(endRow - startRow <= 0) { return QModelIndex(); } QModelIndex targetIndex = index(startRow, 0, parent); HOCRItem* targetItem = mutableItemAtIndex(targetIndex); if(!targetItem || targetItem->itemClass() == "ocr_page") { return QModelIndex(); } QRect bbox = targetItem->bbox(); if(targetItem->itemClass() == "ocrx_word") { // Merge word items: join text, merge bounding boxes QString text = targetItem->text(); beginRemoveRows(parent, startRow + 1, endRow); for(int row = ++startRow; row <= endRow; ++row) { HOCRItem* item = mutableItemAtIndex(index(startRow, 0, parent)); Q_ASSERT(item); text += item->text(); bbox = bbox.united(item->bbox()); deleteItem(item); } endRemoveRows(); targetItem->setText(text); for(QModelIndex changedIndex : recheckItemSpelling(targetIndex)) { emit dataChanged(changedIndex, changedIndex, {Qt::DisplayRole, Qt::ForegroundRole}); } } else { // Merge other items: merge dom trees and bounding boxes QVector moveChilds; beginRemoveRows(parent, startRow + 1, endRow); for(int row = ++startRow; row <= endRow; ++row) { HOCRItem* item = mutableItemAtIndex(index(startRow, 0, parent)); Q_ASSERT(item); moveChilds.append(item->takeChildren()); bbox = bbox.united(item->bbox()); deleteItem(item); } endRemoveRows(); int pos = targetItem->children().size(); beginInsertRows(targetIndex, pos, pos + moveChilds.size() - 1); for(HOCRItem* child : moveChilds) { targetItem->addChild(child); } endInsertRows(); } QString bboxstr = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); targetItem->setAttribute("title:bbox", bboxstr); emit itemAttributeChanged(targetIndex, "title:bbox", bboxstr); return targetIndex; } QModelIndex HOCRDocument::splitItem(const QModelIndex& itemIndex, int startRow, int endRow) { if(endRow - startRow < 0) { return QModelIndex(); } HOCRItem* item = mutableItemAtIndex(itemIndex); if(!item) { return QModelIndex(); } QString itemClass = item->itemClass(); QDomDocument doc; QDomElement newElement; if(itemClass == "ocr_carea") { newElement = doc.createElement("div"); } else if(itemClass == "ocr_par") { newElement = doc.createElement("p"); } else if(itemClass == "ocr_line") { newElement = doc.createElement("span"); } else { return QModelIndex(); } newElement.setAttribute("class", itemClass); newElement.setAttribute("title", HOCRItem::serializeAttrGroup(item->getTitleAttributes())); HOCRItem* newItem = new HOCRItem(newElement, item->page(), item->parent(), item->index() + 1); beginInsertRows(itemIndex.parent(), item->index() + 1, item->index() + 1); insertItem(item->parent(), newItem, item->index() + 1); endInsertRows(); QModelIndex newIndex = itemIndex.sibling(itemIndex.row() + 1, 0); for(int row = 0; row <= (endRow - startRow); ++row) { QModelIndex childIndex = index(startRow, 0, itemIndex); HOCRItem* child = mutableItemAtIndex(childIndex); Q_ASSERT(child); moveItem(childIndex, newIndex, row); } return newIndex; } QModelIndex HOCRDocument::splitItemText(const QModelIndex& itemIndex, int pos) { HOCRItem* item = mutableItemAtIndex(itemIndex); if(!item || item->itemClass() != "ocrx_word") { return QModelIndex(); } // Don't split if it would create empty words if(pos == 0 || pos == item->text().length()) { return itemIndex; } // Compute new bounding box using font metrics with default font QFontMetrics metrics((QFont())); double fraction = metrics.horizontalAdvance(item->text().left(pos)) / double(metrics.horizontalAdvance(item->text())); QRect bbox = item->bbox(); QRect leftBBox = bbox; leftBBox.setWidth(bbox.width() * fraction); QRect rightBBox = bbox; rightBBox.setLeft(bbox.left() + bbox.width() * fraction); QDomDocument doc; QDomElement newElement = doc.createElement("span"); newElement.appendChild(doc.createTextNode(item->text().mid(pos))); newElement.setAttribute("class", "ocrx_word"); QMap attrs = item->getTitleAttributes(); attrs["bbox"] = QString("%1 %2 %3 %4").arg(rightBBox.left()).arg(rightBBox.top()).arg(rightBBox.right()).arg(rightBBox.bottom()); newElement.setAttribute("title", HOCRItem::serializeAttrGroup(attrs)); newElement.setAttribute("lang", item->lang()); HOCRItem* newItem = new HOCRItem(newElement, item->page(), item->parent(), item->index() + 1); beginInsertRows(itemIndex.parent(), item->index() + 1, item->index() + 1); insertItem(item->parent(), newItem, item->index() + 1); endInsertRows(); setData(itemIndex, item->text().left(pos), Qt::EditRole); editItemAttribute(itemIndex, "title:bbox", QString("%1 %2 %3 %4").arg(leftBBox.left()).arg(leftBBox.top()).arg(leftBBox.right()).arg(leftBBox.bottom())); return itemIndex.sibling(itemIndex.row() + 1, 0); } QModelIndex HOCRDocument::mergeItemText(const QModelIndex& itemIndex, bool mergeNext) { HOCRItem* item = mutableItemAtIndex(itemIndex); if(!item || item->itemClass() != "ocrx_word") { return QModelIndex(); } if((!mergeNext && item->index() == 0) || (mergeNext && item->index() == item->parent()->children().size() - 1)) { return QModelIndex(); } int offset = mergeNext ? 1 : -1; HOCRItem* otherItem = item->parent()->children()[item->index() + offset]; QString newText = mergeNext ? item->text() + otherItem->text() : otherItem->text() + item->text(); QRect newBbox = item->bbox().united(otherItem->bbox()); setData(itemIndex, newText, Qt::EditRole); editItemAttribute(itemIndex, "title:bbox", QString("%1 %2 %3 %4").arg(newBbox.left()).arg(newBbox.top()).arg(newBbox.right()).arg(newBbox.bottom())); beginRemoveRows(itemIndex.parent(), itemIndex.row() + offset, itemIndex.row() + offset); deleteItem(otherItem); endRemoveRows(); return itemIndex; } QModelIndex HOCRDocument::addItem(const QModelIndex& parent, const QDomElement& element) { HOCRItem* parentItem = mutableItemAtIndex(parent); if(!parentItem) { return QModelIndex(); } HOCRItem* item = new HOCRItem(element, parentItem->page(), parentItem); int pos = parentItem->children().size(); beginInsertRows(parent, pos, pos); parentItem->addChild(item); recomputeBBoxes(parentItem); endInsertRows(); return index(pos, 0, parent); } bool HOCRDocument::removeItem(const QModelIndex& index) { HOCRItem* item = mutableItemAtIndex(index); if(!item) { return false; } HOCRItem* parentItem = item->parent(); beginRemoveRows(index.parent(), index.row(), index.row()); deleteItem(item); endRemoveRows(); recomputeBBoxes(parentItem); return true; } QModelIndex HOCRDocument::nextIndex(const QModelIndex& current) const { QModelIndex idx = current; // If the current index is invalid return first index if(!idx.isValid()) { return index(0, 0); } // If item has children, return first child if(rowCount(idx) > 0) { return index(0, 0, idx); } // Return next possible sibling QModelIndex next = idx.sibling(idx.row() + 1, 0); while(idx.isValid() && !next.isValid()) { idx = idx.parent(); next = idx.sibling(idx.row() + 1, 0); } if(!idx.isValid()) { // Wrap around return index(0, 0); } return next; } QModelIndex HOCRDocument::prevIndex(const QModelIndex& current) const { QModelIndex idx = current; // If the current index is invalid return last index if(!idx.isValid()) { return index(rowCount() - 1, 0); } // Return last possible leaf of previous sibling, if any, or parent if(idx.row() > 0) { idx = idx.sibling(idx.row() - 1, 0); } else { if(idx.parent().isValid()) { return idx.parent(); } // Wrap around idx = index(rowCount() - 1, 0); } while(rowCount(idx) > 0) { idx = index(rowCount(idx) - 1, 0, idx); } return idx; } QModelIndex HOCRDocument::prevOrNextIndex(bool next, const QModelIndex& current, const QString& ocrClass, bool misspelled, bool lowconf) const { QModelIndex start = current; if(!start.isValid()) { start = index(0, 0); } QModelIndex curr = next ? nextIndex(start) : prevIndex(start); while(curr != start) { const HOCRItem* item = itemAtIndex(curr); if(item && item->itemClass() == ocrClass && (!misspelled || indexIsMisspelledWord(curr)) && (!lowconf || item->getTitleAttributes()["x_wconf"].toInt() < 90)) { break; } curr = next ? nextIndex(curr) : prevIndex(curr); }; return curr; } bool HOCRDocument::indexIsMisspelledWord(const QModelIndex& index) const { const HOCRItem* item = itemAtIndex(index); if(item->isMisspelled() == -1) { recheckItemSpelling(index); } return item->isMisspelled() == 1; } QList HOCRDocument::recheckItemSpelling(const QModelIndex& index) const { HOCRItem* item = mutableItemAtIndex(index); if(item->itemClass() != "ocrx_word") { return {}; } QString prefix, suffix, trimmed = HOCRItem::trimmedWord(item->text(), &prefix, &suffix); if(trimmed.isEmpty()) { item->setMisspelled(false); return {index}; } QString lang = item->spellingLang(); if(lang.isEmpty() || (m_spell->getLanguage() != lang && !(m_spell->setLanguage(lang)))) { item->setMisspelled(false); return {index}; } // check word, including (if requested) setting suggestions; handle hyphenated phrases correctly if(m_spell->checkSpelling(trimmed)) { item->setMisspelled(false); return {index}; } item->setMisspelled(true); // handle some hyphenated words // don't bother with words not broken over sibling text lines (ie interrupted by other blocks), it's human hard // don't bother with words broken over three or more lines, it's implausible and this treatment is ^ necessarily incomplete HOCRItem* line = item->parent(); if(!line) { return {index}; } HOCRItem* paragraph = line->parent(); if(!paragraph) { return {index}; } int lineIdx = line->index(); const QVector& paragraphLines = paragraph->children(); if(item == line->children().front() && lineIdx > 0) { HOCRItem* prevLine = paragraphLines.at(lineIdx - 1); if(!prevLine || prevLine->children().isEmpty()) { return {index}; } HOCRItem* prevWord = prevLine->children().back(); if(!prevWord || prevWord->itemClass() != "ocrx_word") { return {index}; } QString prevText = prevWord->text(); if(!prevText.endsWith("-")) { return {index}; } // don't bother with (reassembled) suggestions for broken words since we can't re-break them bool valid = m_spell->checkSpelling(HOCRItem::trimmedWord(prevText) + trimmed); item->setMisspelled(!valid); prevWord->setMisspelled(!valid); return {index, indexAtItem(prevWord)}; } else if(item == line->children().back() && lineIdx + 1 < paragraphLines.size() && item->text().endsWith("-")) { HOCRItem* nextLine = paragraphLines.at(lineIdx + 1); if(!nextLine || nextLine->children().isEmpty()) { return {index}; } HOCRItem* nextWord = nextLine->children().front(); if(!nextWord || nextWord->itemClass() != "ocrx_word") { return {index}; } bool valid = m_spell->checkSpelling(trimmed + HOCRItem::trimmedWord(nextWord->text())); item->setMisspelled(!valid); nextWord->setMisspelled(!valid); return {index, indexAtItem(nextWord)}; } return {index}; } bool HOCRDocument::getItemSpellingSuggestions(const QModelIndex& index, QString& trimmedWord, QStringList& suggestions, int limit) const { const HOCRItem* item = itemAtIndex(index); if(item->itemClass() != "ocrx_word") { return true; } QString prefix, suffix; trimmedWord = HOCRItem::trimmedWord(item->text(), &prefix, &suffix); if(trimmedWord.isEmpty()) { return true; } QString lang = item->spellingLang(); if(m_spell->getLanguage() != lang && !(m_spell->setLanguage(lang))) { return true; } bool valid = m_spell->checkSpelling(trimmedWord, &suggestions, limit); for(int i = 0, n = suggestions.size(); i < n; ++i) { suggestions[i] = prefix + suggestions[i] + suffix; } return valid; } bool HOCRDocument::referencesSource(const QString& filename) const { for(const HOCRPage* page : m_pages) { if(page->sourceFile() == filename) { return true; } } return false; } QModelIndex HOCRDocument::searchPage(const QString& filename, int pageNr) const { for(int iPage = 0, nPages = m_pages.size(); iPage < nPages; ++iPage) { const HOCRPage* page = m_pages[iPage]; if(page->sourceFile() == filename && page->pageNr() == pageNr) { return index(iPage, 0); } } return QModelIndex(); } QModelIndex HOCRDocument::searchAtCanvasPos(const QModelIndex& pageIndex, const QPoint& pos) const { QModelIndex idx = pageIndex; if(!idx.isValid()) { return QModelIndex(); } const HOCRItem* item = itemAtIndex(idx); while(true) { int iChild = 0, nChildren = item->children().size(); for(; iChild < nChildren; ++iChild) { const HOCRItem* childItem = item->children()[iChild]; if(childItem->bbox().contains(pos)) { item = childItem; idx = index(iChild, 0, idx); break; } } if(iChild == nChildren) { break; } } return idx; } void HOCRDocument::convertSourcePaths(const QString& basepath, bool absolute) { for(HOCRPage* page : m_pages) { page->convertSourcePath(basepath, absolute); } } QVariant HOCRDocument::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } HOCRItem* item = mutableItemAtIndex(index); if(index.column() == 0) { switch (role) { case Qt::DisplayRole: case Qt::EditRole: return displayRoleForItem(item); case Qt::DecorationRole: return decorationRoleForItem(item); case Qt::ToolTipRole: return tooltipRoleForItem(item); case Qt::ForegroundRole: { bool enabled = item->isEnabled(); const HOCRItem* parent = item->parent(); while(enabled && parent) { enabled = parent->isEnabled(); parent = parent->parent(); } if(enabled) { return indexIsMisspelledWord(index) ? QVariant(QColor(Qt::red)) : QVariant(); } else { return indexIsMisspelledWord(index) ? QVariant(QColor(208, 80, 82)) : QVariant(QColor(Qt::gray)); } } case Qt::CheckStateRole: return item->isEnabled() ? Qt::Checked : Qt::Unchecked; default: break; } } else if(index.column() == 1) { if(role == Qt::DisplayRole && item->itemClass() == "ocrx_word") { return item->getTitleAttributes()["x_wconf"]; } } return QVariant(); } bool HOCRDocument::setData(const QModelIndex& index, const QVariant& value, int role) { if(!index.isValid()) { return false; } HOCRItem* item = mutableItemAtIndex(index); if(role == Qt::EditRole && item->itemClass() == "ocrx_word") { item->setText(value.toString()); for(QModelIndex changedIndex : recheckItemSpelling(index)) { emit dataChanged(changedIndex, changedIndex, {Qt::DisplayRole, Qt::ForegroundRole}); } return true; } else if(role == Qt::CheckStateRole) { item->setEnabled(value == Qt::Checked); // Get leaf QModelIndex leaf = index; while(hasChildren(leaf)) { leaf = this->index(rowCount(leaf) - 1, 0, leaf); } emit dataChanged(index, leaf, {Qt::CheckStateRole}); return true; } return false; } void HOCRDocument::recomputeBBoxes(HOCRItem* item) { // Update parent bboxes (except page) while(item && item->parent()) { QRect bbox; for(const HOCRItem* child : item->children()) { bbox = bbox.united(child->bbox()); } QString bboxstr = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); item->setAttribute("title:bbox", bboxstr); item = item->parent(); } } Qt::ItemFlags HOCRDocument::flags(const QModelIndex& index) const { if (!index.isValid()) { return Qt::ItemFlags(); } HOCRItem* item = mutableItemAtIndex(index); return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | (item->itemClass() == "ocrx_word" && index.column() == 0 ? Qt::ItemIsEditable : Qt::NoItemFlags); } QModelIndex HOCRDocument::index(int row, int column, const QModelIndex& parent) const { if (!hasIndex(row, column, parent)) { return QModelIndex(); } HOCRItem* childItem = nullptr; if(!parent.isValid()) { childItem = m_pages.value(row); } else { HOCRItem* parentItem = mutableItemAtIndex(parent); childItem = parentItem->children().value(row); } return childItem ? createIndex(row, column, childItem) : QModelIndex(); } QModelIndex HOCRDocument::parent(const QModelIndex& child) const { if (!child.isValid()) { return QModelIndex(); } HOCRItem* item = mutableItemAtIndex(child)->parent(); if(!item) { return QModelIndex(); } int row = item->index(); return row >= 0 ? createIndex(row, 0, item) : QModelIndex(); } int HOCRDocument::rowCount(const QModelIndex& parent) const { if (parent.column() > 0) { return 0; } return !parent.isValid() ? m_pages.size() : itemAtIndex(parent)->children().size(); } int HOCRDocument::columnCount(const QModelIndex& /*parent*/) const { return 2; } QString HOCRDocument::displayRoleForItem(const HOCRItem* item) const { QString itemClass = item->itemClass(); if(itemClass == "ocr_page") { const HOCRPage* page = static_cast(item); return QString("%1 (%2 %3/%4)").arg(page->title()).arg(_("Page")).arg(item->index() + 1).arg(m_pages.size()); } else if(itemClass == "ocr_carea") { return _("Text block"); } else if(itemClass == "ocr_par") { return _("Paragraph"); } else if(itemClass == "ocr_line") { return _("Textline"); } else if(itemClass == "ocrx_word") { return item->text(); } else if(itemClass == "ocr_graphic") { return _("Graphic"); } return ""; } QIcon HOCRDocument::decorationRoleForItem(const HOCRItem* item) const { QString itemClass = item->itemClass(); if(itemClass == "ocr_page") { return QIcon(":/icons/item_page"); } else if(itemClass == "ocr_carea") { return QIcon(":/icons/item_block"); } else if(itemClass == "ocr_par") { return QIcon(":/icons/item_par"); } else if(itemClass == "ocr_line") { return QIcon(":/icons/item_line"); } else if(itemClass == "ocrx_word") { return QIcon(":/icons/item_word"); } else if(itemClass == "ocr_graphic") { return QIcon(":/icons/item_halftone"); } return QIcon(); } QString HOCRDocument::tooltipRoleForItem(const HOCRItem* item) const { QString itemClass = item->itemClass(); if(itemClass == "ocr_page") { const HOCRPage* page = static_cast(item); return QString("%1 (%2 %3/%4)").arg(page->title()).arg(_("Page")).arg(item->index() + 1).arg(m_pages.size()); } return QString(); } void HOCRDocument::insertItem(HOCRItem* parent, HOCRItem* item, int i) { if(parent) { parent->insertChild(item, i); } else if(HOCRPage* page = dynamic_cast(item)) { page->m_index = i; m_pages.insert(i++, page); for(int n = m_pages.size(); i < n; ++i) { m_pages[i]->m_index = i; } emit dataChanged(index(page->index(), 0), index(m_pages.size() - 1, 0), {Qt::DisplayRole}); } } void HOCRDocument::deleteItem(HOCRItem* item) { takeItem(item); delete item; } void HOCRDocument::takeItem(HOCRItem* item) { if(item->parent()) { item->parent()->takeChild(item); } else if(HOCRPage* page = dynamic_cast(item)) { int i = page->index(); m_pages.remove(i); for(int n = m_pages.size(); i < n; ++i) { m_pages[i]->m_index = i; } emit dataChanged(index(page->index(), 0), index(m_pages.size() - 1, 0), {Qt::DisplayRole}); } } /////////////////////////////////////////////////////////////////////////////// QMap HOCRItem::s_langCache = QMap(); QMap HOCRItem::deserializeAttrGroup(const QString& string) { QMap attrs; for(const QString& attr : string.split(QRegularExpression("\\s*;\\s*"))) { int splitPos = attr.indexOf(QRegularExpression("\\s+")); attrs.insert(attr.left(splitPos), splitPos > 0 ? attr.mid(splitPos + 1) : ""); } return attrs; } QString HOCRItem::serializeAttrGroup(const QMap& attrs) { QStringList list; for(auto it = attrs.begin(), itEnd = attrs.end(); it != itEnd; ++it) { list.append(QString("%1 %2").arg(it.key(), it.value())); } return list.join("; "); } QString HOCRItem::trimmedWord(const QString& word, QString* prefix, QString* suffix) { QString noaccentWord = Utils::removeDiacritics(word); // correctly trim words with apostrophes or hyphens within them, phrases with dashes, initialisms/acronyms, and numeric citations QRegularExpression wordRe("^(\\W*)(\\w?|\\w(\\w|[-\u2013\u2014'’])*\\w|(\\w+\\.){2,})([\\W\u00b2\u00b3\u00b9\u2070\\-\u207e]*)$"); QRegularExpressionMatch match; if((match = wordRe.match(noaccentWord)).hasMatch()) { if(prefix) { *prefix = match.captured(1); } if(suffix) { *suffix = match.captured(5); } return word.mid(match.captured(1).length(), word.length() - match.captured(1).length() - match.captured(5).length()); } return word; } HOCRItem::HOCRItem(const QDomElement& element, HOCRPage* page, HOCRItem* parent, int index) : m_pageItem(page), m_parentItem(parent), m_index(index) { // Read attrs QDomNamedNodeMap attributes = element.attributes(); for(int i = 0, n = attributes.size(); i < n; ++i) { QString attrName = attributes.item(i).nodeName(); if(attrName == "title") { m_titleAttrs = deserializeAttrGroup(attributes.item(i).nodeValue()); } else { m_attrs[attrName] = attributes.item(i).nodeValue(); } } // Map ocr_header/ocr_caption/ocr_textfloat to ocr_line if(m_attrs["class"] == "ocr_header" || m_attrs["class"] == "ocr_caption" || m_attrs["class"] == "ocr_textfloat") { m_attrs["class"] = "ocr_line"; } // Adjust item id based on pageId if(parent) { QString idClass = itemClass().mid(itemClass().indexOf("_") + 1); int counter = page->m_idCounters.value(idClass, 0) + 1; page->m_idCounters[idClass] = counter; QString newId = QString("%1_%2_%3").arg(idClass).arg(page->pageId()).arg(counter); m_attrs["id"] = newId; } // Parse item bbox QStringList bbox = m_titleAttrs["bbox"].split(QRegularExpression("\\s+")); if(bbox.size() == 4) { m_bbox.setCoords(bbox[0].toInt(), bbox[1].toInt(), bbox[2].toInt(), bbox[3].toInt()); } if(itemClass() == "ocrx_word") { m_text = element.text(); m_bold = !element.elementsByTagName("strong").isEmpty(); m_italic = !element.elementsByTagName("em").isEmpty(); } else if(itemClass() == "ocr_line") { // Depending on the locale, tesseract can use a comma instead of a dot as decimal separator in the baseline... m_titleAttrs["baseline"] = m_titleAttrs["baseline"].replace(",", "."); m_misspelled = false; } else { m_misspelled = false; } } HOCRItem::~HOCRItem() { qDeleteAll(m_childItems); } void HOCRItem::addChild(HOCRItem* child) { m_childItems.append(child); child->m_parentItem = this; child->m_pageItem = m_pageItem; child->m_index = m_childItems.size() - 1; } void HOCRItem::insertChild(HOCRItem* child, int i) { m_childItems.insert(i, child); child->m_parentItem = this; child->m_pageItem = m_pageItem; child->m_index = i++; for(int n = m_childItems.size(); i < n; ++i) { m_childItems[i]->m_index = i; } } void HOCRItem::removeChild(HOCRItem* child) { takeChild(child); delete child; } void HOCRItem::takeChild(HOCRItem* child) { if(this != child->parent()) { return; } int i = child->index(); m_childItems.remove(i); for(int n = m_childItems.size(); i < n; ++i) { m_childItems[i]->m_index = i; } } QVector HOCRItem::takeChildren() { QVector children(m_childItems); m_childItems.clear(); return children; } QMap HOCRItem::getAllAttributes() const { QMap attrValues; for(auto it = m_attrs.begin(), itEnd = m_attrs.end(); it != itEnd; ++it) { attrValues.insert(it.key(), it.value()); } for(auto it = m_titleAttrs.begin(), itEnd = m_titleAttrs.end(); it != itEnd; ++it) { attrValues.insert(QString("title:%1").arg(it.key()), it.value()); } if(itemClass() == "ocrx_word") { if(!attrValues.contains("title:x_font")) { attrValues.insert("title:x_font", ""); } attrValues.insert("bold", fontBold() ? "1" : "0"); attrValues.insert("italic", fontItalic() ? "1" : "0"); } return attrValues; } QMap HOCRItem::getAttributes(const QList& names = QList()) const { QMap attrValues; for(const QString& attrName : names) { QStringList parts = attrName.split(":"); if(parts.size() > 1) { Q_ASSERT(parts[0] == "title"); attrValues.insert(attrName, m_titleAttrs.value(parts[1])); } else if(attrName == "bold") { attrValues.insert(attrName, fontBold() ? "1" : "0"); } else if(attrName == "italic") { attrValues.insert(attrName, fontItalic() ? "1" : "0"); } else { attrValues.insert(attrName, m_attrs[attrName]); } } return attrValues; } // ocr_class:attr_key:attr_values void HOCRItem::getPropagatableAttributes(QMap>>& occurrences) const { static QMap s_propagatableAttributes = { {"ocr_line", {"title:baseline"}}, {"ocrx_word", {"lang", "title:x_fsize", "title:x_font", "bold", "italic"}} }; QString childClass = m_childItems.isEmpty() ? "" : m_childItems.front()->itemClass(); auto it = s_propagatableAttributes.find(childClass); if(it != s_propagatableAttributes.end()) { for(HOCRItem* child : m_childItems) { QMap attrs = child->getAttributes(it.value()); for(auto attrIt = attrs.begin(), attrItEnd = attrs.end(); attrIt != attrItEnd; ++attrIt) { occurrences[childClass][attrIt.key()].insert(attrIt.value()); } } } if(childClass != "ocrx_word") { for(HOCRItem* child : m_childItems) { child->getPropagatableAttributes(occurrences); } } } void HOCRItem::setAttribute(const QString& name, const QString& value, const QString& attrItemClass) { if(!attrItemClass.isEmpty() && itemClass() != attrItemClass) { for(HOCRItem* child : m_childItems) { child->setAttribute(name, value, attrItemClass); } return; } QStringList parts = name.split(":"); if(name == "bold") { m_bold = value == "1"; } else if(name == "italic") { m_italic = value == "1"; } else if(parts.size() < 2) { m_attrs[name] = value; } else { Q_ASSERT(parts[0] == "title"); m_titleAttrs[parts[1]] = value; if(name == "title:bbox") { QStringList bbox = value.split(QRegularExpression("\\s+")); Q_ASSERT(bbox.size() == 4); m_bbox.setCoords(bbox[0].toInt(), bbox[1].toInt(), bbox[2].toInt(), bbox[3].toInt()); } } } QString HOCRItem::toHtml(int indent) const { QString cls = itemClass(); QString tag; if(cls == "ocr_page" || cls == "ocr_carea" || cls == "ocr_graphic") { tag = "div"; } else if(cls == "ocr_par") { tag = "p"; } else { tag = "span"; } QString html = QString(indent, ' ') + "<" + tag; html += QString(" title=\"%1\"").arg(serializeAttrGroup(m_titleAttrs)); for(auto it = m_attrs.begin(), itEnd = m_attrs.end(); it != itEnd; ++it) { html += QString(" %1=\"%2\"").arg(it.key(), it.value()); } html += ">"; if(cls == "ocrx_word") { if(m_bold) { html += ""; } if(m_italic) { html += ""; } html += m_text.toHtmlEscaped(); if(m_italic) { html += ""; } if(m_bold) { html += ""; } } else { html += "\n"; for(const HOCRItem* child : m_childItems) { html += child->toHtml(indent + 1); } html += QString(indent, ' '); } html += "\n"; return html; } QPair HOCRItem::baseLine() const { static const QRegularExpression baseLineRx = QRegularExpression("([+-]?\\d+\\.?\\d*)\\s+([+-]?\\d+\\.?\\d*)"); QRegularExpressionMatch match; if((match = baseLineRx.match(m_titleAttrs["baseline"])).hasMatch()) { return qMakePair(match.captured(1).toDouble(), match.captured(2).toDouble()); } return qMakePair(0.0, 0.0); } bool HOCRItem::parseChildren(const QDomElement& element, QString language, const QString& defaultLanguage) { // Determine item language (inherit from parent if not specified) QString elemLang = element.attribute("lang"); if(!elemLang.isEmpty()) { auto it = s_langCache.find(elemLang); if(it == s_langCache.end()) { it = s_langCache.insert(elemLang, Utils::getSpellingLanguage(elemLang, defaultLanguage)); } m_attrs.remove("lang"); language = it.value(); } if(itemClass() == "ocrx_word") { m_attrs["lang"] = language; return !m_text.isEmpty(); } bool haveWords = false; QDomElement childElement = element.firstChildElement(); while(!childElement.isNull()) { m_childItems.append(new HOCRItem(childElement, m_pageItem, this, m_childItems.size())); haveWords |= m_childItems.last()->parseChildren(childElement, language, defaultLanguage); childElement = childElement.nextSiblingElement(); } return haveWords; } /////////////////////////////////////////////////////////////////////////////// HOCRPage::HOCRPage(const QDomElement& element, int pageId, const QString& defaultLanguage, bool cleanGraphics, int index) : HOCRItem(element, this, nullptr, index), m_pageId(pageId) { m_attrs["id"] = QString("page_%1").arg(pageId); m_sourceFile = m_titleAttrs["image"].replace(QRegularExpression("^['\"]"), "").replace(QRegularExpression("['\"]$"), ""); m_pageNr = m_titleAttrs["ppageno"].toInt(); // Code to handle pageno -> ppageno typo in previous versions of gImageReader if(m_pageNr == 0) { m_pageNr = m_titleAttrs["pageno"].toInt(); m_titleAttrs["ppageno"] = m_titleAttrs["pageno"]; m_titleAttrs.remove("pageno"); } m_angle = m_titleAttrs["rot"].toDouble(); m_resolution = m_titleAttrs.value("res", "100").toInt(); QDomElement childElement = element.firstChildElement("div"); while(!childElement.isNull()) { HOCRItem* item = new HOCRItem(childElement, this, this, m_childItems.size()); m_childItems.append(item); if(!item->parseChildren(childElement, defaultLanguage, defaultLanguage)) { // No word children -> treat as graphic if(cleanGraphics && (item->bbox().width() < 10 || item->bbox().height() < 10)) { // Ignore graphics which are less than 10 x 10 delete m_childItems.takeLast(); } else { item->setAttribute("class", "ocr_graphic"); qDeleteAll(item->m_childItems); item->m_childItems.clear(); } } childElement = childElement.nextSiblingElement(); } } QString HOCRPage::title() const { return QString("%1 [%2]").arg(QFileInfo(m_sourceFile).fileName()).arg(m_pageNr); } void HOCRPage::convertSourcePath(const QString& basepath, bool absolute) { if(absolute && !QFileInfo(m_sourceFile).isAbsolute()) { m_sourceFile = QDir::cleanPath(QDir(basepath).absoluteFilePath(m_sourceFile)); } else if(!absolute && QFileInfo(m_sourceFile).isAbsolute() && m_sourceFile.startsWith(basepath)) { m_sourceFile = QString("./%1").arg(QDir(basepath).relativeFilePath(m_sourceFile)); } m_titleAttrs["image"] = QString("'%1'").arg(m_sourceFile); } gImageReader-3.4.0/qt/src/hocr/HOCRDocument.hh000066400000000000000000000204751417507262200207710ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRDocument.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRDOCUMENT_HH #define HOCRDOCUMENT_HH #include "Config.hh" #include #include class QDomElement; class HOCRItem; class HOCRPage; class HOCRSpellChecker; class HOCRDocument : public QAbstractItemModel { Q_OBJECT public: HOCRDocument(QObject* parent = nullptr); ~HOCRDocument(); void clear(); void setDefaultLanguage(const QString& language) { m_defaultLanguage = language; } const QString& defaultLanguage() const { return m_defaultLanguage; } void addSpellingActions(QMenu* menu, const QModelIndex& index); void addWordToDictionary(const QModelIndex& index); QString toHTML() const; QModelIndex insertPage(int beforeIdx, const QDomElement& pageElement, bool cleanGraphics, const QString& sourceBasePath = QString()); const HOCRPage* page(int i) const { return m_pages.value(i); } int pageCount() const { return m_pages.size(); } const HOCRItem* itemAtIndex(const QModelIndex& index) const { return index.isValid() ? static_cast(index.internalPointer()) : nullptr; } QModelIndex indexAtItem(const HOCRItem* item) const; bool editItemAttribute(const QModelIndex& index, const QString& name, const QString& value, const QString& attrItemClass = QString()); QModelIndex moveItem(const QModelIndex& itemIndex, const QModelIndex& newParent, int row); QModelIndex swapItems(const QModelIndex& parent, int startRow, int endRow); QModelIndex mergeItems(const QModelIndex& parent, int startRow, int endRow); QModelIndex splitItem(const QModelIndex& itemIndex, int startRow, int endRow); QModelIndex splitItemText(const QModelIndex& itemIndex, int pos); QModelIndex mergeItemText(const QModelIndex& itemIndex, bool mergeNext); QModelIndex addItem(const QModelIndex& parent, const QDomElement& element); bool removeItem(const QModelIndex& index); QModelIndex nextIndex(const QModelIndex& current) const; QModelIndex prevIndex(const QModelIndex& current) const; QModelIndex prevOrNextIndex(bool next, const QModelIndex& current, const QString& ocrClass, bool misspelled = false, bool lowconf = false) const; bool indexIsMisspelledWord(const QModelIndex& index) const; bool getItemSpellingSuggestions(const QModelIndex& index, QString& trimmedWord, QStringList& suggestions, int limit) const; bool referencesSource(const QString& filename) const; QModelIndex searchPage(const QString& filename, int pageNr) const; QModelIndex searchAtCanvasPos(const QModelIndex& pageIndex, const QPoint& pos) const; void convertSourcePaths(const QString& basepath, bool absolute); QVariant data(const QModelIndex& index, int role) const override; bool setData(const QModelIndex& index, const QVariant& value, int role) override; Qt::ItemFlags flags(const QModelIndex& index) const override; QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex& child) const override; int rowCount(const QModelIndex& parent = QModelIndex()) const override; int columnCount(const QModelIndex& parent = QModelIndex()) const override; signals: void itemAttributeChanged(const QModelIndex& itemIndex, const QString& name, const QString& value); private: int m_pageIdCounter = 0; QString m_defaultLanguage = "en_US"; HOCRSpellChecker* m_spell; QVector m_pages; QString displayRoleForItem(const HOCRItem* item) const; QIcon decorationRoleForItem(const HOCRItem* item) const; QString tooltipRoleForItem(const HOCRItem* item) const; void insertItem(HOCRItem* parent, HOCRItem* item, int i); void deleteItem(HOCRItem* item); void takeItem(HOCRItem* item); void resetMisspelled(const QModelIndex& index); QList recheckItemSpelling(const QModelIndex& index) const; void recomputeBBoxes(HOCRItem* item); HOCRItem* mutableItemAtIndex(const QModelIndex& index) const { return index.isValid() ? static_cast(index.internalPointer()) : nullptr; } }; class HOCRItem { public: // attrname : attrvalue : occurrences typedef QMap> AttrOccurenceMap_t; HOCRItem(const QDomElement& element, HOCRPage* page, HOCRItem* parent, int index = -1); virtual ~HOCRItem(); HOCRPage* page() const { return m_pageItem; } const QVector& children() const { return m_childItems; } HOCRItem* parent() const { return m_parentItem; } int index() const { return m_index; } bool isEnabled() const { return m_enabled; } // HOCR specific convenience getters QString itemClass() const { return m_attrs["class"]; } const QRect& bbox() const { return m_bbox; } QString text() const { return m_text; } QString lang() const { return m_attrs["lang"]; } QString spellingLang() const { QString l = lang(); QString code = Config::lookupLangCode(l); return code.isEmpty() ? l : code; } const QMap getAttributes() const { return m_attrs; } const QMap getTitleAttributes() const { return m_titleAttrs; } QMap getAllAttributes() const; QMap getAttributes(const QList& names) const; void getPropagatableAttributes(QMap > >& occurrences) const; QString toHtml(int indent = 0) const; QPair baseLine() const; QString fontFamily() const { return m_titleAttrs["x_font"]; } double fontSize() const { return m_titleAttrs["x_fsize"].toDouble(); } bool fontBold() const { return m_bold; } bool fontItalic() const { return m_italic; } static QMap deserializeAttrGroup(const QString& string); static QString serializeAttrGroup(const QMap& attrs); static QString trimmedWord(const QString& word, QString* prefix = nullptr, QString* suffix = nullptr); protected: friend class HOCRDocument; friend class HOCRPage; static QMap s_langCache; QString m_text; int m_misspelled = -1; bool m_bold; bool m_italic; QMap m_attrs; QMap m_titleAttrs; QVector m_childItems; HOCRPage* m_pageItem = nullptr; HOCRItem* m_parentItem = nullptr; int m_index; bool m_enabled = true; QRect m_bbox; // All mutations must be done through methods of HOCRDocument void addChild(HOCRItem* child); void insertChild(HOCRItem* child, int index); void removeChild(HOCRItem* child); void takeChild(HOCRItem* child); QVector takeChildren(); void setEnabled(bool enabled) { m_enabled = enabled; } void setText(const QString& newText) { m_text = newText; } void setMisspelled(int misspelled) { m_misspelled = misspelled; } int isMisspelled() const { return m_misspelled; } void setAttribute(const QString& name, const QString& value, const QString& attrItemClass = QString()); bool parseChildren(const QDomElement& element, QString language, const QString& defaultLanguage); }; class HOCRPage : public HOCRItem { public: HOCRPage(const QDomElement& element, int pageId, const QString& defaultLanguage, bool cleanGraphics, int index); const QString& sourceFile() const { return m_sourceFile; } // const-refs here to avoid taking reference from temporaries const int& pageNr() const { return m_pageNr; } const double& angle() const { return m_angle; } const int& resolution() const { return m_resolution; } int pageId() const { return m_pageId; } QString title() const; private: friend class HOCRItem; friend class HOCRDocument; int m_pageId; QMap m_idCounters; QString m_sourceFile; int m_pageNr; double m_angle; int m_resolution; void convertSourcePath(const QString& basepath, bool absolute); }; #endif // HOCRDOCUMENT_HH gImageReader-3.4.0/qt/src/hocr/HOCRExporter.hh000066400000000000000000000023031417507262200210110ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCREXPORTER_HH #define HOCREXPORTER_HH #include class HOCRDocument; class HOCRExporter : public QObject { public: struct ExporterSettings { virtual ~ExporterSettings() = default; }; virtual ~HOCRExporter() = default; virtual bool run(const HOCRDocument* hocrdocument, const QString& outputname, const ExporterSettings* settings = nullptr) = 0; }; #endif // HOCREXPORTER_HH gImageReader-3.4.0/qt/src/hocr/HOCROdtExporter.cc000066400000000000000000000404371417507262200214600ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCROdtExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "Displayer.hh" #include "HOCRDocument.hh" #include "HOCROdtExporter.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "Utils.hh" #include #include #include #include #include #include #include static QString manifestNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"); static QString officeNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0"); static QString textNS ("urn:oasis:names:tc:opendocument:xmlns:text:1.0"); static QString styleNS ("urn:oasis:names:tc:opendocument:xmlns:style:1.0"); static QString foNS ("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"); static QString tableNS ("urn:oasis:names:tc:opendocument:xmlns:table:1.0"); static QString drawNS ("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"); static QString xlinkNS ("http://www.w3.org/1999/xlink"); static QString svgNS ("urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"); bool HOCROdtExporter::run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* /*settings*/) { QuaZip zip(outname); if(!zip.open( QuaZip::mdCreate )) { QMessageBox::warning(MAIN, _("Export failed"), _("The ODT export failed: unable to write output file.")); return false; } int pageCount = hocrdocument->pageCount(); MainWindow::ProgressMonitor monitor(2 * pageCount); MAIN->showProgress(&monitor); Utils::busyTask([&] { // Image files QMap imageFiles; for(int i = 0; i < pageCount; ++i) { monitor.increaseProgress(); const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } bool success = false; QMetaObject::invokeMethod(this, "setSource", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), Q_ARG(QString, page->sourceFile()), Q_ARG(int, page->pageNr()), Q_ARG(int, page->resolution()), Q_ARG(double, page->angle())); if(!success) { continue; } for(const HOCRItem* item : page->children()) { writeImage(zip, imageFiles, item); } } // Mimetype QuaZipFile* mimetype = new QuaZipFile(&zip); mimetype->open(QIODevice::WriteOnly, QuaZipNewInfo("mimetype")); mimetype->write("application/vnd.oasis.opendocument.text"); mimetype->close(); // Manifest QuaZipFile* manifest = new QuaZipFile(&zip); manifest->open(QIODevice::WriteOnly, QuaZipNewInfo("META-INF/manifest.xml")); QXmlStreamWriter manifestWriter(manifest); manifestWriter.writeNamespace(manifestNS, "manifest"); manifestWriter.writeStartDocument(); manifestWriter.writeStartElement(manifestNS, "manifest"); manifestWriter.writeAttribute(manifestNS, "version", "1.2"); manifestWriter.writeEmptyElement(manifestNS, "file-entry"); manifestWriter.writeAttribute(manifestNS, "media-type", "application/vnd.oasis.opendocument.text"); manifestWriter.writeAttribute(manifestNS, "full-path", "/"); manifestWriter.writeEmptyElement(manifestNS, "file-entry"); manifestWriter.writeAttribute(manifestNS, "media-type", "text/xml"); manifestWriter.writeAttribute(manifestNS, "full-path", "content.xml"); for(const QString& imageFile : imageFiles.values()) { manifestWriter.writeEmptyElement(manifestNS, "file-entry"); manifestWriter.writeAttribute(manifestNS, "media-type", "image/png"); manifestWriter.writeAttribute(manifestNS, "full-path", imageFile); } manifestWriter.writeEndElement(); // manifest manifestWriter.writeEndDocument(); manifest->close(); // Content QuaZipFile* content = new QuaZipFile(&zip); content->open(QIODevice::WriteOnly, QuaZipNewInfo("content.xml")); QXmlStreamWriter writer(content); writer.writeNamespace(officeNS, "office"); writer.writeNamespace(textNS, "text"); writer.writeNamespace(styleNS, "style"); writer.writeNamespace(foNS, "fo"); writer.writeNamespace(drawNS, "draw"); writer.writeNamespace(xlinkNS, "xlink"); writer.writeNamespace(svgNS, "svg"); writer.writeStartDocument(); writer.writeStartElement(officeNS, "document-content"); writer.writeAttribute(officeNS, "version", "1.2"); // - Font face decls writer.writeStartElement(officeNS, "font-face-decls"); QSet families; for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { writeFontFaceDecls(families, page, writer); } } writer.writeEndElement(); // - Page styles writer.writeStartElement(officeNS, "automatic-styles"); for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { writer.writeStartElement(styleNS, "page-layout"); writer.writeAttribute(styleNS, "name", QString("PL%1").arg(i)); writer.writeEmptyElement(styleNS, "page-layout-properties"); writer.writeAttribute(foNS, "page-width", QString("%1in").arg(page->bbox().width() / double(page->resolution()))); writer.writeAttribute(foNS, "page-height", QString("%1in").arg(page->bbox().height() / double(page->resolution()))); writer.writeAttribute(styleNS, "print-orientation", page->bbox().width() > page->bbox().height() ? "landscape" : "portrait"); writer.writeAttribute(styleNS, "writing-mode", "lr-tb"); writer.writeAttribute(foNS, "margin-top", "0in"); writer.writeAttribute(foNS, "margin-bottom", "0in"); writer.writeAttribute(foNS, "margin-left", "0in"); writer.writeAttribute(foNS, "margin-right", "0in"); writer.writeEndElement(); // page-layout } } writer.writeEndElement(); // automatic-styles writer.writeStartElement(officeNS, "master-styles"); for(int i = 0; i < pageCount; ++i) { if(hocrdocument->page(i)->isEnabled()) { writer.writeEmptyElement(styleNS, "master-page"); writer.writeAttribute(styleNS, "name", QString("MP%1").arg(i)); writer.writeAttribute(styleNS, "page-layout-name", QString("PL%1").arg(i)); } } writer.writeEndElement(); // master-styles // - Styles writer.writeStartElement(officeNS, "automatic-styles"); // -- Standard paragraph writer.writeStartElement(styleNS, "style"); writer.writeAttribute(styleNS, "name", "P"); writer.writeAttribute(styleNS, "parent-style-name", "Standard"); writer.writeEndElement(); // -- Page paragraphs for(int i = 0; i < pageCount; ++i) { if(hocrdocument->page(i)->isEnabled()) { writer.writeStartElement(styleNS, "style"); writer.writeAttribute(styleNS, "name", QString("PP%1").arg(i)); writer.writeAttribute(styleNS, "family", "paragraph"); writer.writeAttribute(styleNS, "parent-style-name", "Standard"); writer.writeAttribute(styleNS, "master-page-name", QString("MP%1").arg(i)); writer.writeEmptyElement(styleNS, "paragraph-properties"); writer.writeAttribute(foNS, "break-before", "page"); writer.writeEndElement(); } } // -- Frame, absolutely positioned on page writer.writeStartElement(styleNS, "style"); writer.writeAttribute(styleNS, "name", "F"); writer.writeAttribute(styleNS, "family", "graphic"); writer.writeStartElement(styleNS, "graphic-properties"); writer.writeAttribute(drawNS, "stroke", "none"); writer.writeAttribute(drawNS, "fill", "none"); writer.writeAttribute(styleNS, "vertical-pos", "from-top"); writer.writeAttribute(styleNS, "vertical-rel", "page"); writer.writeAttribute(styleNS, "horizontal-pos", "from-left"); writer.writeAttribute(styleNS, "horizontal-rel", "page"); writer.writeAttribute(styleNS, "flow-with-text", "false"); writer.writeEndElement(); writer.writeEndElement(); // -- Text styles int counter = 0; QMap> fontStyles; for(int i = 0; i < pageCount; ++i) { const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { for(const HOCRItem* item : page->children()) { writeFontStyles(fontStyles, item, writer, counter); } } } writer.writeEndElement(); // automatic-styles // - Body writer.writeStartElement(officeNS, "body"); writer.writeStartElement(officeNS, "text"); int pageCounter = 1; for(int i = 0; i < pageCount; ++i) { monitor.increaseProgress(); const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } writer.writeStartElement(textNS, "p"); writer.writeAttribute(textNS, "style-name", QString("PP%1").arg(i)); for(const HOCRItem* item : page->children()) { printItem(writer, item, pageCounter, page->resolution(), fontStyles, imageFiles); } writer.writeEndElement(); ++pageCounter; } writer.writeEndElement(); // text writer.writeEndElement(); // body writer.writeEndElement(); // document-content writer.writeEndDocument(); content->close(); return true; }, _("Exporting to ODT...")); MAIN->hideProgress(); zip.close(); bool openAfterExport = ConfigSettings::get("openafterexport")->getValue(); if(openAfterExport) { QDesktopServices::openUrl(QUrl::fromLocalFile(outname)); } return true; } void HOCROdtExporter::writeImage(QuaZip& zip, QMap& images, const HOCRItem* item) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocr_graphic") { QImage image; QMetaObject::invokeMethod(this, "getSelection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QImage, image), Q_ARG(QRect, item->bbox())); QString filename = QString("Pictures/%1.png").arg(QUuid::createUuid().toString()); QuaZipFile* file = new QuaZipFile(&zip); if(file->open(QIODevice::WriteOnly, QuaZipNewInfo(filename))) { image.save(file, "png"); images.insert(item, filename); } } } void HOCROdtExporter::writeFontFaceDecls(QSet& families, const HOCRItem* item, QXmlStreamWriter& writer) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocrx_word") { QString fontFamily = item->fontFamily(); if(!families.contains(fontFamily)) { if(!fontFamily.isEmpty()) { writer.writeEmptyElement(styleNS, "font-face"); writer.writeAttribute(styleNS, "name", fontFamily); writer.writeAttribute(svgNS, "font-family", fontFamily); } families.insert(fontFamily); } } else { for(const HOCRItem* child : item->children()) { writeFontFaceDecls(families, child, writer); } } } void HOCROdtExporter::writeFontStyles(QMap>& styles, const HOCRItem* item, QXmlStreamWriter& writer, int& counter) { if(!item->isEnabled()) { return; } if(item->itemClass() == "ocrx_word") { QString fontKey = item->fontFamily() + (item->fontBold() ? "@bold" : "") + (item->fontItalic() ? "@italic" : ""); if(!styles.contains(fontKey) || !styles[fontKey].contains(item->fontSize())) { QString styleName = QString("T%1").arg(++counter); writer.writeStartElement(styleNS, "style"); writer.writeAttribute(styleNS, "name", styleName); writer.writeAttribute(styleNS, "family", "text"); writer.writeStartElement(styleNS, "text-properties"); writer.writeAttribute(styleNS, "font-name", item->fontFamily()); writer.writeAttribute(foNS, "font-size", QString("%1pt").arg(item->fontSize())); if(item->fontBold()) { writer.writeAttribute(foNS, "font-weight", "bold"); } if(item->fontItalic()) { writer.writeAttribute(foNS, "font-style", "italic"); } writer.writeEndElement(); // text-properties writer.writeEndElement(); // style styles[fontKey].insert(item->fontSize(), styleName); } } else { for(const HOCRItem* child : item->children()) { writeFontStyles(styles, child, writer, counter); } } } void HOCROdtExporter::printItem(QXmlStreamWriter& writer, const HOCRItem* item, int pageNr, int dpi, const QMap>& fontStyleNames, const QMap& images) { if(!item->isEnabled()) { return; } QString itemClass = item->itemClass(); const QRect& bbox = item->bbox(); if(itemClass == "ocr_graphic") { writer.writeStartElement(drawNS, "frame"); writer.writeAttribute(drawNS, "style-name", "F"); writer.writeAttribute(textNS, "anchor-type", "page"); writer.writeAttribute(textNS, "anchor-page-number", QString::number(pageNr)); writer.writeAttribute(svgNS, "x", QString("%1in").arg(bbox.x() / double(dpi))); writer.writeAttribute(svgNS, "y", QString("%1in").arg(bbox.y() / double(dpi))); writer.writeAttribute(svgNS, "width", QString("%1in").arg(bbox.width() / double(dpi))); writer.writeAttribute(svgNS, "height", QString("%1in").arg(bbox.height() / double(dpi))); writer.writeAttribute(drawNS, "z-index", "0"); writer.writeStartElement(drawNS, "image"); writer.writeAttribute(xlinkNS, "href", images[item]); writer.writeAttribute(xlinkNS, "type", "simple"); writer.writeAttribute(xlinkNS, "show", "embed"); writer.writeEndElement(); // image writer.writeEndElement(); // frame } else if(itemClass == "ocr_par") { writer.writeStartElement(drawNS, "frame"); writer.writeAttribute(drawNS, "style-name", "F"); writer.writeAttribute(textNS, "anchor-type", "page"); writer.writeAttribute(textNS, "anchor-page-number", QString::number(pageNr)); writer.writeAttribute(svgNS, "x", QString("%1in").arg(bbox.x() / double(dpi))); writer.writeAttribute(svgNS, "y", QString("%1in").arg(bbox.y() / double(dpi))); writer.writeAttribute(svgNS, "width", QString("%1in").arg(bbox.width() / double(dpi))); writer.writeAttribute(svgNS, "height", QString("%1in").arg(bbox.height() / double(dpi))); writer.writeAttribute(drawNS, "z-index", "1"); writer.writeStartElement(drawNS, "text-box"); writer.writeStartElement(textNS, "p"); writer.writeAttribute(textNS, "style-name", "P"); for(const HOCRItem* child : item->children()) { printItem(writer, child, pageNr, dpi, fontStyleNames, images); } writer.writeEndElement(); writer.writeEndElement(); // text-box writer.writeEndElement(); // frame } else if(itemClass == "ocr_line") { const HOCRItem* firstWord = nullptr; int iChild = 0, nChilds = item->children().size(); for(; iChild < nChilds; ++iChild) { const HOCRItem* child = item->children()[iChild]; if(child->isEnabled()) { firstWord = child; break; } } if(!firstWord) { return; } QString fontKey = firstWord->fontFamily() + (firstWord->fontBold() ? "@bold" : "") + (firstWord->fontItalic() ? "@italic" : ""); QString currentFontStyleName = fontStyleNames[fontKey][firstWord->fontSize()]; writer.writeStartElement(textNS, "span"); writer.writeAttribute(textNS, "style-name", currentFontStyleName); writer.writeCharacters(firstWord->text()); ++iChild; for(; iChild < nChilds; ++iChild) { const HOCRItem* child = item->children()[iChild]; if(!child->isEnabled()) { continue; } fontKey = child->fontFamily() + (child->fontBold() ? "@bold" : "") + (child->fontItalic() ? "@italic" : ""); QString fontStyleName = fontStyleNames[fontKey][child->fontSize()]; if(fontStyleName != currentFontStyleName) { currentFontStyleName = fontStyleName; writer.writeEndElement(); writer.writeStartElement(textNS, "span"); writer.writeAttribute(textNS, "style-name", currentFontStyleName); } writer.writeCharacters(" "); writer.writeCharacters(child->text()); } writer.writeEndElement(); writer.writeEmptyElement(textNS, "line-break"); } else { for(const HOCRItem* child : item->children()) { printItem(writer, child, pageNr, dpi, fontStyleNames, images); } } } bool HOCROdtExporter::setSource(const QString& sourceFile, int page, int dpi, double angle) { if(MAIN->getSourceManager()->addSource(sourceFile, true)) { MAIN->getDisplayer()->setup(&page, &dpi, &angle); return true; } else { return false; } } QImage HOCROdtExporter::getSelection(const QRect& bbox) { Displayer* displayer = MAIN->getDisplayer(); return displayer->getImage(bbox.translated(displayer->getSceneBoundingRect().toRect().topLeft())); } gImageReader-3.4.0/qt/src/hocr/HOCROdtExporter.hh000066400000000000000000000036051417507262200214660ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCROdtExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRODTEXPORTER_HH #define HOCRODTEXPORTER_HH #include "common.hh" #include "HOCRExporter.hh" #include #include class HOCRItem; class QImage; class QRect; class QuaZip; class QXmlStreamWriter; class HOCROdtExporter : public HOCRExporter { Q_OBJECT public: bool run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* settings = nullptr) override; private: void writeImage(QuaZip& zip, QMap& images, const HOCRItem* item); void writeFontFaceDecls(QSet& families, const HOCRItem* item, QXmlStreamWriter& writer); void writeFontStyles(QMap >& styles, const HOCRItem* item, QXmlStreamWriter& writer, int& counter); void printItem(QXmlStreamWriter& writer, const HOCRItem* item, int pageNr, int dpi, const QMap >& fontStyleNames, const QMap& images); private slots: bool setSource(const QString& sourceFile, int page, int dpi, double angle); QImage getSelection(const QRect& bbox); }; #endif // HOCRODTEXPORTER_HH gImageReader-3.4.0/qt/src/hocr/HOCRPdfExportWidget.cc000066400000000000000000000541041417507262200222540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExportWidget.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "Displayer.hh" #include "DisplayerToolHOCR.hh" #include "HOCRDocument.hh" #include "HOCRPdfExportWidget.hh" #include "HOCRPdfExporter.hh" #include "MainWindow.hh" #include "SourceManager.hh" #include "PaperSize.hh" #include "Utils.hh" HOCRPdfExportWidget::HOCRPdfExportWidget(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage, QWidget* parent) : QWidget(parent), m_displayerTool(displayerTool), m_document(hocrdocument), m_previewPage(hocrpage) { ui.setupUi(this); ui.comboBoxBackend->addItem("PoDoFo", HOCRPdfExporter::PDFSettings::BackendPoDoFo); ui.comboBoxBackend->addItem("QPrinter", HOCRPdfExporter::PDFSettings::BackendQPrinter); ui.comboBoxBackend->setCurrentIndex(-1); ui.comboBoxImageFormat->addItem(_("Color"), QImage::Format_RGB888); ui.comboBoxImageFormat->addItem(_("Grayscale"), QImage::Format_Grayscale8); ui.comboBoxImageFormat->addItem(_("Monochrome"), QImage::Format_Mono); ui.comboBoxImageFormat->setCurrentIndex(-1); ui.comboBoxDithering->addItem(_("Threshold (closest color)"), Qt::ThresholdDither); ui.comboBoxDithering->addItem(_("Diffuse"), Qt::DiffuseDither); ui.comboBoxImageCompression->addItem(_("Zip (lossless)"), HOCRPdfExporter::PDFSettings::CompressZip); ui.comboBoxImageCompression->addItem(_("CCITT Group 4 (lossless)"), HOCRPdfExporter::PDFSettings::CompressFax4); ui.comboBoxImageCompression->addItem(_("Jpeg (lossy)"), HOCRPdfExporter::PDFSettings::CompressJpeg); ui.comboBoxImageCompression->setCurrentIndex(-1); ui.comboBoxPaperSizeUnit->addItem(_("cm"), static_cast(PaperSize::cm)); ui.comboBoxPaperSizeUnit->addItem(_("in"), static_cast(PaperSize::inch)); ui.comboBoxPaperSize->addItem(_("Same as source"), "source"); ui.comboBoxPaperSize->addItem(_("Custom"), "custom"); for(const auto& size : PaperSize::paperSizes) { ui.comboBoxPaperSize->addItem(size.first.c_str(), size.first.c_str()); } ui.comboBoxPaperSize->setCurrentIndex(-1); ui.lineEditPaperHeight->setValidator(new QDoubleValidator(0.0, 10000000.0, 1)); ui.lineEditPaperWidth->setValidator(new QDoubleValidator(0.0, 10000000.0, 1)); ui.comboBoxPdfVersion->addItem("1.0", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0); ui.comboBoxPdfVersion->addItem("1.1", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_1); ui.comboBoxPdfVersion->addItem("1.2", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_2); ui.comboBoxPdfVersion->addItem("1.3", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_3); ui.comboBoxPdfVersion->addItem("1.4", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_4); ui.comboBoxPdfVersion->addItem("1.5", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_5); ui.comboBoxPdfVersion->addItem("1.6", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_6); ui.comboBoxPdfVersion->addItem("1.7", HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7); ui.comboBoxPdfVersion->setCurrentIndex(-1); connect(ui.comboBoxBackend, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::backendChanged); connect(ui.toolButtonBackendHint, &QToolButton::clicked, this, &HOCRPdfExportWidget::toggleBackendHint); connect(ui.comboBoxOutputMode, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.comboBoxImageFormat, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.comboBoxImageFormat, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::imageFormatChanged); connect(ui.comboBoxDithering, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.comboBoxImageCompression, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::imageCompressionChanged); connect(ui.spinBoxCompressionQuality, qOverload(&QSpinBox::valueChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxFontFamily, &QCheckBox::toggled, ui.comboBoxFontFamily, &QComboBox::setEnabled); connect(ui.checkBoxFontFamily, &QCheckBox::toggled, this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxFontFamily, &QCheckBox::toggled, ui.labelFallbackFontFamily, &QLabel::setDisabled); connect(ui.checkBoxFontFamily, &QCheckBox::toggled, ui.comboBoxFallbackFontFamily, &QComboBox::setDisabled); connect(ui.comboBoxFontFamily, &QFontComboBox::currentFontChanged, this, &HOCRPdfExportWidget::updatePreview); connect(ui.comboBoxFallbackFontFamily, &QFontComboBox::currentFontChanged, this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxFontSize, &QCheckBox::toggled, ui.spinBoxFontSize, &QSpinBox::setEnabled); connect(ui.checkBoxFontSize, &QCheckBox::toggled, this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxFontSize, &QCheckBox::toggled, ui.labelFontScaling, &HOCRPdfExportWidget::setDisabled); connect(ui.checkBoxFontSize, &QCheckBox::toggled, ui.spinFontScaling, &HOCRPdfExportWidget::setDisabled); connect(ui.spinBoxFontSize, qOverload(&QSpinBox::valueChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.spinFontScaling, qOverload(&QSpinBox::valueChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxUniformizeSpacing, &QCheckBox::toggled, this, &HOCRPdfExportWidget::updatePreview); connect(ui.spinBoxPreserve, qOverload(&QSpinBox::valueChanged), this, &HOCRPdfExportWidget::updatePreview); connect(ui.checkBoxUniformizeSpacing, &QCheckBox::toggled, ui.labelPreserve, &QLabel::setEnabled); connect(ui.checkBoxUniformizeSpacing, &QCheckBox::toggled, ui.labelPreserveCharacters, &QLabel::setEnabled); connect(ui.checkBoxUniformizeSpacing, &QCheckBox::toggled, ui.spinBoxPreserve, &QSpinBox::setEnabled); connect(ui.lineEditPasswordOpen, &QLineEdit::textChanged, this, &HOCRPdfExportWidget::updateValid); connect(ui.lineEditConfirmPasswordOpen, &QLineEdit::textChanged, this, &HOCRPdfExportWidget::updateValid); connect(ui.checkBoxPreview, &QCheckBox::toggled, this, &HOCRPdfExportWidget::updatePreview); connect(ui.comboBoxPaperSize, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::paperSizeChanged); connect(ui.comboBoxPaperSizeUnit, qOverload(&QComboBox::currentIndexChanged), this, &HOCRPdfExportWidget::paperSizeChanged); connect(ui.toolButtonLandscape, &QToolButton::clicked, this, &HOCRPdfExportWidget::paperSizeChanged); connect(ui.lineEditPaperWidth, &QLineEdit::textChanged, this, &HOCRPdfExportWidget::updateValid); connect(ui.lineEditPaperHeight, &QLineEdit::textChanged, this, &HOCRPdfExportWidget::updateValid); connect(ui.pushButtonImport, &QPushButton::clicked, this, &HOCRPdfExportWidget::importMetadataFromSource); ADD_SETTING(ComboSetting("pdfexportmode", ui.comboBoxOutputMode)); ADD_SETTING(SpinSetting("pdfimagecompressionquality", ui.spinBoxCompressionQuality, 90)); ADD_SETTING(ComboSetting("pdfimagecompression", ui.comboBoxImageCompression)); ADD_SETTING(ComboSetting("pdfimageformat", ui.comboBoxImageFormat)); ADD_SETTING(ComboSetting("pdfimageconversionflags", ui.comboBoxDithering)); ADD_SETTING(SpinSetting("pdfimagedpi", ui.spinBoxDpi, 300)); ADD_SETTING(SwitchSetting("pdfoverridefontfamily", ui.checkBoxFontFamily, true)); ADD_SETTING(FontComboSetting("pdffontfamily", ui.comboBoxFontFamily)); ADD_SETTING(FontComboSetting("pdffallbackfontfamily", ui.comboBoxFallbackFontFamily)); ADD_SETTING(SwitchSetting("pdfoverridefontsizes", ui.checkBoxFontSize, true)); ADD_SETTING(SpinSetting("pdffontsize", ui.spinBoxFontSize, 10)); ADD_SETTING(SpinSetting("pdffontscale", ui.spinFontScaling, 100)); ADD_SETTING(SwitchSetting("pdfuniformizelinespacing", ui.checkBoxUniformizeSpacing, false)); ADD_SETTING(SwitchSetting("pdfsanitizehyphens", ui.checkBoxSanitizeHyphens, true)); ADD_SETTING(SpinSetting("pdfpreservespaces", ui.spinBoxPreserve, 4)); ADD_SETTING(SwitchSetting("pdfpreview", ui.checkBoxPreview, false)); ADD_SETTING(ComboSetting("pdfexportpapersize", ui.comboBoxPaperSize)); ADD_SETTING(LineEditSetting("pdfexportpaperwidth", ui.lineEditPaperWidth)); ADD_SETTING(LineEditSetting("pdfexportpaperheight", ui.lineEditPaperHeight)); ADD_SETTING(ComboSetting("pdfexportpapersizeunit", ui.comboBoxPaperSize)); ADD_SETTING(SwitchSetting("pdfexportpaperlandscape", ui.toolButtonLandscape)); ADD_SETTING(LineEditSetting("pdfexportinfoauthor", ui.lineEditAuthor, PACKAGE_NAME)); ADD_SETTING(LineEditSetting("pdfexportinfoproducer", ui.lineEditProducer, PACKAGE_NAME)); ADD_SETTING(LineEditSetting("pdfexportinfocreator", ui.lineEditCreator, PACKAGE_NAME)); ADD_SETTING(ComboSetting("pdfexportpdfversion", ui.comboBoxPdfVersion, ui.comboBoxPdfVersion->findData(HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7))); ADD_SETTING(ComboSetting("pdfexportbackend", ui.comboBoxBackend)); #if !defined(TESSERACT_VERSION) || TESSERACT_VERSION < TESSERACT_MAKE_VERSION(3,04,00) ui.checkBoxFontFamily->setChecked(true); ui.checkBoxFontFamily->setEnabled(false); ui.checkBoxFontSize->setChecked(true); ui.checkBoxFontSize->setEnabled(false); #endif m_preview = new QGraphicsPixmapItem(); m_preview->setTransformationMode(Qt::SmoothTransformation); m_preview->setZValue(2); updatePreview(); MAIN->getDisplayer()->scene()->addItem(m_preview); } HOCRPdfExportWidget::~HOCRPdfExportWidget() { MAIN->getDisplayer()->scene()->removeItem(m_preview); delete m_preview; } void HOCRPdfExportWidget::setPreviewPage(const HOCRDocument* hocrdocument, const HOCRPage* hocrpage) { m_document = hocrdocument; m_previewPage = hocrpage; updatePreview(); } HOCRPdfExporter::PDFSettings HOCRPdfExportWidget::getPdfSettings() const { HOCRPdfExporter::PDFSettings pdfSettings; pdfSettings.colorFormat = static_cast(ui.comboBoxImageFormat->itemData(ui.comboBoxImageFormat->currentIndex()).toInt()); pdfSettings.conversionFlags = pdfSettings.colorFormat == QImage::Format_Mono ? static_cast(ui.comboBoxDithering->itemData(ui.comboBoxDithering->currentIndex()).toInt()) : Qt::AutoColor; pdfSettings.compression = static_cast(ui.comboBoxImageCompression->itemData(ui.comboBoxImageCompression->currentIndex()).toInt()); pdfSettings.compressionQuality = ui.spinBoxCompressionQuality->value(); pdfSettings.fontFamily = ui.checkBoxFontFamily->isChecked() ? ui.comboBoxFontFamily->currentFont().family() : ""; pdfSettings.fontSize = ui.checkBoxFontSize->isChecked() ? ui.spinBoxFontSize->value() : -1; pdfSettings.fallbackFontFamily = ui.checkBoxFontFamily->isChecked() ? ui.comboBoxFontFamily->currentFont().family() : ui.comboBoxFallbackFontFamily->currentFont().family(); pdfSettings.fallbackFontSize = ui.checkBoxFontSize->isChecked() ? ui.spinBoxFontSize->value() : -1; pdfSettings.uniformizeLineSpacing = ui.checkBoxUniformizeSpacing->isChecked(); pdfSettings.preserveSpaceWidth = ui.spinBoxPreserve->value(); pdfSettings.overlay = ui.comboBoxOutputMode->currentIndex() == 1; pdfSettings.detectedFontScaling = ui.spinFontScaling->value() / 100.; pdfSettings.sanitizeHyphens = ui.checkBoxSanitizeHyphens->isChecked(); pdfSettings.assumedImageDpi = ui.spinBoxPaperSizeDpi->value(); pdfSettings.outputDpi = ui.spinBoxDpi->value(); pdfSettings.paperSize = ui.comboBoxPaperSize->itemData(ui.comboBoxPaperSize->currentIndex()).toString(); pdfSettings.paperSizeLandscape = ui.toolButtonLandscape->isChecked(); pdfSettings.paperWidthIn = ui.lineEditPaperWidth->text().toDouble(); pdfSettings.paperHeightIn = ui.lineEditPaperHeight->text().toDouble(); PaperSize::Unit unit = static_cast(ui.comboBoxPaperSizeUnit->itemData(ui.comboBoxPaperSizeUnit->currentIndex()).toInt()); if(unit == PaperSize::cm) { pdfSettings.paperWidthIn /= PaperSize::CMtoInch; pdfSettings.paperHeightIn /= PaperSize::CMtoInch; } pdfSettings.backend = static_cast(ui.comboBoxBackend->currentData().toInt()); pdfSettings.version = static_cast(ui.comboBoxPdfVersion->currentData().toInt()); pdfSettings.password = ui.lineEditPasswordOpen->text(); pdfSettings.producer = ui.lineEditProducer->text(); pdfSettings.creator = ui.lineEditCreator->text(); pdfSettings.title = ui.lineEditTitle->text(); pdfSettings.subject = ui.lineEditSubject->text(); pdfSettings.keywords = ui.lineEditKeywords->text(); pdfSettings.author = ui.lineEditAuthor->text(); return pdfSettings; } void HOCRPdfExportWidget::updatePreview() { if(!m_preview) { return; } m_preview->setVisible(ui.checkBoxPreview->isChecked()); if(!m_document || m_document->pageCount() == 0 || !m_previewPage || !ui.checkBoxPreview->isChecked()) { return; } const HOCRPage* page = m_previewPage; QRect bbox = page->bbox(); int pageDpi = page->resolution(); HOCRPdfExporter::PDFSettings pdfSettings = getPdfSettings(); QFont defaultFont = ui.checkBoxFontFamily->isChecked() ? ui.comboBoxFontFamily->currentFont() : ui.comboBoxFallbackFontFamily->currentFont(); QImage image(bbox.size(), QImage::Format_ARGB32); image.setDotsPerMeterX(pageDpi / 0.0254); // 1 in = 0.0254 m image.setDotsPerMeterY(pageDpi / 0.0254); QPainter painter(&image); painter.setRenderHint(QPainter::Antialiasing); HOCRQPainterPdfPrinter printer(&painter, defaultFont); if(!pdfSettings.fontFamily.isEmpty()) { printer.setFontFamily(pdfSettings.fontFamily, false, false); } if(pdfSettings.fontSize != -1) { printer.setFontSize(pdfSettings.fontSize); } if(pdfSettings.overlay) { printer.drawImage(bbox, m_displayerTool->getSelection(bbox), pdfSettings); painter.fillRect(0, 0, bbox.width(), bbox.height(), QColor(255, 255, 255, 127)); } else { image.fill(Qt::white); } // Units of QPainter on pixel based devices is pixels, so px2pu = 1. printer.printChildren(page, pdfSettings, 1.); m_preview->setPixmap(QPixmap::fromImage(image)); m_preview->setPos(-0.5 * bbox.width(), -0.5 * bbox.height()); } void HOCRPdfExportWidget::backendChanged() { int jpegIdx = ui.comboBoxImageCompression->findData(HOCRPdfExporter::PDFSettings::CompressJpeg); bool podofoBackend = ui.comboBoxBackend->itemData(ui.comboBoxBackend->currentIndex()).toInt() == HOCRPdfExporter::PDFSettings::BackendPoDoFo; ui.groupBoxEncryption->setEnabled(podofoBackend); ui.labelImageCompression->setEnabled(podofoBackend); ui.comboBoxImageCompression->setEnabled(podofoBackend); if(!podofoBackend) { // QPainter compresses images in PDFs to JPEG at 94% quality ui.comboBoxImageCompression->setCurrentIndex(jpegIdx); ui.spinBoxCompressionQuality->setValue(94); } ui.labelAuthor->setEnabled(podofoBackend); ui.lineEditAuthor->setEnabled(podofoBackend); ui.labelTitle->setEnabled(podofoBackend); ui.lineEditTitle->setEnabled(podofoBackend); ui.labelProducer->setEnabled(podofoBackend); ui.lineEditProducer->setEnabled(podofoBackend); ui.labelKeywords->setEnabled(podofoBackend); ui.lineEditKeywords->setEnabled(podofoBackend); ui.labelSubject->setEnabled(podofoBackend); ui.lineEditSubject->setEnabled(podofoBackend); ui.labelPdfVersion->setEnabled(podofoBackend); ui.comboBoxPdfVersion->setEnabled(podofoBackend); ui.spinBoxCompressionQuality->setEnabled(podofoBackend); ui.labelCompressionQuality->setEnabled(podofoBackend); } void HOCRPdfExportWidget::toggleBackendHint() { QString tooltip = _("
      • PoDoFo: offers more image compression options, but does not handle complex scripts.
      • QPrinter: only supports JPEG compression for storing images, but supports complex scripts.
      "); QRect r = ui.toolButtonBackendHint->rect(); QToolTip::showText(ui.toolButtonBackendHint->mapToGlobal(QPoint(0, 0.5 * r.height())), tooltip, ui.toolButtonBackendHint, r); } void HOCRPdfExportWidget::imageFormatChanged() { QImage::Format format = static_cast(ui.comboBoxImageFormat->itemData(ui.comboBoxImageFormat->currentIndex()).toInt()); QStandardItemModel* model = static_cast(ui.comboBoxImageCompression->model()); int zipIdx = ui.comboBoxImageCompression->findData(HOCRPdfExporter::PDFSettings::CompressZip); int ccittIdx = ui.comboBoxImageCompression->findData(HOCRPdfExporter::PDFSettings::CompressFax4); int jpegIdx = ui.comboBoxImageCompression->findData(HOCRPdfExporter::PDFSettings::CompressJpeg); QStandardItem* ccittItem = model->item(ccittIdx); QStandardItem* jpegItem = model->item(jpegIdx); if(format == QImage::Format_Mono) { // for monochrome images, allow zip and ccitt4 (but not jpeg, unless QPrinter is forcing us) if(ui.comboBoxImageCompression->currentIndex() == jpegIdx && ui.comboBoxBackend->itemData(ui.comboBoxBackend->currentIndex()).toInt() != HOCRPdfExporter::PDFSettings::BackendQPrinter) { ui.comboBoxImageCompression->setCurrentIndex(zipIdx); } ccittItem->setFlags(ccittItem->flags() | Qt::ItemIsSelectable | Qt::ItemIsEnabled); jpegItem->setFlags(jpegItem->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEnabled)); ui.labelDithering->setEnabled(true); ui.comboBoxDithering->setEnabled(true); } else { // for color and grayscale images, allow jpeg and zip (but not ccitt4) if(ui.comboBoxImageCompression->currentIndex() == ccittIdx) { ui.comboBoxImageCompression->setCurrentIndex(zipIdx); } ccittItem->setFlags(ccittItem->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEnabled)); jpegItem->setFlags(jpegItem->flags() | Qt::ItemIsSelectable | Qt::ItemIsEnabled); ui.labelDithering->setEnabled(false); ui.comboBoxDithering->setEnabled(false); } } void HOCRPdfExportWidget::imageCompressionChanged() { HOCRPdfExporter::PDFSettings::Compression compression = static_cast(ui.comboBoxImageCompression->itemData(ui.comboBoxImageCompression->currentIndex()).toInt()); bool jpegCompression = compression == HOCRPdfExporter::PDFSettings::CompressJpeg; ui.spinBoxCompressionQuality->setEnabled(jpegCompression); ui.labelCompressionQuality->setEnabled(jpegCompression); } void HOCRPdfExportWidget::paperSizeChanged() { QString paperSize = ui.comboBoxPaperSize->itemData(ui.comboBoxPaperSize->currentIndex()).toString(); if(paperSize == "custom") { ui.lineEditPaperWidth->setEnabled(true); ui.lineEditPaperHeight->setEnabled(true); ui.widgetPaperSize->setVisible(true); ui.widgetPaperOrientation->setVisible(false); ui.widgetPaperSizeDpi->setVisible(false); } else if(paperSize == "source") { ui.lineEditPaperWidth->setEnabled(true); ui.lineEditPaperHeight->setEnabled(true); ui.widgetPaperSize->setVisible(false); ui.widgetPaperOrientation->setVisible(false); ui.widgetPaperSizeDpi->setVisible(true); } else { ui.widgetPaperSize->setVisible(true); ui.widgetPaperOrientation->setVisible(true); ui.widgetPaperSizeDpi->setVisible(false); ui.lineEditPaperWidth->setDisabled(true); ui.lineEditPaperHeight->setDisabled(true); PaperSize::Unit unit = static_cast(ui.comboBoxPaperSizeUnit->itemData(ui.comboBoxPaperSizeUnit->currentIndex()).toInt()); auto outputPaperSize = PaperSize::getSize(unit, paperSize.toStdString(), ui.toolButtonLandscape->isChecked()); QLocale locale; ui.lineEditPaperWidth->setText(locale.toString(outputPaperSize.width, 'f', 1)); ui.lineEditPaperHeight->setText(locale.toString(outputPaperSize.height, 'f', 1)); } updateValid(); } void HOCRPdfExportWidget::updateValid() { bool valid = true; // Passwords must match if(ui.lineEditPasswordOpen->text() == ui.lineEditConfirmPasswordOpen->text()) { ui.lineEditConfirmPasswordOpen->setStyleSheet(QStringLiteral("")); } else { ui.lineEditConfirmPasswordOpen->setStyleSheet("background: #FF7777; color: #FFFFFF;"); valid = false; } // In custom paper size mode, size must be specified QString paperSize = ui.comboBoxPaperSize->itemData(ui.comboBoxPaperSize->currentIndex()).toString(); ui.lineEditPaperWidth->setStyleSheet(QStringLiteral("")); ui.lineEditPaperHeight->setStyleSheet(QStringLiteral("")); if(paperSize == "custom") { if(ui.lineEditPaperWidth->text().isEmpty()) { ui.lineEditPaperWidth->setStyleSheet("background: #FF7777; color: #FFFFFF;"); valid = false; } if(ui.lineEditPaperHeight->text().isEmpty()) { ui.lineEditPaperHeight->setStyleSheet("background: #FF7777; color: #FFFFFF;"); valid = false; } } emit validChanged(valid); } void HOCRPdfExportWidget::importMetadataFromSource() { QList sources = MAIN->getSourceManager()->getSelectedSources(); if(!sources.isEmpty()) { Source* source = sources.first(); ui.lineEditAuthor->setText(source->author); ui.lineEditCreator->setText(source->creator); ui.lineEditKeywords->setText(source->keywords); ui.lineEditTitle->setText(source->title); ui.lineEditSubject->setText(source->subject); ui.lineEditProducer->setText(source->producer); HOCRPdfExporter::PDFSettings::Version sourcePdfVersion = HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7; if(source->pdfVersionMajor == 1 && source->pdfVersionMinor >= 0 && source->pdfVersionMinor <= 7) { sourcePdfVersion = static_cast(HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0 + source->pdfVersionMinor); } ui.comboBoxPdfVersion->setCurrentIndex(ui.comboBoxPdfVersion->findData(sourcePdfVersion)); } } gImageReader-3.4.0/qt/src/hocr/HOCRPdfExportWidget.hh000066400000000000000000000036571417507262200222750ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExportWidget.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPDFEXPORTWIDGET_HH #define HOCRPDFEXPORTWIDGET_HH #include #include #include "HOCRPdfExporter.hh" #include "ui_PdfExportWidget.h" class QGraphicsPixmapItem; class DisplayerToolHOCR; class HOCRDocument; class HOCRPage; class HOCRPdfExportWidget : public QWidget { Q_OBJECT public: HOCRPdfExportWidget(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument = nullptr, const HOCRPage* hocrpage = nullptr, QWidget* parent = nullptr); ~HOCRPdfExportWidget(); void setPreviewPage(const HOCRDocument* hocrdocument, const HOCRPage* hocrpage); HOCRPdfExporter::PDFSettings getPdfSettings() const; signals: void validChanged(bool valid); private: Ui::PdfExportWidget ui; QGraphicsPixmapItem* m_preview = nullptr; DisplayerToolHOCR* m_displayerTool; const HOCRDocument* m_document = nullptr; const HOCRPage* m_previewPage; private slots: void backendChanged(); void toggleBackendHint(); void importMetadataFromSource(); void imageFormatChanged(); void imageCompressionChanged(); void paperSizeChanged(); void updatePreview(); void updateValid(); }; #endif // HOCRPDFEXPORTWIDGET_HH gImageReader-3.4.0/qt/src/hocr/HOCRPdfExporter.cc000066400000000000000000000611601417507262200214370ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "Displayer.hh" #include "common.hh" #include "CCITTFax4Encoder.hh" #include "HOCRPdfExporter.hh" #include "HOCRPdfExportWidget.hh" #include "HOCRDocument.hh" #include "MainWindow.hh" #include "PaperSize.hh" #include "SourceManager.hh" #include "Utils.hh" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include bool HOCRPdfExporter::run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* settings) { const PDFSettings* pdfSettings = static_cast(settings); int pageCount = hocrdocument->pageCount(); QString errMsg; MainWindow::ProgressMonitor monitor(pageCount); MAIN->showProgress(&monitor); double pageWidth, pageHeight; // Page dimensions are in points: 1 in = 72 pt if(pdfSettings->paperSize == "custom") { pageWidth = pdfSettings->paperWidthIn * 72.0; pageHeight = pdfSettings->paperHeightIn * 72.0; } else if (pdfSettings->paperSize != "source") { auto inchSize = PaperSize::getSize(PaperSize::inch, pdfSettings->paperSize.toStdString(), pdfSettings->paperSizeLandscape); pageWidth = inchSize.width * 72.0; pageHeight = inchSize.height * 72.0; } QFont defaultFont(pdfSettings->fallbackFontFamily, pdfSettings->fallbackFontSize); HOCRPdfPrinter* painter = nullptr; if(pdfSettings->backend == PDFSettings::BackendPoDoFo) { painter = HOCRPoDoFoPdfPrinter::create(outname, *pdfSettings, defaultFont, errMsg); } else if(pdfSettings->backend == PDFSettings::BackendQPrinter) { painter = new HOCRQPrinterPdfPrinter(outname, pdfSettings->creator, defaultFont); } bool success = Utils::busyTask([&] { for(int i = 0; i < pageCount; ++i) { if(monitor.cancelled()) { errMsg = _("The operation was cancelled"); return false; } const HOCRPage* page = hocrdocument->page(i); if(page->isEnabled()) { QRect bbox = page->bbox(); QString sourceFile = page->sourceFile(); // If the source file is an image, its "resolution" is actually just the scale factor that was used for recognizing. bool isImage = !sourceFile.endsWith(".pdf", Qt::CaseInsensitive) && !sourceFile.endsWith(".djvu", Qt::CaseInsensitive); int sourceDpi = page->resolution(); int sourceScale = sourceDpi; if(isImage) { sourceDpi *= pdfSettings->assumedImageDpi / 100; } // [pt] = 72 * [in] // [in] = 1 / dpi * [px] // => [pt] = 72 / dpi * [px] double px2pt = (72.0 / sourceDpi); double imgScale = double(pdfSettings->outputDpi) / sourceDpi; bool success = false; if(isImage) { QMetaObject::invokeMethod(this, "setSource", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), Q_ARG(QString, sourceFile), Q_ARG(int, page->pageNr()), Q_ARG(int, int(sourceScale * imgScale)), Q_ARG(double, page->angle())); } else { QMetaObject::invokeMethod(this, "setSource", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), Q_ARG(QString, sourceFile), Q_ARG(int, page->pageNr()), Q_ARG(int, pdfSettings->outputDpi), Q_ARG(double, page->angle())); } if(success) { if(pdfSettings->paperSize == "source") { pageWidth = bbox.width() * px2pt; pageHeight = bbox.height() * px2pt; } double offsetX = 0.5 * (pageWidth - bbox.width() * px2pt); double offsetY = 0.5 * (pageHeight - bbox.height() * px2pt); if(!painter->createPage(pageWidth, pageHeight, offsetX, offsetY, errMsg)) { return false; } painter->printChildren(page, *pdfSettings, px2pt, imgScale, double(sourceScale) / sourceDpi); if(pdfSettings->overlay) { QRect scaledRect(imgScale * bbox.left(), imgScale * bbox.top(), imgScale * bbox.width(), imgScale * bbox.height()); QRect printRect(bbox.left() * px2pt, bbox.top() * px2pt, bbox.width() * px2pt, bbox.height() * px2pt); QImage selection; QMetaObject::invokeMethod(painter, "getSelection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QImage, selection), Q_ARG(QRect, scaledRect)); painter->drawImage(printRect, selection, *pdfSettings); } QMetaObject::invokeMethod(this, "setSource", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), Q_ARG(QString, page->sourceFile()), Q_ARG(int, page->pageNr()), Q_ARG(int, sourceScale), Q_ARG(double, page->angle())); painter->finishPage(); } else { errMsg = _("Failed to render page %1").arg(page->title()); return false; } } monitor.increaseProgress(); } return painter->finishDocument(errMsg); }, _("Exporting to PDF...")); delete painter; MAIN->hideProgress(); if(!success) { QMessageBox::warning(MAIN, _("Export failed"), _("The PDF export failed: %1.").arg(errMsg)); } else { bool openAfterExport = ConfigSettings::get("openafterexport")->getValue(); if(openAfterExport) { QDesktopServices::openUrl(QUrl::fromLocalFile(outname)); } } return success; } bool HOCRPdfExporter::setSource(const QString& sourceFile, int page, int dpi, double angle) { if(MAIN->getSourceManager()->addSource(sourceFile, true)) { MAIN->getDisplayer()->setup(&page, &dpi, &angle); return true; } else { return false; } } void HOCRPdfPrinter::printChildren(const HOCRItem* item, const HOCRPdfExporter::PDFSettings& pdfSettings, double px2pu/*pixels to printer units*/, double imgScale, double fontScale) { if(!item->isEnabled()) { return; } if(pdfSettings.fontSize != -1) { setFontSize(pdfSettings.fontSize * fontScale); } QString itemClass = item->itemClass(); QRect itemRect = item->bbox(); int childCount = item->children().size(); if(itemClass == "ocr_par" && pdfSettings.uniformizeLineSpacing) { double yInc = double(itemRect.height()) / childCount; double y = itemRect.top() + yInc; QPair baseline = childCount > 0 ? item->children()[0]->baseLine() : qMakePair(0.0, 0.0); for(int iLine = 0; iLine < childCount; ++iLine, y += yInc) { HOCRItem* lineItem = item->children()[iLine]; int x = itemRect.x(); int prevWordRight = itemRect.x(); for(int iWord = 0, nWords = lineItem->children().size(); iWord < nWords; ++iWord) { HOCRItem* wordItem = lineItem->children()[iWord]; if(!wordItem->isEnabled()) { continue; } QRect wordRect = wordItem->bbox(); setFontFamily(pdfSettings.fontFamily.isEmpty() ? wordItem->fontFamily() : pdfSettings.fontFamily, wordItem->fontBold(), wordItem->fontItalic()); if(pdfSettings.fontSize == -1) { setFontSize(wordItem->fontSize() * pdfSettings.detectedFontScaling * fontScale); } // If distance from previous word is large, keep the space if(wordRect.x() - prevWordRight > pdfSettings.preserveSpaceWidth * getAverageCharWidth() / px2pu) { x = wordRect.x(); } prevWordRight = wordRect.right(); QString text = wordItem->text(); if(iWord == nWords - 1 && pdfSettings.sanitizeHyphens) { text.replace(QRegularExpression("[-\u2014]\\s*$"), "-"); } double wordBaseline = (x - itemRect.x()) * baseline.first + baseline.second; drawText(x * px2pu, (y + wordBaseline) * px2pu, text); x += getTextWidth(text + " ") / px2pu; } } } else if(itemClass == "ocr_line" && !pdfSettings.uniformizeLineSpacing) { QPair baseline = item->baseLine(); for(int iWord = 0, nWords = item->children().size(); iWord < nWords; ++iWord) { HOCRItem* wordItem = item->children()[iWord]; if(!wordItem->isEnabled()) { continue; } QRect wordRect = wordItem->bbox(); setFontFamily(pdfSettings.fontFamily.isEmpty() ? wordItem->fontFamily() : pdfSettings.fontFamily, wordItem->fontBold(), wordItem->fontItalic()); if(pdfSettings.fontSize == -1) { setFontSize(wordItem->fontSize() * pdfSettings.detectedFontScaling * fontScale); } double y = itemRect.bottom() + (wordRect.center().x() - itemRect.x()) * baseline.first + baseline.second; QString text = wordItem->text(); if(iWord == nWords - 1 && pdfSettings.sanitizeHyphens) { text.replace(QRegularExpression("[-\u2014]\\s*$"), "-"); } drawText(wordRect.x() * px2pu, y * px2pu, text); } } else if(itemClass == "ocr_graphic" && !pdfSettings.overlay) { QRect scaledItemRect(itemRect.left() * imgScale, itemRect.top() * imgScale, itemRect.width() * imgScale, itemRect.height() * imgScale); QRect printRect(itemRect.left() * px2pu, itemRect.top() * px2pu, itemRect.width() * px2pu, itemRect.height() * px2pu); QImage selection; QMetaObject::invokeMethod(this, "getSelection", QThread::currentThread() == qApp->thread() ? Qt::DirectConnection : Qt::BlockingQueuedConnection, Q_RETURN_ARG(QImage, selection), Q_ARG(QRect, scaledItemRect)); drawImage(printRect, selection, pdfSettings); } else { for(int i = 0, n = item->children().size(); i < n; ++i) { printChildren(item->children()[i], pdfSettings, px2pu, imgScale, fontScale); } } } QImage HOCRPdfPrinter::getSelection(const QRect& bbox) { Displayer* displayer = MAIN->getDisplayer(); return displayer->getImage(bbox.translated(displayer->getSceneBoundingRect().toRect().topLeft())); } HOCRQPainterPdfPrinter::HOCRQPainterPdfPrinter(QPainter* painter, const QFont& defaultFont) : m_painter(painter), m_defaultFont(defaultFont) { m_curFont = m_defaultFont; } void HOCRQPainterPdfPrinter::setFontFamily(const QString& family, bool bold, bool italic) { float curSize = m_curFont.pointSize(); if(m_fontDatabase.hasFamily(family)) { m_curFont.setFamily(family); } else { m_curFont = m_defaultFont; } m_curFont.setPointSize(curSize); m_curFont.setBold(bold); m_curFont.setItalic(italic); m_painter->setFont(m_curFont); } void HOCRQPainterPdfPrinter::setFontSize(double pointSize) { if(pointSize != m_curFont.pointSize()) { m_curFont.setPointSize(pointSize); m_painter->setFont(m_curFont); } } void HOCRQPainterPdfPrinter::drawText(double x, double y, const QString& text) { m_painter->drawText(m_offsetX + x, m_offsetY + y, text); } void HOCRQPainterPdfPrinter::drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) { QImage img = convertedImage(image, settings.colorFormat, settings.conversionFlags); if(settings.compression == HOCRPdfExporter::PDFSettings::CompressJpeg) { QByteArray data; QBuffer buffer(&data); img.save(&buffer, "jpg", settings.compressionQuality); img = QImage::fromData(data); } m_painter->drawImage(bbox, img); } double HOCRQPainterPdfPrinter::getAverageCharWidth() const { return m_painter->fontMetrics().averageCharWidth(); } double HOCRQPainterPdfPrinter::getTextWidth(const QString& text) const { return m_painter->fontMetrics().horizontalAdvance(text); } HOCRQPrinterPdfPrinter::HOCRQPrinterPdfPrinter(const QString& filename, const QString& creator, const QFont& defaultFont) : HOCRQPainterPdfPrinter(nullptr, defaultFont) { m_printer.setOutputFormat(QPrinter::PdfFormat); m_printer.setOutputFileName(filename); m_printer.setResolution(72); // This to ensure that painter units are points - images are passed pre-scaled to drawImage, so that the resulting dpi in the box is the output dpi (the document resolution only matters for images) m_printer.setFontEmbeddingEnabled(true); m_printer.setFullPage(true); m_printer.setCreator(creator); } HOCRQPrinterPdfPrinter::~HOCRQPrinterPdfPrinter() { delete m_painter; } bool HOCRQPrinterPdfPrinter::createPage(double width, double height, double offsetX, double offsetY, QString& errMsg) { m_printer.setPageSize(QPageSize(QSizeF(width, height), QPageSize::Point)); if(!m_firstPage) { if(!m_printer.newPage()) { return false; } } else { // Need to create painter after setting paper size, otherwise default paper size is used for first page... m_painter = new QPainter(); m_painter->setRenderHint(QPainter::Antialiasing); if(!m_painter->begin(&m_printer)) { errMsg = _("Failed to write to file"); return false; } m_firstPage = false; } m_curFont = m_defaultFont; m_painter->setFont(m_curFont); m_offsetX = offsetX; m_offsetY = offsetY; return true; } bool HOCRQPrinterPdfPrinter::finishDocument(QString& /*errMsg*/) { return m_painter->end(); } void HOCRQPrinterPdfPrinter::drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) { QImage img = convertedImage(image, settings.colorFormat, settings.conversionFlags); m_painter->drawImage(bbox, img); } #if PODOFO_VERSION < PODOFO_MAKE_VERSION(0,9,3) namespace PoDoFo { class PdfImageCompat : public PoDoFo::PdfImage { using PdfImage::PdfImage; public: void SetImageDataRaw( unsigned int nWidth, unsigned int nHeight, unsigned int nBitsPerComponent, PdfInputStream* pStream ) { m_rRect.SetWidth( nWidth ); m_rRect.SetHeight( nHeight ); this->GetObject()->GetDictionary().AddKey( "Width", PdfVariant( static_cast(nWidth) ) ); this->GetObject()->GetDictionary().AddKey( "Height", PdfVariant( static_cast(nHeight) ) ); this->GetObject()->GetDictionary().AddKey( "BitsPerComponent", PdfVariant( static_cast(nBitsPerComponent) ) ); PdfVariant var; m_rRect.ToVariant( var ); this->GetObject()->GetDictionary().AddKey( "BBox", var ); this->GetObject()->GetStream()->SetRawData( pStream, -1 ); } }; } #endif HOCRPoDoFoPdfPrinter* HOCRPoDoFoPdfPrinter::create(const QString& filename, const HOCRPdfExporter::PDFSettings& settings, const QFont& defaultFont, QString& errMsg) { PoDoFo::PdfStreamedDocument* document = nullptr; PoDoFo::PdfFont* defaultPdfFont = nullptr; #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) const PoDoFo::PdfEncoding* pdfFontEncoding = PoDoFo::PdfEncodingFactory::GlobalIdentityEncodingInstance(); #else PoDoFo::PdfEncoding* pdfFontEncoding = new PoDoFo::PdfIdentityEncoding; #endif try { const std::string password = settings.password.toStdString(); PoDoFo::PdfEncrypt* encrypt = nullptr; if(!password.empty()) { encrypt = PoDoFo::PdfEncrypt::CreatePdfEncrypt(password, password, PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Print | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Edit | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Copy | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_EditNotes | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_FillAndSign | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_Accessible | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_DocAssembly | PoDoFo::PdfEncrypt::EPdfPermissions::ePdfPermissions_HighPrint, PoDoFo::PdfEncrypt::EPdfEncryptAlgorithm::ePdfEncryptAlgorithm_RC4V2); } PoDoFo::EPdfVersion pdfVersion = PoDoFo::ePdfVersion_Default; switch(settings.version) { case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_0: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_0; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_1: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_1; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_2: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_2; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_3: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_3; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_4: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_4; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_5: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_5; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_6: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_6; break; case HOCRPdfExporter::PDFSettings::Version::PdfVersion_1_7: pdfVersion = PoDoFo::EPdfVersion::ePdfVersion_1_7; break; } document = new PoDoFo::PdfStreamedDocument(filename.toLocal8Bit().data(), pdfVersion, encrypt); } catch(PoDoFo::PdfError& err) { errMsg = err.what(); return nullptr; } QFontInfo finfo(defaultFont); // Attempt to load the default/fallback font to ensure it is valid try { #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) defaultPdfFont = document->CreateFontSubset(finfo.family().toLocal8Bit().data(), false, false, false, pdfFontEncoding); #else defaultPdfFont = document->CreateFontSubset(finfo.family().toLocal8Bit().data(), false, false, pdfFontEncoding); #endif } catch(PoDoFo::PdfError&) { } if(!defaultPdfFont) { errMsg = _("The PDF library could not load the font '%1'.").arg(defaultFont.family()); return nullptr; } // Set PDF info PoDoFo::PdfInfo* pdfInfo = document->GetInfo(); pdfInfo->SetProducer(settings.producer.toStdString()); pdfInfo->SetCreator(settings.creator.toStdString()); pdfInfo->SetTitle(settings.title.toStdString()); pdfInfo->SetSubject(settings.subject.toStdString()); pdfInfo->SetKeywords(settings.keywords.toStdString()); pdfInfo->SetAuthor(settings.author.toStdString()); return new HOCRPoDoFoPdfPrinter(document, pdfFontEncoding, defaultPdfFont, defaultFont.family(), defaultFont.pointSize()); } HOCRPoDoFoPdfPrinter::HOCRPoDoFoPdfPrinter(PoDoFo::PdfStreamedDocument* document, const PoDoFo::PdfEncoding* fontEncoding, PoDoFo::PdfFont* defaultFont, const QString& defaultFontFamily, double defaultFontSize) : m_document(document), m_pdfFontEncoding(fontEncoding), m_defaultFont(defaultFont), m_defaultFontFamily(defaultFontFamily), m_defaultFontSize(defaultFontSize) { m_painter = new PoDoFo::PdfPainter(); } HOCRPoDoFoPdfPrinter::~HOCRPoDoFoPdfPrinter() { #if PODOFO_VERSION < PODOFO_MAKE_VERSION(0,9,3) delete m_pdfFontEncoding; #endif delete m_document; delete m_painter; // Fonts are deleted by the internal PoDoFo font cache of the document } bool HOCRPoDoFoPdfPrinter::createPage(double width, double height, double offsetX, double offsetY, QString& /*errMsg*/) { PoDoFo::PdfPage* pdfpage = m_document->CreatePage(PoDoFo::PdfRect(0, 0, width, height)); m_painter->SetPage(pdfpage); m_pageHeight = m_painter->GetPage()->GetPageSize().GetHeight(); m_painter->SetFont(m_defaultFont); if(m_defaultFontSize > 0) { m_painter->GetFont()->SetFontSize(m_defaultFontSize); } m_offsetX = offsetX; m_offsetY = offsetY; return true; } void HOCRPoDoFoPdfPrinter::finishPage() { m_painter->FinishPage(); } bool HOCRPoDoFoPdfPrinter::finishDocument(QString& errMsg) { try { m_document->Close(); } catch(PoDoFo::PdfError& e) { errMsg = e.what(); return false; } return true; } void HOCRPoDoFoPdfPrinter::setFontFamily(const QString& family, bool bold, bool italic) { float curSize = m_painter->GetFont()->GetFontSize(); m_painter->SetFont(getFont(family, bold, italic)); m_painter->GetFont()->SetFontSize(curSize); } void HOCRPoDoFoPdfPrinter::setFontSize(double pointSize) { m_painter->GetFont()->SetFontSize(pointSize); } void HOCRPoDoFoPdfPrinter::drawText(double x, double y, const QString& text) { PoDoFo::PdfString pdfString(reinterpret_cast(text.toUtf8().data())); m_painter->DrawText(m_offsetX + x, m_pageHeight - m_offsetY - y, pdfString); } void HOCRPoDoFoPdfPrinter::drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) { QImage img = convertedImage(image, settings.colorFormat, settings.conversionFlags); if(settings.colorFormat == QImage::Format_Mono) { img.invertPixels(); } #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) PoDoFo::PdfImage pdfImage(m_document); #else PoDoFo::PdfImageCompat pdfImage(m_document); #endif pdfImage.SetImageColorSpace(img.format() == QImage::Format_RGB888 ? PoDoFo::ePdfColorSpace_DeviceRGB : PoDoFo::ePdfColorSpace_DeviceGray); int width = img.width(); int height = img.height(); int sampleSize = settings.colorFormat == QImage::Format_Mono ? 1 : 8; if(settings.compression == HOCRPdfExporter::PDFSettings::CompressZip) { // QImage has 32-bit aligned scanLines, but we need a continuous buffer int numComponents = settings.colorFormat == QImage::Format_RGB888 ? 3 : 1; int bytesPerLine = numComponents * ((width * sampleSize) / 8 + ((width * sampleSize) % 8 != 0)); QVector buf(bytesPerLine * height); for(int y = 0; y < height; ++y) { std::memcpy(buf.data() + y * bytesPerLine, img.scanLine(y), bytesPerLine); } PoDoFo::PdfMemoryInputStream is(buf.data(), bytesPerLine * height); pdfImage.SetImageData(width, height, sampleSize, &is, {PoDoFo::ePdfFilter_FlateDecode}); } else if(settings.compression == HOCRPdfExporter::PDFSettings::CompressJpeg) { PoDoFo::PdfName dctFilterName(PoDoFo::PdfFilterFactory::FilterTypeToName(PoDoFo::ePdfFilter_DCTDecode)); pdfImage.GetObject()->GetDictionary().AddKey(PoDoFo::PdfName::KeyFilter, dctFilterName); QByteArray data; QBuffer buffer(&data); img.save(&buffer, "jpg", settings.compressionQuality); PoDoFo::PdfMemoryInputStream is(data.data(), data.size()); pdfImage.SetImageDataRaw(width, height, sampleSize, &is); } else if(settings.compression == HOCRPdfExporter::PDFSettings::CompressFax4) { PoDoFo::PdfName faxFilterName(PoDoFo::PdfFilterFactory::FilterTypeToName(PoDoFo::ePdfFilter_CCITTFaxDecode)); pdfImage.GetObject()->GetDictionary().AddKey(PoDoFo::PdfName::KeyFilter, faxFilterName); PoDoFo::PdfDictionary decodeParams; decodeParams.AddKey("Columns", PoDoFo::PdfObject(PoDoFo::pdf_int64(img.width()))); decodeParams.AddKey("Rows", PoDoFo::PdfObject(PoDoFo::pdf_int64(img.height()))); decodeParams.AddKey("K", PoDoFo::PdfObject(PoDoFo::pdf_int64(-1))); // K < 0 --- Pure two-dimensional encoding (Group 4) pdfImage.GetObject()->GetDictionary().AddKey("DecodeParms", PoDoFo::PdfObject(decodeParams)); CCITTFax4Encoder encoder; uint32_t encodedLen = 0; uint8_t* encoded = encoder.encode(img.constBits(), img.width(), img.height(), img.bytesPerLine(), encodedLen); PoDoFo::PdfMemoryInputStream is(reinterpret_cast(encoded), encodedLen); pdfImage.SetImageDataRaw(img.width(), img.height(), sampleSize, &is); } m_painter->DrawImage(m_offsetX + bbox.x(), m_pageHeight - m_offsetY - (bbox.y() + bbox.height()), &pdfImage, bbox.width() / double(image.width()), bbox.height() / double(image.height())); } double HOCRPoDoFoPdfPrinter::getAverageCharWidth() const { return m_painter->GetFont()->GetFontMetrics()->CharWidth(static_cast('x')); } double HOCRPoDoFoPdfPrinter::getTextWidth(const QString& text) const { PoDoFo::PdfString pdfString(reinterpret_cast(text.toUtf8().data())); return m_painter->GetFont()->GetFontMetrics()->StringWidth(pdfString); } PoDoFo::PdfFont* HOCRPoDoFoPdfPrinter::getFont(QString family, bool bold, bool italic) { QString key = family + (bold ? "@bold" : "") + (italic ? "@italic" : ""); auto it = m_fontCache.find(key); if(it == m_fontCache.end()) { if(family.isEmpty() || !m_fontDatabase.hasFamily(family)) { family = m_defaultFontFamily; } PoDoFo::PdfFont* font = nullptr; try { #if PODOFO_VERSION >= PODOFO_MAKE_VERSION(0,9,3) font = m_document->CreateFontSubset(family.toLocal8Bit().data(), bold, italic, false, m_pdfFontEncoding); #else font = m_document->CreateFontSubset(family.toLocal8Bit().data(), bold, italic, m_pdfFontEncoding); #endif it = m_fontCache.insert(key, font); } catch(PoDoFo::PdfError& /*err*/) { it = m_fontCache.insert(key, m_defaultFont);; } } return it.value(); } HOCRPdfExportDialog::HOCRPdfExportDialog(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage, QWidget* parent) : QDialog(parent) { setLayout(new QVBoxLayout); m_widget = new HOCRPdfExportWidget(displayerTool, hocrdocument, hocrpage); layout()->addWidget(m_widget); QDialogButtonBox* bbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); layout()->addWidget(bbox); connect(bbox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(bbox, &QDialogButtonBox::rejected, this, &QDialog::reject); } HOCRPdfExporter::PDFSettings HOCRPdfExportDialog::getPdfSettings() const { return m_widget->getPdfSettings(); } gImageReader-3.4.0/qt/src/hocr/HOCRPdfExporter.hh000066400000000000000000000150471417507262200214540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRPdfExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPDFEXPORTER_HH #define HOCRPDFEXPORTER_HH #include "HOCRExporter.hh" #include #include #include #include #include #include class DisplayerToolHOCR; class HOCRItem; class HOCRPage; class HOCRPdfExportWidget; namespace PoDoFo { class PdfEncoding; class PdfFont; class PdfPainter; class PdfStreamedDocument; } class HOCRPdfExporter : public HOCRExporter { Q_OBJECT public: struct PDFSettings : ExporterSettings { QImage::Format colorFormat; Qt::ImageConversionFlags conversionFlags; enum Compression { CompressZip, CompressFax4, CompressJpeg } compression; int compressionQuality; QString fontFamily; int fontSize; QString fallbackFontFamily; int fallbackFontSize; bool uniformizeLineSpacing; int preserveSpaceWidth; bool overlay; double detectedFontScaling; bool sanitizeHyphens; int assumedImageDpi; int outputDpi; QString paperSize; bool paperSizeLandscape; double paperWidthIn; double paperHeightIn; enum PDFBackend { BackendPoDoFo, BackendQPrinter} backend; enum Version { PdfVersion_1_0 = 0, PdfVersion_1_1, PdfVersion_1_2, PdfVersion_1_3, PdfVersion_1_4, PdfVersion_1_5, PdfVersion_1_6, PdfVersion_1_7 } version; QString password; QString producer; QString creator; QString title; QString subject; QString keywords; QString author; }; bool run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* settings = nullptr) override; private slots: bool setSource(const QString& sourceFile, int page, int dpi, double angle); }; class HOCRPdfPrinter : public QObject { Q_OBJECT public: virtual void setFontFamily(const QString& family, bool bold, bool italic) = 0; virtual void setFontSize(double pointSize) = 0; virtual void drawText(double x, double y, const QString& text) = 0; virtual void drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) = 0; virtual double getAverageCharWidth() const = 0; virtual double getTextWidth(const QString& text) const = 0; virtual bool createPage(double /*width*/, double /*height*/, double /*offsetX*/, double /*offsetY*/, QString& /*errMsg*/) { return true; } virtual void finishPage() {} virtual bool finishDocument(QString& /*errMsg*/) { return true; } void printChildren(const HOCRItem* item, const HOCRPdfExporter::PDFSettings& pdfSettings, double px2pu/*pixels to printer units*/, double imgScale = 1., double fontScale = 1.); protected: QImage convertedImage(const QImage& image, QImage::Format targetFormat, Qt::ImageConversionFlags flags) const { return image.format() == targetFormat ? image : image.convertToFormat(targetFormat, flags); } private slots: QImage getSelection(const QRect& bbox); }; class HOCRQPainterPdfPrinter : public HOCRPdfPrinter { public: HOCRQPainterPdfPrinter(QPainter* painter, const QFont& defaultFont); void setFontFamily(const QString& family, bool bold, bool italic) override; void setFontSize(double pointSize) override; void drawText(double x, double y, const QString& text) override; void drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) override; double getAverageCharWidth() const override; double getTextWidth(const QString& text) const override; protected: QFontDatabase m_fontDatabase; QPainter* m_painter; QFont m_curFont; QFont m_defaultFont; double m_offsetX = 0.0; double m_offsetY = 0.0; }; class HOCRQPrinterPdfPrinter : public HOCRQPainterPdfPrinter { public: HOCRQPrinterPdfPrinter(const QString& filename, const QString& creator, const QFont& defaultFont); ~HOCRQPrinterPdfPrinter(); bool createPage(double width, double height, double offsetX, double offsetY, QString& errMsg) override; bool finishDocument(QString& /*errMsg*/) override; void drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) override; private: QPrinter m_printer; bool m_firstPage = true; }; class HOCRPoDoFoPdfPrinter : public HOCRPdfPrinter { public: static HOCRPoDoFoPdfPrinter* create(const QString& filename, const HOCRPdfExporter::PDFSettings& settings, const QFont& defaultFont, QString& errMsg); HOCRPoDoFoPdfPrinter(PoDoFo::PdfStreamedDocument* document, const PoDoFo::PdfEncoding* fontEncoding, PoDoFo::PdfFont* defaultFont, const QString& defaultFontFamily, double defaultFontSize); ~HOCRPoDoFoPdfPrinter(); bool createPage(double width, double height, double offsetX, double offsetY, QString& /*errMsg*/) override; void finishPage() override; bool finishDocument(QString& errMsg) override; void setFontFamily(const QString& family, bool bold, bool italic) override; void setFontSize(double pointSize) override; void drawText(double x, double y, const QString& text) override; void drawImage(const QRect& bbox, const QImage& image, const HOCRPdfExporter::PDFSettings& settings) override; double getAverageCharWidth() const override; double getTextWidth(const QString& text) const override; private: QFontDatabase m_fontDatabase; QMap m_fontCache; PoDoFo::PdfPainter* m_painter = nullptr; PoDoFo::PdfStreamedDocument* m_document = nullptr; const PoDoFo::PdfEncoding* m_pdfFontEncoding; PoDoFo::PdfFont* m_defaultFont; QString m_defaultFontFamily; double m_defaultFontSize = -1.0; double m_pageHeight = 0.0; double m_offsetX = 0.0; double m_offsetY = 0.0; PoDoFo::PdfFont* getFont(QString family, bool bold, bool italic); }; class HOCRPdfExportDialog : public QDialog { Q_OBJECT public: HOCRPdfExportDialog(DisplayerToolHOCR* displayerTool, const HOCRDocument* hocrdocument, const HOCRPage* hocrpage, QWidget* parent = nullptr); HOCRPdfExporter::PDFSettings getPdfSettings() const; private: HOCRPdfExportWidget* m_widget = nullptr; }; #endif // HOCRPDFEXPORTER_HH gImageReader-3.4.0/qt/src/hocr/HOCRProofReadWidget.cc000066400000000000000000000512761417507262200222310ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRProofReadWidget.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include "Displayer.hh" #include "ConfigSettings.hh" #include "HOCRDocument.hh" #include "HOCRProofReadWidget.hh" #include "HOCRSpellChecker.hh" #include "MainWindow.hh" #include "SourceManager.hh" class HOCRProofReadWidget::LineEdit : public QLineEdit { public: LineEdit(HOCRProofReadWidget* proofReadWidget, HOCRItem* wordItem, QWidget* parent = nullptr) : QLineEdit(wordItem->text(), parent), m_proofReadWidget(proofReadWidget), m_wordItem(wordItem) { connect(this, &LineEdit::textChanged, this, &LineEdit::onTextChanged); HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); connect(document, &HOCRDocument::dataChanged, this, &LineEdit::onModelDataChanged); connect(document, &HOCRDocument::itemAttributeChanged, this, &LineEdit::onAttributeChanged); QModelIndex index = document->indexAtItem(m_wordItem); setStyleSheet( getStyle( document->indexIsMisspelledWord(index) ) ); QFont ft = font(); ft.setBold(m_wordItem->fontBold()); ft.setItalic(m_wordItem->fontItalic()); setFont(ft); } const HOCRItem* item() const { return m_wordItem; } private: HOCRProofReadWidget* m_proofReadWidget = nullptr; HOCRItem* m_wordItem = nullptr; bool m_blockSetText = false; QString getStyle(bool misspelled) const { QStringList styles; if(misspelled) { styles.append( "color: red;" ); } return styles.isEmpty() ? "" : QString("QLineEdit {%1}").arg(styles.join(" ")); } void onTextChanged() { HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); // Update data in document QModelIndex index = document->indexAtItem(m_wordItem); m_blockSetText = true; document->setData(index, text(), Qt::EditRole); m_blockSetText = false; } void onModelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector& roles) { HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); QItemSelectionRange range(topLeft, bottomRight); QModelIndex index = document->indexAtItem(m_wordItem); if(range.contains(index)) { if(roles.contains(Qt::DisplayRole) && !m_blockSetText) { setText(m_wordItem->text()); } if(roles.contains(Qt::ForegroundRole)) { setStyleSheet( getStyle( document->indexIsMisspelledWord(index) ) ); } } } void onAttributeChanged(const QModelIndex& index, const QString& name, const QString& /*value*/) { HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); if(document->itemAtIndex(index) == m_wordItem) { if(name == "bold" || name == "italic") { QFont ft = font(); ft.setBold(m_wordItem->fontBold()); ft.setItalic(m_wordItem->fontItalic()); setFont(ft); } else if(name == "title:bbox") { QPoint sceneCorner = MAIN->getDisplayer()->getSceneBoundingRect().toRect().topLeft(); QRect sceneBBox = m_wordItem->bbox().translated(sceneCorner); QPoint bottomLeft = MAIN->getDisplayer()->mapFromScene(sceneBBox.bottomLeft()); QPoint bottomRight = MAIN->getDisplayer()->mapFromScene(sceneBBox.bottomRight()); int frameX = parentWidget()->parentWidget()->parentWidget()->pos().x(); move(bottomLeft.x() - frameX, 0); setFixedWidth(bottomRight.x() - bottomLeft.x() + 8); // 8: border + padding } } } void keyPressEvent(QKeyEvent* ev) override { HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); bool nextLine = (ev->modifiers() == Qt::NoModifier && ev->key() == Qt::Key_Down) || (ev->key() == Qt::Key_Tab && m_wordItem == m_wordItem->parent()->children().last()); bool prevLine = (ev->modifiers() == Qt::NoModifier && ev->key() == Qt::Key_Up) || (ev->key() == Qt::Key_Backtab && m_wordItem == m_wordItem->parent()->children().first()); if(nextLine || prevLine) { bool next = false; QModelIndex index; if(nextLine) { next = true; index = document->indexAtItem(m_wordItem); // Move to first word of next line index = document->prevOrNextIndex(next, index, "ocr_line"); index = document->prevOrNextIndex(true, index, "ocrx_word"); } else if(prevLine) { index = document->indexAtItem(m_wordItem); // Move to last word of prev line index = document->prevOrNextIndex(false, index, "ocr_line"); index = document->prevOrNextIndex(false, index, "ocrx_word"); } m_proofReadWidget->documentTree()->setCurrentIndex(index); } else if(ev->key() == Qt::Key_Space && ev->modifiers() == Qt::ControlModifier) { // Spelling menu QModelIndex index = document->indexAtItem(m_wordItem); QMenu menu; document->addSpellingActions(&menu, index); menu.exec(mapToGlobal(QPoint(0, -menu.sizeHint().height()))); } else if((ev->key() == Qt::Key_Enter || ev->key() == Qt::Key_Return) && ev->modifiers() & Qt::ControlModifier) { QModelIndex index = document->indexAtItem(m_wordItem); document->addWordToDictionary(index); } else if(ev->key() == Qt::Key_B && ev->modifiers() == Qt::ControlModifier) { // Bold QModelIndex index = document->indexAtItem(m_wordItem); document->editItemAttribute(index, "bold", m_wordItem->fontBold() ? "0" : "1"); } else if(ev->key() == Qt::Key_I && ev->modifiers() == Qt::ControlModifier) { // Italic QModelIndex index = document->indexAtItem(m_wordItem); document->editItemAttribute(index, "italic", m_wordItem->fontItalic() ? "0" : "1"); } else if((ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Down) && ev->modifiers() & Qt::ControlModifier) { // Adjust bbox top/bottom QModelIndex index = document->indexAtItem(m_wordItem); QRect bbox = m_wordItem->bbox(); if(ev->modifiers() & Qt::ShiftModifier) { bbox.setBottom(bbox.bottom() + (ev->key() == Qt::Key_Up ? -1 : 1)); } else { bbox.setTop(bbox.top() + (ev->key() == Qt::Key_Up ? -1 : 1)); } QString bboxstr = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); document->editItemAttribute(index, "title:bbox", bboxstr); } else if((ev->key() == Qt::Key_Left || ev->key() == Qt::Key_Right) && ev->modifiers() & Qt::ControlModifier) { // Adjust bbox left/right QModelIndex index = document->indexAtItem(m_wordItem); QRect bbox = m_wordItem->bbox(); if(ev->modifiers() & Qt::ShiftModifier) { bbox.setRight(bbox.right() + (ev->key() == Qt::Key_Left ? -1 : 1)); } else { bbox.setLeft(bbox.left() + (ev->key() == Qt::Key_Left ? -1 : 1)); } QString bboxstr = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); document->editItemAttribute(index, "title:bbox", bboxstr); } else if(ev->key() == Qt::Key_D && ev->modifiers() == Qt::ControlModifier) { // Divide QModelIndex index = document->indexAtItem(m_wordItem); document->splitItemText(index, cursorPosition()); } else if(ev->key() == Qt::Key_M && ev->modifiers() & Qt::ControlModifier) { // Merge QModelIndex index = document->indexAtItem(m_wordItem); document->mergeItemText(index, (ev->modifiers() & Qt::ShiftModifier) != 0); } else if(ev->key() == Qt::Key_Delete && ev->modifiers() == Qt::ControlModifier) { QModelIndex index = document->indexAtItem(m_wordItem); document-> removeItem(index); } else if(ev->key() == Qt::Key_Plus && ev->modifiers() & Qt::ControlModifier) { m_proofReadWidget->adjustFontSize(+1); } else if((ev->key() == Qt::Key_Minus || ev->key() == Qt::Key_Underscore) && ev->modifiers() & Qt::ControlModifier) { m_proofReadWidget->adjustFontSize(-1); } else { QLineEdit::keyPressEvent(ev); } } void focusInEvent(QFocusEvent* ev) override { HOCRDocument* document = static_cast(m_proofReadWidget->documentTree()->model()); m_proofReadWidget->documentTree()->setCurrentIndex(document->indexAtItem(m_wordItem)); m_proofReadWidget->setConfidenceLabel(m_wordItem->getTitleAttributes()["x_wconf"].toInt()); QLineEdit::focusInEvent(ev); if(ev->reason() != Qt::MouseFocusReason) { deselect(); setCursorPosition(0); } } }; HOCRProofReadWidget::HOCRProofReadWidget(QTreeView* treeView, QWidget* parent) : QFrame(parent), m_treeView(treeView) { QVBoxLayout* layout = new QVBoxLayout; layout->setContentsMargins(2, 2, 2, 2); layout->setSpacing(2); setLayout(layout); QWidget* linesWidget = new QWidget(); m_linesLayout = new QVBoxLayout(); m_linesLayout->setContentsMargins(0, 0, 0, 0); m_linesLayout->setSpacing(0); linesWidget->setLayout(m_linesLayout); layout->addWidget(linesWidget); m_controlsWidget = new QWidget(); m_controlsWidget->setLayout(new QHBoxLayout); m_controlsWidget->layout()->setSpacing(2); m_controlsWidget->layout()->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_controlsWidget); QFont smallFont; smallFont.setPointSizeF(0.8 * smallFont.pointSizeF()); m_confidenceLabel = new QLabel(); m_confidenceLabel->setFont(smallFont); m_controlsWidget->layout()->addWidget(m_confidenceLabel); m_controlsWidget->layout()->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding)); QLabel* helpButton = new QLabel(QString("%1").arg(_("Keyboard shortcuts"))); helpButton->setFont(smallFont); connect(helpButton, &QLabel::linkActivated, this, &HOCRProofReadWidget::showShortcutsDialog); m_controlsWidget->layout()->addWidget(helpButton); QMenu* settingsMenu = new QMenu(); QWidget* numBeforeWidget = new QWidget(); numBeforeWidget->setLayout(new QHBoxLayout()); numBeforeWidget->layout()->setContentsMargins(4, 4, 4, 4); numBeforeWidget->layout()->setSpacing(2); numBeforeWidget->layout()->addWidget(new QLabel(_("Lines before:"))); m_spinLinesBefore = new QSpinBox(); m_spinLinesBefore->setRange(0, 10); numBeforeWidget->layout()->addWidget(m_spinLinesBefore); QWidgetAction* numBeforeAction = new QWidgetAction(settingsMenu); numBeforeAction->setDefaultWidget(numBeforeWidget); settingsMenu->addAction(numBeforeAction); QWidget* numAfterWidget = new QWidget(); numAfterWidget->setLayout(new QHBoxLayout()); numAfterWidget->layout()->setContentsMargins(4, 4, 4, 4); numAfterWidget->layout()->setSpacing(2); numAfterWidget->layout()->addWidget(new QLabel(_("Lines after:"))); m_spinLinesAfter = new QSpinBox(); m_spinLinesAfter->setRange(0, 10); numAfterWidget->layout()->addWidget(m_spinLinesAfter); QWidgetAction* numAfterAction = new QWidgetAction(settingsMenu); numAfterAction->setDefaultWidget(numAfterWidget); settingsMenu->addAction(numAfterAction); QToolButton* settingsButton = new QToolButton(); settingsButton->setAutoRaise(true); settingsButton->setIcon(QIcon::fromTheme("preferences-system")); settingsButton->setPopupMode(QToolButton::InstantPopup); settingsButton->setMenu(settingsMenu); m_controlsWidget->layout()->addWidget(settingsButton); setObjectName("proofReadWidget"); setFrameStyle(QFrame::StyledPanel | QFrame::Raised); setAutoFillBackground(true); setStyleSheet("QLineEdit { border: 1px solid #ddd; }"); connect(m_treeView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, [this] { updateWidget(); }); HOCRDocument* document = static_cast(m_treeView->model()); // Clear for rebuild if structure changes connect(document, &HOCRDocument::rowsAboutToBeRemoved, this, &HOCRProofReadWidget::clear); connect(document, &HOCRDocument::rowsAboutToBeInserted, this, &HOCRProofReadWidget::clear); connect(document, &HOCRDocument::rowsAboutToBeMoved, this, &HOCRProofReadWidget::clear); connect(document, &HOCRDocument::rowsRemoved, this, [this] { updateWidget(); }); connect(document, &HOCRDocument::rowsInserted, this, [this] { updateWidget(); }); connect(document, &HOCRDocument::rowsMoved, this, [this] { updateWidget(); }); connect(MAIN->getDisplayer(), &Displayer::imageChanged, this, [this] { updateWidget(true); }); connect(MAIN->getDisplayer(), &Displayer::viewportChanged, this, &HOCRProofReadWidget::repositionWidget); connect(m_spinLinesBefore, qOverload(&QSpinBox::valueChanged), this, [this] { updateWidget(true); }); connect(m_spinLinesAfter, qOverload(&QSpinBox::valueChanged), this, [this] { updateWidget(true); }); ADD_SETTING(SpinSetting("proofReadLinesBefore", m_spinLinesBefore, 1)); ADD_SETTING(SpinSetting("proofReadLinesAfter", m_spinLinesAfter, 1)); // Start hidden hide(); } void HOCRProofReadWidget::setProofreadEnabled(bool enabled) { m_enabled = enabled; if (enabled) { repositionWidget(); } else { hide(); } } void HOCRProofReadWidget::clear() { qDeleteAll(m_currentLines); m_currentLines.clear(); m_currentLine = nullptr; m_confidenceLabel->setText(""); m_confidenceLabel->setStyleSheet(""); hide(); } void HOCRProofReadWidget::updateWidget(bool force) { QModelIndex current = m_treeView->currentIndex(); int nrLinesBefore = m_spinLinesBefore->value(); int nrLinesAfter = m_spinLinesAfter->value(); HOCRDocument* document = static_cast(m_treeView->model()); const HOCRItem* item = document->itemAtIndex(current); if(!item) { clear(); return; } const HOCRItem* lineItem = nullptr; const HOCRItem* wordItem = nullptr; if(item->itemClass() == "ocrx_word") { lineItem = item->parent(); wordItem = item; } else if(item->itemClass() == "ocr_line") { lineItem = item; } else { clear(); return; } const QVector& siblings = lineItem->parent()->children(); int targetLine = lineItem->index(); if(lineItem != m_currentLine || force) { // Rebuild widget QMap newLines; int insPos = 0; for(int i = qMax(0, targetLine - nrLinesBefore), j = qMin(siblings.size() - 1, targetLine + nrLinesAfter); i <= j; ++i) { HOCRItem* linei = siblings[i]; if(m_currentLines.contains(linei)) { newLines[linei] = m_currentLines.take(linei); insPos = m_linesLayout->indexOf(newLines[linei]) + 1; } else { QWidget* lineWidget = new QWidget(); for(HOCRItem* word : siblings[i]->children()) { new LineEdit(this, word, lineWidget); // Add as child to lineWidget } m_linesLayout->insertWidget(insPos++, lineWidget); newLines.insert(linei, lineWidget); } } qDeleteAll(m_currentLines); m_currentLines = newLines; m_currentLine = lineItem; repositionWidget(); } // Select selected word or first item of middle line LineEdit* focusLineEdit = static_cast(m_currentLines[lineItem]->children()[wordItem ? wordItem->index() : 0]); if(focusLineEdit && !m_treeView->hasFocus()) { focusLineEdit->setFocus(); } } void HOCRProofReadWidget::repositionWidget() { if(m_currentLines.isEmpty() || !m_enabled) { return; } // Position frame Displayer* displayer = MAIN->getDisplayer(); int frameXmin = std::numeric_limits::max(); int frameXmax = 0; QPoint sceneCorner = displayer->getSceneBoundingRect().toRect().topLeft(); for(QWidget* lineWidget : m_currentLines) { if(lineWidget->children().isEmpty()) { continue; } // First word LineEdit* lineEdit = static_cast(lineWidget->children()[0]); QPoint bottomLeft = displayer->mapFromScene(lineEdit->item()->bbox().translated(sceneCorner).bottomLeft()); frameXmin = std::min(frameXmin, bottomLeft.x()); } QPoint bottomLeft = displayer->mapFromScene(m_currentLine->bbox().translated(sceneCorner).bottomLeft()); QPoint topLeft = displayer->mapFromScene(m_currentLine->bbox().translated(sceneCorner).topLeft()); int frameY = bottomLeft.y(); // Recompute font sizes so that text matches original as closely as possible QFont ft = font(); QFontMetrics fm(ft); double avgFactor = 0.0; int nFactors = 0; // First pass: min scaling factor, move to correct location for(QWidget* lineWidget : m_currentLines) { for(int i = 0, n = lineWidget->children().count(); i < n; ++i) { LineEdit* lineEdit = static_cast(lineWidget->children()[i]); QRect sceneBBox = lineEdit->item()->bbox().translated(sceneCorner); QPoint bottomLeft = displayer->mapFromScene(sceneBBox.bottomLeft()); QPoint bottomRight = displayer->mapFromScene(sceneBBox.bottomRight()); // Factor weighed by length double factor = (bottomRight.x() - bottomLeft.x()) / double(fm.horizontalAdvance(lineEdit->text())); avgFactor += lineEdit->text().length() * factor; nFactors += lineEdit->text().length(); lineEdit->move(bottomLeft.x() - frameXmin, 0); lineEdit->setFixedWidth(bottomRight.x() - bottomLeft.x() + 8); // 8: border + padding frameXmax = std::max(frameXmax, bottomRight.x() + 8); } } avgFactor = avgFactor > 0 ? avgFactor / nFactors : 1.; // Second pass: apply font sizes, set line heights ft.setPointSizeF(ft.pointSizeF() * avgFactor); fm = QFontMetrics(ft); for(QWidget* lineWidget : m_currentLines) { for(int i = 0, n = lineWidget->children().count(); i < n; ++i) { LineEdit* lineEdit = static_cast(lineWidget->children()[i]); QFont lineEditFont = lineEdit->font(); lineEditFont.setPointSizeF(ft.pointSizeF() + m_fontSizeDiff); lineEdit->setFont(lineEditFont); lineEdit->setFixedHeight(fm.height() + 5); } lineWidget->setFixedHeight(fm.height() + 10); } frameY += 10; updateGeometry(); resize(frameXmax - frameXmin + 2 + 2 * layout()->spacing(), m_currentLines.size() * (fm.height() + 10) + 2 * layout()->spacing() + m_controlsWidget->sizeHint().height()); // Place widget above line if it overflows page QModelIndex current = m_treeView->currentIndex(); HOCRDocument* document = static_cast(m_treeView->model()); const HOCRItem* item = document->itemAtIndex(current); QRect sceneBBox = item->page()->bbox().translated(sceneCorner); double maxy = displayer->mapFromScene(sceneBBox.bottomLeft()).y(); if(frameY + height() - maxy > 0) { frameY = topLeft.y() - height(); } move(frameXmin - layout()->spacing(), frameY); show(); } void HOCRProofReadWidget::showShortcutsDialog() { QString text = QString(_( "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "
      TabNext field
      Shift+TabPrevious field
      DownNext line
      UpPrevious line
      Ctrl+SpaceSpelling suggestions
      Ctrl+EnterAdd word to dictionary
      Ctrl+BToggle bold
      Ctrl+IToggle italic
      Ctrl+DDivide word at cursor position
      Ctrl+MMerge with previous word
      Ctrl+Shift+MMerge with next word
      Ctrl+DeleteDelete word
      Ctrl+{Left,Right}Adjust left bounding box edge
      Ctrl+Shift+{Left,Right}Adjust right bounding box edge
      Ctrl+{Up,Down}Adjust top bounding box edge
      Ctrl+Shift+{Up,Down}Adjust bottom bounding box edge
      Ctrl++Increase font size
      Ctrl+-Decrease font size
      " )); QMessageBox(QMessageBox::NoIcon, _("Keyboard Shortcuts"), text, QMessageBox::Close, MAIN).exec(); } QString HOCRProofReadWidget::confidenceStyle(int wconf) const { if(wconf < 70) { return "background: #ffb2b2;"; } else if(wconf < 80) { return "background: #ffdab0;"; } else if(wconf < 90) { return "background: #fffdb4;"; } return QString(); } void HOCRProofReadWidget::setConfidenceLabel(int wconf) { m_confidenceLabel->setText(_("Confidence: %1").arg(wconf)); QString style = confidenceStyle(wconf); m_confidenceLabel->setStyleSheet(!style.isEmpty() ? QString("QLabel { %1 }").arg(style) : ""); } void HOCRProofReadWidget::adjustFontSize(int diff) { m_fontSizeDiff += diff; repositionWidget(); } gImageReader-3.4.0/qt/src/hocr/HOCRProofReadWidget.hh000066400000000000000000000037071417507262200222370ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRProofReadWidget.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRPROOFREADWIDGET_HH #define HOCRPROOFREADWIDGET_HH #include #include class QLabel; class QSpinBox; class QTreeView; class QVBoxLayout; class HOCRItem; class HOCRProofReadWidget : public QFrame { Q_OBJECT public: HOCRProofReadWidget(QTreeView* treeView, QWidget* parent = nullptr); void setProofreadEnabled(bool enabled); void clear(); QTreeView* documentTree() const { return m_treeView; } void setConfidenceLabel(int wconf); QString confidenceStyle(int wconf) const; void adjustFontSize(int diff); private: class LineEdit; QTreeView* m_treeView = nullptr; QVBoxLayout* m_linesLayout = nullptr; const HOCRItem* m_currentLine = nullptr; QWidget* m_controlsWidget = nullptr; QLabel* m_confidenceLabel = nullptr; QMap m_currentLines; QSpinBox* m_spinLinesBefore = nullptr; QSpinBox* m_spinLinesAfter = nullptr; int m_fontSizeDiff = 0; bool m_enabled = false; // Disable auto tab handling bool focusNextPrevChild(bool) override { return false; } void repositionWidget(); private slots: void updateWidget(bool force = false); void showShortcutsDialog(); }; #endif // HOCRPROOFREADWIDGET_HH gImageReader-3.4.0/qt/src/hocr/HOCRSpellChecker.cc000066400000000000000000000061661417507262200215460ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRSpellChecker.cc * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include "HOCRSpellChecker.hh" bool HOCRSpellChecker::checkSpelling(const QString& word, QStringList* suggestions, int limit) const { QList> words; QRegularExpression dashRe("[\\x2013\\x2014]+"); QRegularExpressionMatch match; int pos = 0; while((match = dashRe.match(word, pos)).hasMatch()) { words.append(qMakePair(word.mid(pos, match.capturedStart() - pos), pos)); pos = match.capturedEnd(); } words.append(qMakePair(word.mid(pos), pos)); int perWordLimit = 0; // s = p^w => w = log_p(c) = log(c)/log(p) => p = 10^(log(c)/w) if(limit > 0) { perWordLimit = int(std::pow(10, std::log10(limit) / words.size())); } QList> wordSuggestions; bool valid = true; bool multipleWords = words.size() > 1; for(const auto& pair : words) { QString wordString = pair.first; bool wordValid = checkWord(wordString); valid &= wordValid; if(suggestions) { QList ws = getSpellingSuggestions(wordString); if(wordValid && multipleWords) { ws.prepend(wordString); } if(limit == -1) { wordSuggestions.append(ws); } else if(limit > 0) { wordSuggestions.append(ws.mid(0, perWordLimit)); } } } if(suggestions) { suggestions->clear(); QList> suggestionCombinations; generateCombinations(wordSuggestions, suggestionCombinations, 0, QList()); for(const QList& combination : suggestionCombinations) { QString s = ""; auto originalWord = words.begin(); int last = 0; int next; for(const QString& suggestedWord : combination) { next = originalWord->second; s.append(word.mid(last, next - last)); s.append(suggestedWord); last = next + originalWord->first.length(); originalWord++; } s.append(word.mid(last)); suggestions->append(s); } // Don't list the exact input word suggestions->removeOne(word); } return valid; } // each suggestion for each word => each word in each suggestion void HOCRSpellChecker::generateCombinations(const QList>& lists, QList>& results, int depth, const QList& c) const { if(depth == lists.size()) { results.append(c); return; } for(int i = 0; i < lists[depth].size(); ++i) { generateCombinations(lists, results, depth + 1, c + QList({lists[depth][i]})); } } gImageReader-3.4.0/qt/src/hocr/HOCRSpellChecker.hh000066400000000000000000000031131417507262200215450ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRSpellChecker.hh * Copyright (C) 2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRSPELLCHECKER_HH #define HOCRSPELLCHECKER_HH #include class HOCRSpellChecker : public QtSpell::Checker { public: using QtSpell::Checker::Checker; bool checkSpelling(const QString& word, QStringList* suggestions = nullptr, int limit = -1) const; // Unused interface, no-op void checkSpelling(int /*start*/ = 0, int /*end*/ = -1) override { } QString getWord(int /*pos*/, int* /*start*/ = 0, int* /*end*/ = 0) const override { return QString(); } void insertWord(int /*start*/, int /*end*/, const QString& /*word*/) override { } bool isAttached() const override { return true; } private: void generateCombinations(const QList>& lists, QList>& results, int depth, const QList& c) const; }; #endif // HOCRSPELLCHECKER_HH gImageReader-3.4.0/qt/src/hocr/HOCRTextExporter.cc000066400000000000000000000046271417507262200216570ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRTextExporter.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ConfigSettings.hh" #include "HOCRDocument.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include #include #include #include #include bool HOCRTextExporter::run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* /*settings*/) { QFile outputFile(outname); if(!outputFile.open(QIODevice::WriteOnly)) { QMessageBox::warning(MAIN, _("Export failed"), _("The text export failed: unable to write output file.")); return false; } QString output; QTextStream outputStream(&output, QIODevice::WriteOnly); for(int i = 0, n = hocrdocument->pageCount(); i < n; ++i) { const HOCRPage* page = hocrdocument->page(i); if(!page->isEnabled()) { continue; } printItem(outputStream, page); } outputFile.write(MAIN->getConfig()->useUtf8() ? output.toUtf8() : output.toLocal8Bit()); outputFile.close(); bool openAfterExport = ConfigSettings::get("openafterexport")->getValue(); if(openAfterExport) { QDesktopServices::openUrl(QUrl::fromLocalFile(outname)); } return true; } void HOCRTextExporter::printItem(QTextStream& outputStream, const HOCRItem* item, bool lastChild) { if(!item->isEnabled()) { return; } QString itemClass = item->itemClass(); if(itemClass == "ocrx_word") { outputStream << item->text(); if(!lastChild) { outputStream << " "; } } else { for(int i = 0, n = item->children().size(); i < n; ++i) { printItem(outputStream, item->children()[i], i == n - 1); } } if(itemClass == "ocr_line" || itemClass == "ocr_par") { outputStream << "\n"; } } gImageReader-3.4.0/qt/src/hocr/HOCRTextExporter.hh000066400000000000000000000024161417507262200216630ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * HOCRTextExporter.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef HOCRTEXTEXPORTER_HH #define HOCRTEXTEXPORTER_HH #include "common.hh" #include "HOCRExporter.hh" #include class HOCRItem; class QTextStream; class HOCRTextExporter : public HOCRExporter { public: bool run(const HOCRDocument* hocrdocument, const QString& outname, const ExporterSettings* settings = nullptr) override; private: void printItem(QTextStream& outputStream, const HOCRItem* item, bool lastChild = false); }; #endif // HOCRTEXTEXPORTER_HH gImageReader-3.4.0/qt/src/hocr/OutputEditorHOCR.cc000066400000000000000000001546141417507262200216530ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorHOCR.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define USE_STD_NAMESPACE #include #include #undef USE_STD_NAMESPACE #include "ConfigSettings.hh" #include "DisplayerToolHOCR.hh" #include "FileDialogs.hh" #include "HOCRDocument.hh" #include "HOCROdtExporter.hh" #include "HOCRPdfExporter.hh" #include "HOCRProofReadWidget.hh" #include "HOCRTextExporter.hh" #include "MainWindow.hh" #include "OutputEditorHOCR.hh" #include "Recognizer.hh" #include "SourceManager.hh" #include "Utils.hh" class OutputEditorHOCR::HTMLHighlighter : public QSyntaxHighlighter { public: HTMLHighlighter(QTextDocument* document) : QSyntaxHighlighter(document) { mFormatMap[NormalState].setForeground(QColor(Qt::black)); mFormatMap[InTag].setForeground(QColor(75, 75, 255)); mFormatMap[InAttrKey].setForeground(QColor(75, 200, 75)); mFormatMap[InAttrValue].setForeground(QColor(255, 75, 75)); mFormatMap[InAttrValueDblQuote].setForeground(QColor(255, 75, 75)); mStateMap[NormalState].append({QRegularExpression("<"), InTag, false}); mStateMap[InTag].append({QRegularExpression(">"), NormalState, true}); mStateMap[InTag].append({QRegularExpression("\\w+="), InAttrKey, false}); mStateMap[InAttrKey].append({QRegularExpression("'"), InAttrValue, false}); mStateMap[InAttrKey].append({QRegularExpression("\""), InAttrValueDblQuote, false}); mStateMap[InAttrKey].append({QRegularExpression("\\s"), NormalState, false}); mStateMap[InAttrValue].append({QRegularExpression("'[^']*'"), InTag, true}); mStateMap[InAttrValueDblQuote].append({QRegularExpression("\"[^\"]*\""), InTag, true}); } private: enum State { NormalState = -1, InComment, InTag, InAttrKey, InAttrValue, InAttrValueDblQuote }; struct Rule { QRegularExpression pattern; State nextState; bool addMatched; // add matched length to pos }; QMap mFormatMap; QMap> mStateMap; void highlightBlock(const QString& text) override { int pos = 0; int len = text.length(); State state = static_cast(previousBlockState()); while(pos < len) { State minState = state; int minPos = -1; for(const Rule& rule : mStateMap.value(state)) { QRegularExpressionMatch match = rule.pattern.match(text, pos); if(match.hasMatch() && (minPos < 0 || match.capturedStart() < minPos)) { minPos = match.capturedStart() + (rule.addMatched ? match.capturedLength() : 0); minState = rule.nextState; } } if(minPos == -1) { setFormat(pos, len - pos, mFormatMap[state]); pos = len; } else { setFormat(pos, minPos - pos, mFormatMap[state]); pos = minPos; state = minState; } } setCurrentBlockState(state); } }; /////////////////////////////////////////////////////////////////////////////// HOCRAttributeEditor::HOCRAttributeEditor(const QString& value, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass) : QLineEdit(value), m_doc(doc), m_itemIndex(itemIndex), m_attrName(attrName), m_origValue(value), m_attrItemClass(attrItemClass) { setFrame(false); connect(m_doc, &HOCRDocument::itemAttributeChanged, this, &HOCRAttributeEditor::updateValue); connect(this, &HOCRAttributeEditor::textChanged, this, [this] { validateChanges(); }); connect(this, &QLineEdit::returnPressed, this, [this] { validateChanges(true); }); } void HOCRAttributeEditor::focusOutEvent(QFocusEvent* ev) { QLineEdit::focusOutEvent(ev); validateChanges(); } void HOCRAttributeEditor::updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value) { if(itemIndex == m_itemIndex && name == m_attrName) { blockSignals(true); setText(value); blockSignals(false); } } void HOCRAttributeEditor::validateChanges(bool force) { if(!hasFocus() || force) { int pos; QString newValue = text(); if(newValue == m_origValue) { return; } if(validator() && validator()->validate(newValue, pos) != QValidator::Acceptable) { setText(m_origValue); } else { m_doc->editItemAttribute(m_itemIndex, m_attrName, newValue, m_attrItemClass); m_origValue = newValue; } } } /////////////////////////////////////////////////////////////////////////////// HOCRAttributeCheckbox::HOCRAttributeCheckbox(Qt::CheckState value, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass) : m_doc(doc), m_itemIndex(itemIndex), m_attrName(attrName), m_attrItemClass(attrItemClass) { setCheckState(value); connect(m_doc, &HOCRDocument::itemAttributeChanged, this, &HOCRAttributeCheckbox::updateValue); connect(this, &HOCRAttributeCheckbox::stateChanged, this, &HOCRAttributeCheckbox::valueChanged); } void HOCRAttributeCheckbox::updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value) { if(itemIndex == m_itemIndex && name == m_attrName) { blockSignals(true); setChecked(value == "1"); blockSignals(false); } } void HOCRAttributeCheckbox::valueChanged() { m_doc->editItemAttribute(m_itemIndex, m_attrName, isChecked() ? "1" : "0", m_attrItemClass); } /////////////////////////////////////////////////////////////////////////////// HOCRAttributeLangCombo::HOCRAttributeLangCombo(const QString& value, bool multiple, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass) : m_doc(doc), m_itemIndex(itemIndex), m_attrName(attrName), m_attrItemClass(attrItemClass) { if(multiple) { addItem(_("Multiple values")); setCurrentIndex(0); QStandardItemModel* itemModel = qobject_cast(model()); itemModel->item(0)->setFlags(itemModel->item(0)->flags() & ~Qt::ItemIsEnabled); } for(const QString& code : QtSpell::Checker::getLanguageList()) { QString text = QtSpell::Checker::decodeLanguageCode(code); addItem(text, code); } if(!multiple) { setCurrentIndex(findData(value)); } connect(m_doc, &HOCRDocument::itemAttributeChanged, this, &HOCRAttributeLangCombo::updateValue); connect(this, qOverload(&HOCRAttributeLangCombo::currentIndexChanged), this, &HOCRAttributeLangCombo::valueChanged); } void HOCRAttributeLangCombo::updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value) { if(itemIndex == m_itemIndex && name == m_attrName) { blockSignals(true); setCurrentIndex(findData(value)); blockSignals(false); } } void HOCRAttributeLangCombo::valueChanged() { m_doc->editItemAttribute(m_itemIndex, m_attrName, currentData().toString(), m_attrItemClass); } /////////////////////////////////////////////////////////////////////////////// class HOCRTextDelegate : public QStyledItemDelegate { public: using QStyledItemDelegate::QStyledItemDelegate; QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& /* option */, const QModelIndex& /* index */) const { return new QLineEdit(parent); } void setEditorData(QWidget* editor, const QModelIndex& index) const { m_currentIndex = index; m_currentEditor = static_cast(editor); static_cast(editor)->setText(index.model()->data(index, Qt::EditRole).toString()); } void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const { model->setData(index, static_cast(editor)->text(), Qt::EditRole); } const QModelIndex& getCurrentIndex() const { return m_currentIndex; } QLineEdit* getCurrentEditor() const { return m_currentEditor; } private: mutable QModelIndex m_currentIndex; mutable QPointer m_currentEditor; }; /////////////////////////////////////////////////////////////////////////////// void OutputEditorHOCR::HOCRBatchProcessor::writeHeader(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo) const { QString header = QString( "\n" "\n" "\n" " %1\n" " \n" " \n" " \n" "\n").arg(QFileInfo(pageInfo.filename).fileName()).arg(tess->Version()); dev->write(header.toUtf8()); } void OutputEditorHOCR::HOCRBatchProcessor::writeFooter(QIODevice* dev) const { dev->write("\n"); } void OutputEditorHOCR::HOCRBatchProcessor::appendOutput(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfos, bool /*firstArea*/) const { char* text = tess->GetHOCRText(pageInfos.page); QDomDocument doc; doc.setContent(QString::fromUtf8(text)); delete[] text; QDomElement pageDiv = doc.firstChildElement("div"); QMap attrs = HOCRItem::deserializeAttrGroup(pageDiv.attribute("title")); // This works because in batch mode the output is created next to the source image attrs["image"] = QString("'./%1'").arg(QFileInfo(pageInfos.filename).fileName()); attrs["ppageno"] = QString::number(pageInfos.page); attrs["rot"] = QString::number(pageInfos.angle); attrs["res"] = QString::number(pageInfos.resolution); pageDiv.setAttribute("title", HOCRItem::serializeAttrGroup(attrs)); dev->write(doc.toByteArray()); } /////////////////////////////////////////////////////////////////////////////// Q_DECLARE_METATYPE(OutputEditorHOCR::HOCRReadSessionData) OutputEditorHOCR::OutputEditorHOCR(DisplayerToolHOCR* tool) { static int reg = qRegisterMetaType>("QList"); Q_UNUSED(reg); static int reg2 = qRegisterMetaType("HOCRReadSessionData"); Q_UNUSED(reg2); m_tool = tool; m_widget = new QWidget; ui.setupUi(m_widget); m_highlighter = new HTMLHighlighter(ui.plainTextEditOutput->document()); m_preview = new QGraphicsPixmapItem(); m_preview->setTransformationMode(Qt::SmoothTransformation); m_preview->setZValue(2); MAIN->getDisplayer()->scene()->addItem(m_preview); m_previewTimer.setSingleShot(true); ui.actionOutputReplace->setShortcut(Qt::CTRL | Qt::Key_F); ui.actionOutputSaveHOCR->setShortcut(Qt::CTRL | Qt::Key_S); ui.actionNavigateNext->setShortcut(Qt::Key_F3); ui.actionNavigatePrev->setShortcut(Qt::SHIFT | Qt::Key_F3); m_document = new HOCRDocument(ui.treeViewHOCR); ui.treeViewHOCR->setModel(m_document); ui.treeViewHOCR->setContextMenuPolicy(Qt::CustomContextMenu); ui.treeViewHOCR->header()->setStretchLastSection(false); ui.treeViewHOCR->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui.treeViewHOCR->setColumnWidth(1, 32); ui.treeViewHOCR->setColumnHidden(1, true); ui.treeViewHOCR->setItemDelegateForColumn(0, new HOCRTextDelegate(ui.treeViewHOCR)); m_proofReadWidget = new HOCRProofReadWidget(ui.treeViewHOCR, MAIN->getDisplayer()); m_proofReadWidget->hide(); ui.comboBoxNavigate->addItem(_("Page"), "ocr_page"); ui.comboBoxNavigate->addItem(_("Block"), "ocr_carea"); ui.comboBoxNavigate->addItem(_("Paragraph"), "ocr_par"); ui.comboBoxNavigate->addItem(_("Line"), "ocr_line"); ui.comboBoxNavigate->addItem(_("Word"), "ocrx_word"); ui.comboBoxNavigate->addItem(_("Misspelled word"), "ocrx_word_bad"); ui.comboBoxNavigate->addItem(_("Low confidence word"), "ocrx_word_lowconf"); QShortcut* shortcut = new QShortcut(QKeySequence(Qt::Key_Delete), m_widget); QObject::connect(shortcut, &QShortcut::activated, this, &OutputEditorHOCR::removeItem); ui.actionInsertModeAppend->setData(static_cast(InsertMode::Append)); ui.actionInsertModeBefore->setData(static_cast(InsertMode::InsertBefore)); connect(ui.menuInsertMode, &QMenu::triggered, this, &OutputEditorHOCR::setInsertMode); connect(ui.toolButtonOpen, &QToolButton::clicked, this, [this] { open(InsertMode::Replace); }); connect(ui.actionOpenAppend, &QAction::triggered, this, [this] { open(InsertMode::Append); }); connect(ui.actionOpenInsertBefore, &QAction::triggered, this, [this] { open(InsertMode::InsertBefore); }); connect(ui.actionOutputSaveHOCR, &QAction::triggered, this, [this] { save(); }); connect(ui.actionOutputExportODT, &QAction::triggered, this, &OutputEditorHOCR::exportToODT); connect(ui.actionOutputExportPDF, &QAction::triggered, this, &OutputEditorHOCR::exportToPDF); connect(ui.actionOutputExportText, &QAction::triggered, this, &OutputEditorHOCR::exportToText); connect(ui.actionOutputClear, &QAction::triggered, this, &OutputEditorHOCR::clear); connect(ui.actionOutputReplace, &QAction::triggered, ui.searchFrame, &SearchReplaceFrame::setVisible); connect(ui.actionOutputReplace, &QAction::triggered, ui.searchFrame, &SearchReplaceFrame::clear); connect(ui.actionToggleWConf, &QAction::triggered, this, &OutputEditorHOCR::toggleWConfColumn); connect(ui.actionPreview, &QAction::toggled, this, &OutputEditorHOCR::previewToggled); connect(ui.actionProofread, &QAction::toggled, m_proofReadWidget, &HOCRProofReadWidget::setProofreadEnabled); connect(&m_previewTimer, &QTimer::timeout, this, &OutputEditorHOCR::updatePreview); connect(ui.searchFrame, &SearchReplaceFrame::findReplace, this, &OutputEditorHOCR::findReplace); connect(ui.searchFrame, &SearchReplaceFrame::replaceAll, this, &OutputEditorHOCR::replaceAll); connect(ui.searchFrame, &SearchReplaceFrame::applySubstitutions, this, &OutputEditorHOCR::applySubstitutions); connect(ConfigSettings::get("customoutputfont"), &FontSetting::changed, this, &OutputEditorHOCR::setFont); connect(ConfigSettings::get("systemoutputfont"), &FontSetting::changed, this, &OutputEditorHOCR::setFont); connect(ui.treeViewHOCR->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &OutputEditorHOCR::showItemProperties); connect(ui.treeViewHOCR, &QTreeView::customContextMenuRequested, this, &OutputEditorHOCR::showTreeWidgetContextMenu); connect(ui.tabWidgetProps, &QTabWidget::currentChanged, this, &OutputEditorHOCR::updateSourceText); connect(m_tool, &DisplayerToolHOCR::bboxChanged, this, &OutputEditorHOCR::updateCurrentItemBBox); connect(m_tool, &DisplayerToolHOCR::bboxDrawn, this, &OutputEditorHOCR::bboxDrawn); connect(m_tool, &DisplayerToolHOCR::positionPicked, this, &OutputEditorHOCR::pickItem); connect(m_document, &HOCRDocument::dataChanged, this, &OutputEditorHOCR::setModified); connect(m_document, &HOCRDocument::rowsInserted, this, &OutputEditorHOCR::setModified); connect(m_document, &HOCRDocument::rowsRemoved, this, &OutputEditorHOCR::setModified); connect(m_document, &HOCRDocument::itemAttributeChanged, this, &OutputEditorHOCR::setModified); connect(m_document, &HOCRDocument::itemAttributeChanged, this, &OutputEditorHOCR::updateSourceText); connect(m_document, &HOCRDocument::itemAttributeChanged, this, &OutputEditorHOCR::itemAttributeChanged); connect(ui.comboBoxNavigate, qOverload(&QComboBox::currentIndexChanged), this, &OutputEditorHOCR::navigateTargetChanged); connect(ui.actionNavigateNext, &QAction::triggered, this, &OutputEditorHOCR::navigateNext); connect(ui.actionNavigatePrev, &QAction::triggered, this, &OutputEditorHOCR::navigatePrev); connect(ui.actionExpandAll, &QAction::triggered, this, &OutputEditorHOCR::expandItemClass); connect(ui.actionCollapseAll, &QAction::triggered, this, &OutputEditorHOCR::collapseItemClass); connect(MAIN->getDisplayer(), &Displayer::imageChanged, this, &OutputEditorHOCR::sourceChanged); setFont(); } OutputEditorHOCR::~OutputEditorHOCR() { m_previewTimer.stop(); delete m_preview; delete m_proofReadWidget; delete m_widget; } void OutputEditorHOCR::setFont() { if(ConfigSettings::get("systemoutputfont")->getValue()) { ui.plainTextEditOutput->setFont(QFont()); } else { ui.plainTextEditOutput->setFont(ConfigSettings::get("customoutputfont")->getValue()); } } void OutputEditorHOCR::setInsertMode(QAction* action) { m_insertMode = static_cast(action->data().value()); ui.toolButtonInsertMode->setIcon(action->icon()); } void OutputEditorHOCR::setModified() { ui.actionOutputSaveHOCR->setEnabled(m_document->pageCount() > 0); ui.toolButtonOutputExport->setEnabled(m_document->pageCount() > 0); ui.toolBarNavigate->setEnabled(m_document->pageCount() > 0); m_preview->setVisible(false); m_previewTimer.start(100); // Use a timer because setModified is potentially called a large number of times when the HOCR tree changes m_modified = true; } OutputEditorHOCR::ReadSessionData* OutputEditorHOCR::initRead(tesseract::TessBaseAPI& tess) { tess.SetPageSegMode(tesseract::PSM_AUTO_ONLY); HOCRReadSessionData* data = new HOCRReadSessionData; data->insertIndex = m_insertMode == InsertMode::Append ? m_document->pageCount() : currentPage(); return data; } void OutputEditorHOCR::read(tesseract::TessBaseAPI& tess, ReadSessionData* data) { tess.SetVariable("hocr_font_info", "true"); char* text = tess.GetHOCRText(data->pageInfo.page); HOCRReadSessionData* hdata = static_cast(data); QMetaObject::invokeMethod(this, "addPage", Qt::QueuedConnection, Q_ARG(QString, QString::fromUtf8(text)), Q_ARG(HOCRReadSessionData, *hdata)); delete[] text; ++hdata->insertIndex; } void OutputEditorHOCR::readError(const QString& errorMsg, ReadSessionData* data) { static_cast(data)->errors.append(QString("%1[%2]: %3").arg(data->pageInfo.filename).arg(data->pageInfo.page).arg(errorMsg)); } void OutputEditorHOCR::finalizeRead(ReadSessionData* data) { HOCRReadSessionData* hdata = static_cast(data); if(!hdata->errors.isEmpty()) { QString message = QString(_("The following pages could not be processed:\n%1").arg(hdata->errors.join("\n"))); QMessageBox::warning(MAIN, _("Recognition errors"), message); } OutputEditor::finalizeRead(data); } void OutputEditorHOCR::addPage(const QString& hocrText, HOCRReadSessionData data) { QDomDocument doc; doc.setContent(hocrText); QDomElement pageDiv = doc.firstChildElement("div"); QMap attrs = HOCRItem::deserializeAttrGroup(pageDiv.attribute("title")); attrs["image"] = QString("'%1'").arg(data.pageInfo.filename); attrs["ppageno"] = QString::number(data.pageInfo.page); attrs["rot"] = QString::number(data.pageInfo.angle); attrs["res"] = QString::number(data.pageInfo.resolution); pageDiv.setAttribute("title", HOCRItem::serializeAttrGroup(attrs)); QModelIndex index = m_document->insertPage(data.insertIndex, pageDiv, true); expandCollapseChildren(index, true); MAIN->setOutputPaneVisible(true); m_modified = true; } bool OutputEditorHOCR::containsSource(const QString& source, int sourcePage) const { for(int i = 0, n = m_document->pageCount(); i < n; ++i) { const HOCRPage* page = m_document->page(i); if(page->pageNr() == sourcePage && page->sourceFile() == source) { return true; } } return false; } void OutputEditorHOCR::navigateTargetChanged() { QString target = ui.comboBoxNavigate->itemData(ui.comboBoxNavigate->currentIndex()).toString(); bool allowExpandCollapse = !target.startsWith("ocrx_word"); ui.actionExpandAll->setEnabled(allowExpandCollapse); ui.actionCollapseAll->setEnabled(allowExpandCollapse); } void OutputEditorHOCR::expandCollapseItemClass(bool expand) { QString target = ui.comboBoxNavigate->itemData(ui.comboBoxNavigate->currentIndex()).toString(); QModelIndex start = m_document->index(0, 0); QModelIndex next = start; do { const HOCRItem* item = m_document->itemAtIndex(next); if(item && item->itemClass() == target) { if(expand) { ui.treeViewHOCR->setExpanded(next, expand); for(QModelIndex parent = next.parent(); parent.isValid(); parent = parent.parent()) { ui.treeViewHOCR->setExpanded(parent, true); } for(QModelIndex child = m_document->index(0, 0, next); child.isValid(); child = child.sibling(child.row() + 1, 0)) { expandCollapseChildren(child, false); } } else { expandCollapseChildren(next, false); } } next = m_document->nextIndex(next); } while(next != start); ui.treeViewHOCR->scrollTo(ui.treeViewHOCR->currentIndex()); } void OutputEditorHOCR::navigateNextPrev(bool next) { QString target = ui.comboBoxNavigate->itemData(ui.comboBoxNavigate->currentIndex()).toString(); bool misspelled = false; bool lowconf = false; if(target == "ocrx_word_bad") { target = "ocrx_word"; misspelled = true; } else if(target == "ocrx_word_lowconf") { target = "ocrx_word"; lowconf = true; } QModelIndex start = ui.treeViewHOCR->currentIndex(); ui.treeViewHOCR->setCurrentIndex(m_document->prevOrNextIndex(next, start, target, misspelled, lowconf)); } void OutputEditorHOCR::expandCollapseChildren(const QModelIndex& index, bool expand) const { int nChildren = m_document->rowCount(index); if(nChildren > 0) { ui.treeViewHOCR->setExpanded(index, expand); for(int i = 0; i < nChildren; ++i) { expandCollapseChildren(m_document->index(i, 0, index), expand); } } } bool OutputEditorHOCR::showPage(const HOCRPage* page) { m_blockSourceChanged = true; bool success = page && MAIN->getSourceManager()->addSource(page->sourceFile(), true) && MAIN->getDisplayer()->setup(&page->pageNr(), &page->resolution(), &page->angle()); m_blockSourceChanged = false; if(success) { sourceChanged(); } return success; } int OutputEditorHOCR::currentPage() { QModelIndexList selected = ui.treeViewHOCR->selectionModel()->selectedIndexes(); if(selected.isEmpty()) { return m_document->pageCount(); } QModelIndex index = selected.front(); if(!index.isValid()) { return m_document->pageCount(); } while(index.parent().isValid()) { index = index.parent(); } return index.row(); } void OutputEditorHOCR::showItemProperties(const QModelIndex& index, const QModelIndex& prev) { m_tool->setAction(DisplayerToolHOCR::ACTION_NONE); const HOCRItem* prevItem = m_document->itemAtIndex(prev); ui.tableWidgetProperties->setRowCount(0); ui.plainTextEditOutput->setPlainText(""); const HOCRItem* currentItem = m_document->itemAtIndex(index); if(!currentItem) { m_tool->clearSelection(); return; } const HOCRPage* page = currentItem->page(); int row = -1; QMap attrs = currentItem->getAllAttributes(); for(auto it = attrs.begin(), itEnd = attrs.end(); it != itEnd; ++it) { QString attrName = it.key(); if(attrName == "class" || attrName == "id") { continue; } QStringList parts = attrName.split(":"); ui.tableWidgetProperties->insertRow(++row); QTableWidgetItem* attrNameItem = new QTableWidgetItem(parts.last()); attrNameItem->setFlags(attrNameItem->flags() & ~Qt::ItemIsEditable); ui.tableWidgetProperties->setItem(row, 0, attrNameItem); ui.tableWidgetProperties->setCellWidget(row, 1, createAttrWidget(index, attrName, it.value())); } // ocr_class:attr_key:attr_values QMap>> occurrences; currentItem->getPropagatableAttributes(occurrences); for(auto it = occurrences.begin(), itEnd = occurrences.end(); it != itEnd; ++it) { ui.tableWidgetProperties->insertRow(++row); QTableWidgetItem* sectionItem = new QTableWidgetItem(it.key()); sectionItem->setFlags(sectionItem->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable)); sectionItem->setBackground(Qt::lightGray); QFont sectionFont = sectionItem->font(); sectionFont.setBold(true); sectionItem->setFont(sectionFont); ui.tableWidgetProperties->setItem(row, 0, sectionItem); ui.tableWidgetProperties->setSpan(row, 0, 1, 2); for(auto attrIt = it.value().begin(), attrItEnd = it.value().end(); attrIt != attrItEnd; ++attrIt) { const QString& attrName = attrIt.key(); const QSet& attrValues = attrIt.value(); int attrValueCount = attrValues.size(); ui.tableWidgetProperties->insertRow(++row); QStringList parts = attrName.split(":"); QTableWidgetItem* attrNameItem = new QTableWidgetItem(parts.last()); attrNameItem->setFlags(attrNameItem->flags() & ~Qt::ItemIsEditable); ui.tableWidgetProperties->setItem(row, 0, attrNameItem); ui.tableWidgetProperties->setCellWidget(row, 1, createAttrWidget(index, attrName, attrValueCount == 1 ? * (attrValues.begin()) : "", it.key(), attrValueCount > 1)); } } ui.plainTextEditOutput->setPlainText(currentItem->toHtml()); if(showPage(page)) { // Update preview if necessary if(!prevItem || prevItem->page() != page) { updatePreview(); } // Minimum bounding box QRect minBBox; if(currentItem->itemClass() == "ocr_page") { minBBox = currentItem->bbox(); } else { for(const HOCRItem* child : currentItem->children()) { minBBox = minBBox.united(child->bbox()); } } m_tool->setSelection(currentItem->bbox(), minBBox); } } QWidget* OutputEditorHOCR::createAttrWidget(const QModelIndex& itemIndex, const QString& attrName, const QString& attrValue, const QString& attrItemClass, bool multiple) { static QMap attrLineEdits = { {"title:bbox", "\\d+\\s+\\d+\\s+\\d+\\s+\\d+"}, {"title:x_fsize", "\\d+"}, {"title:baseline", "[-+]?\\d+\\.?\\d*\\s[-+]?\\d+\\.?\\d*"} }; auto it = attrLineEdits.find(attrName); if(it != attrLineEdits.end()) { QLineEdit* lineEdit = new HOCRAttributeEditor(attrValue, m_document, itemIndex, attrName, attrItemClass); lineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(it.value()))); if(multiple) { lineEdit->setPlaceholderText(_("Multiple values")); } return lineEdit; } else if(attrName == "title:x_font") { QFontComboBox* combo = new QFontComboBox(); combo->setCurrentIndex(-1); QLineEdit* edit = new HOCRAttributeEditor(attrValue, m_document, itemIndex, attrName, attrItemClass); edit->blockSignals(true); // Because the combobox alters the text as soon as setLineEdit is called... combo->setLineEdit(edit); edit->setText(attrValue); edit->blockSignals(false); if(multiple) { combo->lineEdit()->setPlaceholderText(_("Multiple values")); } return combo; } else if(attrName == "lang") { HOCRAttributeLangCombo* combo = new HOCRAttributeLangCombo(attrValue, multiple, m_document, itemIndex, attrName, attrItemClass); return combo; } else if(attrName == "bold" || attrName == "italic") { Qt::CheckState value = multiple ? Qt::PartiallyChecked : attrValue == "1" ? Qt::Checked : Qt::Unchecked; return new HOCRAttributeCheckbox(value, m_document, itemIndex, attrName, attrItemClass); } else { QLineEdit* lineEdit = new QLineEdit(attrValue); lineEdit->setFrame(false); lineEdit->setReadOnly(true); return lineEdit; } } void OutputEditorHOCR::updateCurrentItemBBox(QRect bbox) { QModelIndex current = ui.treeViewHOCR->selectionModel()->currentIndex(); QString bboxstr = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); m_document->editItemAttribute(current, "title:bbox", bboxstr); } void OutputEditorHOCR::updateSourceText() { if(ui.tabWidgetProps->currentWidget() == ui.plainTextEditOutput) { QModelIndex current = ui.treeViewHOCR->selectionModel()->currentIndex(); const HOCRItem* currentItem = m_document->itemAtIndex(current); if(currentItem) { ui.plainTextEditOutput->setPlainText(currentItem->toHtml()); } } } void OutputEditorHOCR::itemAttributeChanged(const QModelIndex& itemIndex, const QString& name, const QString& /*value*/) { const HOCRItem* currentItem = m_document->itemAtIndex(itemIndex); if(name == "title:bbox" && currentItem) { // Minimum bounding box QRect minBBox; if(currentItem->itemClass() == "ocr_page") { minBBox = currentItem->bbox(); } else { for(const HOCRItem* child : currentItem->children()) { minBBox = minBBox.united(child->bbox()); } } m_tool->setSelection(currentItem->bbox(), minBBox); } } void OutputEditorHOCR::bboxDrawn(const QRect& bbox, int action) { QDomDocument doc; QModelIndex current = ui.treeViewHOCR->selectionModel()->currentIndex(); const HOCRItem* currentItem = m_document->itemAtIndex(current); if(!currentItem) { return; } QMap>> propAttrs; currentItem->getPropagatableAttributes(propAttrs); QDomElement newElement; if(action == DisplayerToolHOCR::ACTION_DRAW_GRAPHIC_RECT) { newElement = doc.createElement("div"); newElement.setAttribute("class", "ocr_graphic"); newElement.setAttribute("title", QString("bbox %1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom())); } else if(action == DisplayerToolHOCR::ACTION_DRAW_CAREA_RECT) { newElement = doc.createElement("div"); newElement.setAttribute("class", "ocr_carea"); newElement.setAttribute("title", QString("bbox %1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom())); } else if(action == DisplayerToolHOCR::ACTION_DRAW_PAR_RECT) { newElement = doc.createElement("p"); newElement.setAttribute("class", "ocr_par"); newElement.setAttribute("title", QString("bbox %1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom())); } else if(action == DisplayerToolHOCR::ACTION_DRAW_LINE_RECT) { newElement = doc.createElement("span"); newElement.setAttribute("class", "ocr_line"); QSet propLineBaseline = propAttrs["ocrx_line"]["baseline"]; // Tesseract does as follows: // row_height = x_height + ascenders - descenders // font_pt_size = row_height * 72 / dpi (72 = pointsPerInch) // As a first approximation, assume x_size = bbox.height() and ascenders = descenders = bbox.height() / 4 QMap titleAttrs; titleAttrs["bbox"] = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); titleAttrs["x_ascenders"] = QString("%1").arg(0.25 * bbox.height()); titleAttrs["x_descenders"] = QString("%1").arg(0.25 * bbox.height()); titleAttrs["x_size"] = QString("%1").arg(bbox.height()); titleAttrs["baseline"] = propLineBaseline.size() == 1 ? *propLineBaseline.begin() : QString("0 0"); newElement.setAttribute("title", HOCRItem::serializeAttrGroup(titleAttrs)); } else if(action == DisplayerToolHOCR::ACTION_DRAW_WORD_RECT) { QString text = QInputDialog::getText(m_widget, _("Add Word"), _("Enter word:")); if(text.isEmpty()) { return; } newElement = doc.createElement("span"); newElement.setAttribute("class", "ocrx_word"); QMap> propWord = propAttrs["ocrx_word"]; newElement.setAttribute("lang", propWord["lang"].size() == 1 ? *propWord["lang"].begin() : m_document->defaultLanguage()); QMap titleAttrs; titleAttrs["bbox"] = QString("%1 %2 %3 %4").arg(bbox.left()).arg(bbox.top()).arg(bbox.right()).arg(bbox.bottom()); titleAttrs["x_wconf"] = "100"; titleAttrs["x_font"] = propWord["title:x_font"].size() == 1 ? *propWord["title:x_font"].begin() : QFont().family(); titleAttrs["x_fsize"] = propWord["title:x_fsize"].size() == 1 ? *propWord["title:x_fsize"].begin() : QString("%1").arg(qRound(bbox.height() * 72. / currentItem->page()->resolution())); newElement.setAttribute("title", HOCRItem::serializeAttrGroup(titleAttrs)); if (propWord["bold"].size() == 1) { newElement.setAttribute("bold", *propWord["bold"].begin()); } if (propWord["italic"].size() == 1) { newElement.setAttribute("italic", *propWord["italic"].begin()); } newElement.appendChild(doc.createTextNode(text)); } else { return; } QModelIndex index = m_document->addItem(current, newElement); if(index.isValid()) { ui.treeViewHOCR->selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } } void OutputEditorHOCR::showTreeWidgetContextMenu(const QPoint& point) { QModelIndexList indices = ui.treeViewHOCR->selectionModel()->selectedRows(); int nIndices = indices.size(); if(nIndices > 1) { // Check if merging or swapping is allowed (items are valid siblings) const HOCRItem* firstItem = m_document->itemAtIndex(indices.first()); if(!firstItem) { return; } QSet classes; classes.insert(firstItem->itemClass()); QVector rows = {indices.first().row()}; for(int i = 1; i < nIndices; ++i) { const HOCRItem* item = m_document->itemAtIndex(indices[i]); if(!item || item->parent() != firstItem->parent()) { return; } classes.insert(item->itemClass()); rows.append(indices[i].row()); } QMenu menu; std::sort(rows.begin(), rows.end()); bool consecutive = (rows.last() - rows.first()) == nIndices - 1; bool graphics = firstItem->itemClass() == "ocr_graphic"; bool pages = firstItem->itemClass() == "ocr_page"; bool sameClass = classes.size() == 1; QAction* actionMerge = nullptr; QAction* actionSplit = nullptr; QAction* actionSwap = nullptr; if(consecutive && !graphics && !pages && sameClass) { // Merging allowed actionMerge = menu.addAction(_("Merge")); if(firstItem->itemClass() != "ocr_carea") { actionSplit = menu.addAction(_("Split from parent")); } } if(nIndices == 2) { // Swapping allowed actionSwap = menu.addAction(_("Swap")); } QAction* clickedAction = menu.exec(ui.treeViewHOCR->mapToGlobal(point)); if(!clickedAction) { return; } ui.treeViewHOCR->selectionModel()->blockSignals(true); QModelIndex newIndex; if(clickedAction == actionMerge) { newIndex = m_document->mergeItems(indices.first().parent(), rows.first(), rows.last()); } else if(clickedAction == actionSplit) { newIndex = m_document->splitItem(indices.first().parent(), rows.first(), rows.last()); expandCollapseChildren(newIndex, true); } else if(clickedAction == actionSwap) { newIndex = m_document->swapItems(indices.first().parent(), rows.first(), rows.last()); } if(newIndex.isValid()) { ui.treeViewHOCR->selectionModel()->blockSignals(true); ui.treeViewHOCR->selectionModel()->clear(); ui.treeViewHOCR->selectionModel()->blockSignals(false); ui.treeViewHOCR->selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } ui.treeViewHOCR->selectionModel()->blockSignals(false); // Nothing else is allowed with multiple items selected return; } QModelIndex index = ui.treeViewHOCR->indexAt(point); const HOCRItem* item = m_document->itemAtIndex(index); if(!item) { return; } QMenu menu; QAction* actionAddGraphic = nullptr; QAction* actionAddCArea = nullptr; QAction* actionAddPar = nullptr; QAction* actionAddLine = nullptr; QAction* actionAddWord = nullptr; QAction* actionSplit = nullptr; QAction* actionRemove = nullptr; QAction* actionExpand = nullptr; QAction* actionCollapse = nullptr; QString itemClass = item->itemClass(); if(itemClass == "ocr_page") { actionAddGraphic = menu.addAction(_("Add graphic region")); actionAddCArea = menu.addAction(_("Add text block")); } else if(itemClass == "ocr_carea") { actionAddPar = menu.addAction(_("Add paragraph")); } else if(itemClass == "ocr_par") { actionAddLine = menu.addAction(_("Add line")); } else if(itemClass == "ocr_line") { actionAddWord = menu.addAction(_("Add word")); } else if(itemClass == "ocrx_word") { m_document->addSpellingActions(&menu, index); } if(!menu.actions().isEmpty()) { menu.addSeparator(); } if(itemClass == "ocr_par" || itemClass == "ocr_line" || itemClass == "ocrx_word") { actionSplit = menu.addAction(_("Split from parent")); } actionRemove = menu.addAction(_("Remove")); actionRemove->setShortcut(QKeySequence(Qt::Key_Delete)); if(m_document->rowCount(index) > 0) { actionExpand = menu.addAction(_("Expand all")); actionCollapse = menu.addAction(_("Collapse all")); } QAction* clickedAction = menu.exec(ui.treeViewHOCR->mapToGlobal(point)); if(!clickedAction) { return; } if(clickedAction == actionAddGraphic) { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_GRAPHIC_RECT); } else if(clickedAction == actionAddCArea) { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_CAREA_RECT); } else if(clickedAction == actionAddPar) { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_PAR_RECT); } else if(clickedAction == actionAddLine) { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_LINE_RECT); } else if(clickedAction == actionAddWord) { m_tool->setAction(DisplayerToolHOCR::ACTION_DRAW_WORD_RECT); } else if(clickedAction == actionSplit) { QModelIndex newIndex = m_document->splitItem(index.parent(), index.row(), index.row()); ui.treeViewHOCR->selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); expandCollapseChildren(newIndex, true); } else if(clickedAction == actionRemove) { m_document->removeItem(ui.treeViewHOCR->selectionModel()->currentIndex()); } else if(clickedAction == actionExpand) { expandCollapseChildren(index, true); } else if(clickedAction == actionCollapse) { expandCollapseChildren(index, false); } } void OutputEditorHOCR::pickItem(const QPoint& point) { int pageNr; QString filename = MAIN->getDisplayer()->getCurrentImage(pageNr); QModelIndex pageIndex = m_document->searchPage(filename, pageNr); const HOCRItem* pageItem = m_document->itemAtIndex(pageIndex); if(!pageItem) { return; } const HOCRPage* page = pageItem->page(); // Transform point in coordinate space used when page was OCRed double alpha = (page->angle() - MAIN->getDisplayer()->getCurrentAngle()) / 180. * M_PI; double scale = double(page->resolution()) / double(MAIN->getDisplayer()->getCurrentResolution()); QPoint newPoint( scale * (point.x() * std::cos(alpha) - point.y() * std::sin(alpha)) + 0.5 * page->bbox().width(), scale * (point.x() * std::sin(alpha) + point.y() * std::cos(alpha)) + 0.5 * page->bbox().height()); QModelIndex index = m_document->searchAtCanvasPos(pageIndex, newPoint); ui.treeViewHOCR->setCurrentIndex(index); const HOCRItem* item = m_document->itemAtIndex(index); if(item->itemClass() != "ocrx_word" && item->itemClass() != "ocr_line") { ui.treeViewHOCR->setFocus(); } } void OutputEditorHOCR::toggleWConfColumn(bool active) { ui.treeViewHOCR->setColumnHidden(1, !active); } bool OutputEditorHOCR::open(InsertMode mode, QStringList files) { if(mode == InsertMode::Replace && !clear(false)) { return false; } if(files.isEmpty()) { files = FileDialogs::openDialog(_("Open hOCR File"), "", "outputdir", QString("%1 (*.html)").arg(_("hOCR HTML Files")), true); } if(files.isEmpty()) { return false; } int pos = mode == InsertMode::InsertBefore ? currentPage() : m_document->pageCount(); QStringList failed; QStringList invalid; int added = 0; for(const QString& filename : files) { QFile file(filename); if(!file.open(QIODevice::ReadOnly)) { failed.append(filename); continue; } QDomDocument doc; doc.setContent(&file); QDomElement div = doc.firstChildElement("html").firstChildElement("body").firstChildElement("div"); if(div.isNull() || div.attribute("class") != "ocr_page") { invalid.append(filename); continue; } while(!div.isNull()) { // Need to query next before adding page since the element is reparented QDomElement nextDiv = div.nextSiblingElement("div"); m_document->insertPage(pos++, div, false, QFileInfo(filename).absolutePath()); div = nextDiv; ++added; } } if(added > 0) { m_modified = mode != InsertMode::Replace; if(mode == InsertMode::Replace && m_filebasename.isEmpty()) { QFileInfo finfo(files.front()); m_filebasename = finfo.absoluteDir().absoluteFilePath(finfo.completeBaseName()); } MAIN->setOutputPaneVisible(true); } QStringList errorMsg; if(!failed.isEmpty()) { errorMsg.append(_("The following files could not be opened:\n%1").arg(failed.join("\n"))); } if(!invalid.isEmpty()) { errorMsg.append(_("The following files are not valid hOCR HTML:\n%1").arg(invalid.join("\n"))); } if(!errorMsg.isEmpty()) { QMessageBox::critical(MAIN, _("Unable to open files"), errorMsg.join("\n\n")); } return added > 0; } bool OutputEditorHOCR::selectPage(int nr) { if(!m_document || nr >= m_document->pageCount()) { return false; } QModelIndex index = m_document->indexAtItem(m_document->page(nr)); if(index.isValid()) { ui.treeViewHOCR->setCurrentIndex(index); } return index.isValid(); } bool OutputEditorHOCR::save(const QString& filename) { ui.treeViewHOCR->setFocus(); // Ensure any item editor loses focus and commits its changes QString outname = filename; if(outname.isEmpty()) { QString suggestion = m_filebasename; if(suggestion.isEmpty()) { QList sources = MAIN->getSourceManager()->getSelectedSources(); if(!sources.isEmpty()) { QFileInfo finfo(sources.first()->path); suggestion = finfo.absoluteDir().absoluteFilePath(finfo.completeBaseName()); } else { suggestion = _("output"); } } outname = FileDialogs::saveDialog(_("Save hOCR Output..."), suggestion + ".html", "outputdir", QString("%1 (*.html)").arg(_("hOCR HTML Files"))); if(outname.isEmpty()) { return false; } } QFile file(outname); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::critical(MAIN, _("Failed to save output"), _("Check that you have writing permissions in the selected folder.")); return false; } QByteArray current = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "C"); tesseract::TessBaseAPI tess; setlocale(LC_ALL, current.constData()); QString header = QString( "\n" "\n" "\n" " %1\n" " \n" " \n" " \n" "\n").arg(QFileInfo(outname).fileName()).arg(tess.Version()); file.write(header.toUtf8()); m_document->convertSourcePaths(QFileInfo(outname).absolutePath(), false); file.write(m_document->toHTML().toUtf8()); m_document->convertSourcePaths(QFileInfo(outname).absolutePath(), true); file.write("\n"); m_modified = false; QFileInfo finfo(outname); m_filebasename = finfo.absoluteDir().absoluteFilePath(finfo.completeBaseName()); return true; } bool OutputEditorHOCR::crashSave(const QString& filename) const { QFile file(filename); if(file.open(QIODevice::WriteOnly)) { QString header = QString( "\n" "\n" "\n" " %1\n" " \n" " \n" "\n").arg(QFileInfo(filename).fileName()); file.write(header.toUtf8()); m_document->convertSourcePaths(QFileInfo(filename).absolutePath(), false); file.write(m_document->toHTML().toUtf8()); m_document->convertSourcePaths(QFileInfo(filename).absolutePath(), true); file.write("\n"); return true; } return false; } bool OutputEditorHOCR::exportToODT() { QString suggestion = m_filebasename; if(suggestion.isEmpty()) { QList sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.isEmpty() ? QFileInfo(sources.first()->displayname).baseName() : _("output"); } QString outname = FileDialogs::saveDialog(_("Save ODT Output..."), suggestion + ".odt", "outputdir", QString("%1 (*.odt)").arg(_("OpenDocument Text Documents"))); if(outname.isEmpty()) { return false; } ui.treeViewHOCR->setFocus(); // Ensure any item editor loses focus and commits its changes MAIN->getDisplayer()->setBlockAutoscale(true); bool success = HOCROdtExporter().run(m_document, outname); MAIN->getDisplayer()->setBlockAutoscale(false); return success; } bool OutputEditorHOCR::exportToPDF() { ui.treeViewHOCR->setFocus(); // Ensure any item editor loses focus and commits its changes ui.actionPreview->setChecked(false); // Disable preview because if conflicts with preview from PDF dialog QModelIndex current = ui.treeViewHOCR->selectionModel()->currentIndex(); const HOCRItem* item = m_document->itemAtIndex(current); const HOCRPage* page = item ? item->page() : m_document->page(0); bool success = false; if(!showPage(page)) { return false; } HOCRPdfExportDialog dialog(m_tool, m_document, page, MAIN); if(dialog.exec() != QDialog::Accepted) { return false; } HOCRPdfExporter::PDFSettings settings = dialog.getPdfSettings(); QString suggestion = m_filebasename; if(suggestion.isEmpty()) { QList sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.isEmpty() ? QFileInfo(sources.first()->displayname).baseName() : _("output"); } QString outname; while(true) { outname = FileDialogs::saveDialog(_("Save PDF Output..."), suggestion + ".pdf", "outputdir", QString("%1 (*.pdf)").arg(_("PDF Files"))); if(outname.isEmpty()) { break; } if(m_document->referencesSource(outname)) { QMessageBox::warning(MAIN, _("Invalid Output"), _("Cannot overwrite a file which is a source image of this document.")); continue; } break; } if(outname.isEmpty()) { return false; } MAIN->getDisplayer()->setBlockAutoscale(true); success = HOCRPdfExporter().run(m_document, outname, &settings); MAIN->getDisplayer()->setBlockAutoscale(false); return success; } bool OutputEditorHOCR::exportToText() { QString suggestion = m_filebasename; if(suggestion.isEmpty()) { QList sources = MAIN->getSourceManager()->getSelectedSources(); suggestion = !sources.isEmpty() ? QFileInfo(sources.first()->displayname).baseName() : _("output"); } QString outname = FileDialogs::saveDialog(_("Save Text Output..."), suggestion + ".txt", "outputdir", QString("%1 (*.txt)").arg(_("Text Files"))); if(outname.isEmpty()) { return false; } ui.treeViewHOCR->setFocus(); // Ensure any item editor loses focus and commits its changes MAIN->getDisplayer()->setBlockAutoscale(true); bool success = HOCRTextExporter().run(m_document, outname); MAIN->getDisplayer()->setBlockAutoscale(false); return success; } bool OutputEditorHOCR::clear(bool hide) { m_previewTimer.stop(); ui.actionPreview->setChecked(false); if(!m_widget->isVisible()) { return true; } if(m_modified) { int response = QMessageBox::question(MAIN, _("Output not saved"), _("Save output before proceeding?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if(response == QMessageBox::Save) { if(!save()) { return false; } } else if(response != QMessageBox::Discard) { return false; } } m_proofReadWidget->clear(); m_document->clear(); ui.tableWidgetProperties->setRowCount(0); ui.plainTextEditOutput->clear(); m_tool->clearSelection(); m_modified = false; m_filebasename.clear(); if(hide) { MAIN->setOutputPaneVisible(false); } return true; } void OutputEditorHOCR::setLanguage(const Config::Lang& lang) { m_document->setDefaultLanguage(lang.code); } void OutputEditorHOCR::onVisibilityChanged(bool /*visible*/) { ui.searchFrame->hideSubstitutionsManager(); } bool OutputEditorHOCR::findReplaceInItem(const QModelIndex& index, const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace, bool& currentSelectionMatchesSearch) { // Check that the item is a word const HOCRItem* item = m_document->itemAtIndex(index); if(!item || item->itemClass() != "ocrx_word") { return false; } Qt::CaseSensitivity cs = matchCase ? Qt::CaseSensitive : Qt::CaseInsensitive; HOCRTextDelegate* delegate = static_cast(ui.treeViewHOCR->itemDelegateForColumn(0)); // If the item is already in edit mode, continue searching inside the text if(delegate->getCurrentIndex() == index && delegate->getCurrentEditor()) { QLineEdit* editor = delegate->getCurrentEditor(); bool matchesSearch = editor->selectedText().compare(searchstr, cs) == 0; int selStart = editor->selectionStart(); if(matchesSearch && replace) { QString oldText = editor->text(); editor->setText(oldText.left(selStart) + replacestr + oldText.mid(selStart + searchstr.length())); editor->setSelection(selStart, replacestr.length()); return true; } bool matchesReplace = editor->selectedText().compare(replacestr, cs) == 0; int pos = -1; if(backwards) { pos = selStart - 1; pos = pos < 0 ? -1 : editor->text().lastIndexOf(searchstr, pos, cs); } else { pos = matchesSearch ? selStart + searchstr.length() : matchesReplace ? selStart + replacestr.length() : selStart; pos = editor->text().indexOf(searchstr, pos, cs); } if(pos != -1) { editor->setSelection(pos, searchstr.length()); return true; } currentSelectionMatchesSearch = matchesSearch; return false; } // Otherwise, if item contains text, set it in edit mode int pos = backwards ? item->text().lastIndexOf(searchstr, -1, cs) : item->text().indexOf(searchstr, 0, cs); if(pos != -1) { ui.treeViewHOCR->setCurrentIndex(index); ui.treeViewHOCR->edit(index); Q_ASSERT(delegate->getCurrentIndex() == index && delegate->getCurrentEditor()); delegate->getCurrentEditor()->setSelection(pos, searchstr.length()); return true; } return false; } void OutputEditorHOCR::findReplace(const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace) { ui.searchFrame->clearErrorState(); QModelIndex current = ui.treeViewHOCR->currentIndex(); if(!current.isValid()) { current = m_document->index(backwards ? (m_document->rowCount() - 1) : 0, 0); } QModelIndex neww = current; bool currentSelectionMatchesSearch = false; while(!findReplaceInItem(neww, searchstr, replacestr, matchCase, backwards, replace, currentSelectionMatchesSearch)) { neww = backwards ? m_document->prevIndex(neww) : m_document->nextIndex(neww); if(!neww.isValid() || neww == current) { // Break endless loop if(!currentSelectionMatchesSearch) { ui.searchFrame->setErrorState(); } return; } } } void OutputEditorHOCR::replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Replacing...")); QModelIndex start = m_document->index(0, 0); QModelIndex curr = start; Qt::CaseSensitivity cs = matchCase ? Qt::CaseSensitive : Qt::CaseInsensitive; int count = 0; do { const HOCRItem* item = m_document->itemAtIndex(curr); if(item && item->itemClass() == "ocrx_word") { if(item->text().contains(searchstr, cs)) { ++count; m_document->setData(curr, item->text().replace(searchstr, replacestr, cs), Qt::EditRole); } } curr = m_document->nextIndex(curr); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } while(curr != start); if(count == 0) { ui.searchFrame->setErrorState(); } MAIN->popState(); } void OutputEditorHOCR::applySubstitutions(const QMap& substitutions, bool matchCase) { MAIN->pushState(MainWindow::State::Busy, _("Applying substitutions...")); QModelIndex start = m_document->index(0, 0); Qt::CaseSensitivity cs = matchCase ? Qt::CaseSensitive : Qt::CaseInsensitive; for(auto it = substitutions.begin(), itEnd = substitutions.end(); it != itEnd; ++it) { QString search = it.key(); QString replace = it.value(); QModelIndex curr = start; do { const HOCRItem* item = m_document->itemAtIndex(curr); if(item && item->itemClass() == "ocrx_word") { m_document->setData(curr, item->text().replace(search, replace, cs), Qt::EditRole); } curr = m_document->nextIndex(curr); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } while(curr != start); } MAIN->popState(); } void OutputEditorHOCR::removeItem() { m_document->removeItem(ui.treeViewHOCR->selectionModel()->currentIndex()); } void OutputEditorHOCR::sourceChanged() { if(m_blockSourceChanged) { return; } int page; QString path = MAIN->getDisplayer()->getCurrentImage(page); // Check if source is in document tree QModelIndex pageIndex = m_document->searchPage(path, page); if(!pageIndex.isValid()) { ui.actionPreview->setChecked(false); ui.treeViewHOCR->setCurrentIndex(QModelIndex()); } else { QModelIndex curIndex = ui.treeViewHOCR->currentIndex(); while(curIndex != pageIndex && curIndex.parent().isValid()) { curIndex = curIndex.parent(); } if(curIndex != pageIndex) { ui.treeViewHOCR->setCurrentIndex(pageIndex); } } } void OutputEditorHOCR::previewToggled(bool active) { QModelIndex index = ui.treeViewHOCR->currentIndex(); if(active && !index.isValid() && m_document->pageCount() > 0) { ui.treeViewHOCR->setCurrentIndex(m_document->indexAtItem(m_document->page(0))); } else { updatePreview(); } } void OutputEditorHOCR::updatePreview() { const HOCRItem* item = m_document->itemAtIndex(ui.treeViewHOCR->currentIndex()); if(!ui.actionPreview->isChecked() || !item) { m_preview->setVisible(false); return; } const HOCRPage* page = item->page(); const QRect& bbox = page->bbox(); int pageDpi = page->resolution(); QImage image(bbox.size(), QImage::Format_ARGB32); image.fill(QColor(255, 255, 255, 127)); image.setDotsPerMeterX(pageDpi / 0.0254); // 1 in = 0.0254 m image.setDotsPerMeterY(pageDpi / 0.0254); QPainter painter(&image); painter.setRenderHint(QPainter::Antialiasing); drawPreview(painter, page); m_preview->setPixmap(QPixmap::fromImage(image)); m_preview->setPos(-0.5 * bbox.width(), -0.5 * bbox.height()); m_preview->setVisible(true); } void OutputEditorHOCR::drawPreview(QPainter& painter, const HOCRItem* item) { if(!item->isEnabled()) { return; } QString itemClass = item->itemClass(); if(itemClass == "ocr_line") { QPair baseline = item->baseLine(); const QRect& lineRect = item->bbox(); for(HOCRItem* wordItem : item->children()) { if(!wordItem->isEnabled()) { continue; } const QRect& wordRect = wordItem->bbox(); QFont font; if(!wordItem->fontFamily().isEmpty()) { font.setFamily(wordItem->fontFamily()); } font.setBold(wordItem->fontBold()); font.setItalic(wordItem->fontItalic()); font.setPointSizeF(wordItem->fontSize()); painter.setFont(font); // See https://github.com/kba/hocr-spec/issues/15 double y = lineRect.bottom() + (wordRect.center().x() - lineRect.x()) * baseline.first + baseline.second; painter.drawText(wordRect.x(), y, wordItem->text()); } } else if(itemClass == "ocr_graphic") { painter.drawImage(item->bbox(), m_tool->getSelection(item->bbox())); } else { for(HOCRItem* childItem : item->children()) { drawPreview(painter, childItem);; } } } gImageReader-3.4.0/qt/src/hocr/OutputEditorHOCR.hh000066400000000000000000000152221417507262200216540ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * OutputEditorHOCR.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef OUTPUTEDITORHOCR_HH #define OUTPUTEDITORHOCR_HH #include #include "OutputEditor.hh" #include "Ui_OutputEditorHOCR.hh" class DisplayerToolHOCR; class HOCRDocument; class HOCRItem; class HOCRPage; class HOCRProofReadWidget; class QGraphicsPixmapItem; class OutputEditorHOCR : public OutputEditor { Q_OBJECT public: class HOCRBatchProcessor : public BatchProcessor { public: QString fileSuffix() const override { return QString(".html"); } void writeHeader(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfo) const override; void writeFooter(QIODevice* dev) const override; void appendOutput(QIODevice* dev, tesseract::TessBaseAPI* tess, const PageInfo& pageInfos, bool firstArea) const override; }; enum class InsertMode { Replace, Append, InsertBefore }; OutputEditorHOCR(DisplayerToolHOCR* tool); ~OutputEditorHOCR(); QWidget* getUI() override { return m_widget; } ReadSessionData* initRead(tesseract::TessBaseAPI& tess) override; void read(tesseract::TessBaseAPI& tess, ReadSessionData* data) override; void readError(const QString& errorMsg, ReadSessionData* data) override; void finalizeRead(ReadSessionData* data) override; BatchProcessor* createBatchProcessor(const QMap& /*options*/) const override { return new HOCRBatchProcessor; } bool containsSource(const QString& source, int sourcePage) const override; bool crashSave(const QString& filename) const override; HOCRDocument* getDocument() const { return m_document; } DisplayerToolHOCR* getTool() const { return m_tool; } bool open(InsertMode mode, QStringList files = QStringList()); bool selectPage(int nr); public slots: bool open(const QString& filename) override { return open(InsertMode::Replace, {filename}); } bool clear(bool hide = true) override; void setLanguage(const Config::Lang& lang) override; void onVisibilityChanged(bool visible) override; bool save(const QString& filename = ""); bool exportToODT(); bool exportToPDF(); bool exportToText(); void removeItem(); private: class HTMLHighlighter; struct HOCRReadSessionData : ReadSessionData { int insertIndex; QStringList errors; }; friend struct QMetaTypeId; DisplayerToolHOCR* m_tool; QWidget* m_widget; QGraphicsPixmapItem* m_preview = nullptr; HOCRProofReadWidget* m_proofReadWidget = nullptr; QTimer m_previewTimer; UI_OutputEditorHOCR ui; HTMLHighlighter* m_highlighter; bool m_modified = false; bool m_blockSourceChanged = false; QString m_filebasename; InsertMode m_insertMode = InsertMode::Append; HOCRDocument* m_document; QWidget* createAttrWidget(const QModelIndex& itemIndex, const QString& attrName, const QString& attrValue, const QString& attrItemClass = QString(), bool multiple = false); void expandCollapseChildren(const QModelIndex& index, bool expand) const; void expandCollapseItemClass(bool expand); void navigateNextPrev(bool next); bool findReplaceInItem(const QModelIndex& index, const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace, bool& currentSelectionMatchesSearch); bool showPage(const HOCRPage* page); int currentPage(); void drawPreview(QPainter& painter, const HOCRItem* item); private slots: void bboxDrawn(const QRect& bbox, int action); void addPage(const QString& hocrText, HOCRReadSessionData data); void expandItemClass() { expandCollapseItemClass(true); } void collapseItemClass() { expandCollapseItemClass(false); } void navigateTargetChanged(); void navigateNext() { navigateNextPrev(true); } void navigatePrev() { navigateNextPrev(false); } void pickItem(const QPoint& point); void setFont(); void setInsertMode(QAction* action); void setModified(); void showItemProperties(const QModelIndex& index, const QModelIndex& prev = QModelIndex()); void showTreeWidgetContextMenu(const QPoint& point); void toggleWConfColumn(bool active); void itemAttributeChanged(const QModelIndex& itemIndex, const QString& name, const QString& value); void updateSourceText(); void updateCurrentItemBBox(QRect bbox); void findReplace(const QString& searchstr, const QString& replacestr, bool matchCase, bool backwards, bool replace); void replaceAll(const QString& searchstr, const QString& replacestr, bool matchCase); void applySubstitutions(const QMap& substitutions, bool matchCase); void sourceChanged(); void previewToggled(bool active); void updatePreview(); }; class HOCRAttributeEditor : public QLineEdit { Q_OBJECT public: HOCRAttributeEditor(const QString& value, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass); protected: void focusOutEvent(QFocusEvent* ev); private: HOCRDocument* m_doc; QModelIndex m_itemIndex; QString m_attrName; QString m_origValue; QString m_attrItemClass; private slots: void updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value); void validateChanges(bool force = false); }; class HOCRAttributeCheckbox : public QCheckBox { Q_OBJECT public: HOCRAttributeCheckbox(Qt::CheckState value, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass); private: HOCRDocument* m_doc; QModelIndex m_itemIndex; QString m_attrName; QString m_attrItemClass; private slots: void updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value); void valueChanged(); }; class HOCRAttributeLangCombo : public QComboBox { Q_OBJECT public: HOCRAttributeLangCombo(const QString& value, bool multiple, HOCRDocument* doc, const QModelIndex& itemIndex, const QString& attrName, const QString& attrItemClass); private: HOCRDocument* m_doc; QModelIndex m_itemIndex; QString m_attrName; QString m_attrItemClass; private slots: void updateValue(const QModelIndex& itemIndex, const QString& name, const QString& value); void valueChanged(); }; #endif // OUTPUTEDITORHOCR_HH gImageReader-3.4.0/qt/src/hocr/Ui_OutputEditorHOCR.hh000066400000000000000000000203411417507262200223070ustar00rootroot00000000000000#ifndef UI_OUTPUTEDITORHOCR_HH #define UI_OUTPUTEDITORHOCR_HH #include "common.hh" #include "OutputTextEdit.hh" #include "SearchReplaceFrame.hh" #include #include #include #include #include #include #include #include #include #include #include #include #include class UI_OutputEditorHOCR { public: QMenu* menuInsertMode; QMenu* menuOpen; QToolButton* toolButtonInsertMode; QToolButton* toolButtonOutputExport; QToolButton* toolButtonOpen; QAction* actionInsertModeAppend; QAction* actionInsertModeBefore; QAction* actionOpenAppend; QAction* actionOpenInsertBefore; QAction* actionOutputClear; QAction* actionOutputSaveHOCR; QAction* actionOutputExportText; QAction* actionOutputExportPDF; QAction* actionOutputExportODT; QAction* actionOutputReplace; QAction* actionToggleWConf; QAction* actionPreview; QAction* actionProofread; QAction* actionNavigateNext; QAction* actionNavigatePrev; QAction* actionExpandAll; QAction* actionCollapseAll; QComboBox* comboBoxNavigate; QToolBar* toolBarOutput; QToolBar* toolBarNavigate; QTabWidget* tabWidgetProps; QSplitter* splitter; QTreeView* treeViewHOCR; QTableWidget* tableWidgetProperties; OutputTextEdit* plainTextEditOutput; SearchReplaceFrame* searchFrame; void setupUi(QWidget* widget) { widget->setLayout(new QVBoxLayout()); widget->layout()->setContentsMargins(0, 0, 0, 0); widget->layout()->setSpacing(0); // Output toolbar actionInsertModeAppend = new QAction(QIcon(":/icons/ins_hocr_append"), gettext("Append new output after last page"), widget); actionInsertModeBefore = new QAction(QIcon(":/icons/ins_hocr_before"), gettext("Insert new output before current page"), widget); menuInsertMode = new QMenu(widget); menuInsertMode->addAction(actionInsertModeAppend); menuInsertMode->addAction(actionInsertModeBefore); toolButtonInsertMode = new QToolButton(widget); toolButtonInsertMode->setIcon(QIcon(":/icons/ins_hocr_append")); toolButtonInsertMode->setToolTip(gettext("Select insert mode")); toolButtonInsertMode->setPopupMode(QToolButton::InstantPopup); toolButtonInsertMode->setMenu(menuInsertMode); actionOpenAppend = new QAction(gettext("Append document after last page"), widget); actionOpenInsertBefore = new QAction(gettext("Insert document before current page"), widget); menuOpen = new QMenu(widget); menuOpen->addAction(actionOpenAppend); menuOpen->addAction(actionOpenInsertBefore); toolButtonOpen = new QToolButton(widget); toolButtonOpen->setIcon(QIcon::fromTheme("document-open")); toolButtonOpen->setText(gettext("Open hOCR file")); toolButtonOpen->setToolTip(gettext("Open hOCR file")); toolButtonOpen->setPopupMode(QToolButton::MenuButtonPopup); toolButtonOpen->setMenu(menuOpen); actionOutputSaveHOCR = new QAction(QIcon::fromTheme("document-save-as"), gettext("Save as hOCR text"), widget); actionOutputSaveHOCR->setToolTip(gettext("Save as hOCR text")); actionOutputSaveHOCR->setEnabled(false); QMenu* exportMenu = new QMenu(); actionOutputExportText = new QAction(QIcon::fromTheme("text-plain"), gettext("Export to plain text"), widget); actionOutputExportText->setToolTip(gettext("Export to plain text")); exportMenu->addAction(actionOutputExportText); actionOutputExportPDF = new QAction(QIcon::fromTheme("application-pdf"), gettext("Export to PDF"), widget); actionOutputExportPDF->setToolTip(gettext("Export to PDF")); exportMenu->addAction(actionOutputExportPDF); actionOutputExportODT = new QAction(QIcon::fromTheme("x-office-document"), gettext("Export to ODT"), widget); actionOutputExportODT->setToolTip(gettext("Export to ODT")); exportMenu->addAction(actionOutputExportODT); toolButtonOutputExport = new QToolButton(widget); toolButtonOutputExport->setIcon(QIcon::fromTheme("document-export")); toolButtonOutputExport->setText(gettext("Export")); toolButtonOutputExport->setToolTip(gettext("Export")); toolButtonOutputExport->setEnabled(false); toolButtonOutputExport->setMenu(exportMenu); toolButtonOutputExport->setPopupMode(QToolButton::InstantPopup); actionOutputClear = new QAction(QIcon::fromTheme("edit-clear"), gettext("Clear output"), widget); actionOutputClear->setToolTip(gettext("Clear output")); actionOutputReplace = new QAction(QIcon::fromTheme("edit-find-replace"), gettext("Find and Replace"), widget); actionOutputReplace->setToolTip(gettext("Find and replace")); actionOutputReplace->setCheckable(true); actionToggleWConf = new QAction(QIcon(":/icons/wconf"), gettext("Show confidence values"), widget); actionToggleWConf->setToolTip(gettext("Show confidence values")); actionToggleWConf->setCheckable(true); actionProofread = new QAction(QIcon(":/icons/proofread"), gettext("Show proofread widget"), widget); actionProofread->setToolTip(gettext("Show proofread widget")); actionProofread->setCheckable(true); actionPreview = new QAction(QIcon::fromTheme("document-preview"), gettext("Show preview"), widget); actionPreview->setToolTip(gettext("Show preview")); actionPreview->setCheckable(true); toolBarOutput = new QToolBar(widget); toolBarOutput->setToolButtonStyle(Qt::ToolButtonIconOnly); toolBarOutput->setIconSize(QSize(1, 1) * toolBarOutput->style()->pixelMetric(QStyle::PM_SmallIconSize)); toolBarOutput->addWidget(toolButtonInsertMode); toolBarOutput->addSeparator(); toolBarOutput->addWidget(toolButtonOpen); toolBarOutput->addAction(actionOutputSaveHOCR); toolBarOutput->addWidget(toolButtonOutputExport); toolBarOutput->addAction(actionOutputClear); toolBarOutput->addSeparator(); toolBarOutput->addAction(actionOutputReplace); toolBarOutput->addAction(actionToggleWConf); toolBarOutput->addAction(actionProofread); toolBarOutput->addAction(actionPreview); widget->layout()->addWidget(toolBarOutput); searchFrame = new SearchReplaceFrame(widget); searchFrame->setVisible(false); widget->layout()->addWidget(searchFrame); splitter = new QSplitter(Qt::Vertical, widget); widget->layout()->addWidget(splitter); QWidget* treeContainer = new QWidget(widget); treeContainer->setLayout(new QVBoxLayout()); treeContainer->layout()->setSpacing(0); treeContainer->layout()->setContentsMargins(0, 0, 0, 0); splitter->addWidget(treeContainer); treeViewHOCR = new QTreeView(widget); treeViewHOCR->setHeaderHidden(true); treeViewHOCR->setSelectionMode(QTreeWidget::ExtendedSelection); treeContainer->layout()->addWidget(treeViewHOCR); actionNavigateNext = new QAction(QIcon::fromTheme("go-down"), gettext("Next (F3)"), widget); actionNavigatePrev = new QAction(QIcon::fromTheme("go-up"), gettext("Previous (Shift+F3)"), widget); comboBoxNavigate = new QComboBox(); comboBoxNavigate->setSizeAdjustPolicy(QComboBox::AdjustToContents); comboBoxNavigate->setMinimumContentsLength(10); actionExpandAll = new QAction(QIcon(":/icons/expand"), gettext("Expand all"), widget); actionCollapseAll = new QAction(QIcon(":/icons/collapse"), gettext("Collapse all"), widget); toolBarNavigate = new QToolBar(widget); toolBarNavigate->setToolButtonStyle(Qt::ToolButtonIconOnly); toolBarNavigate->setIconSize(QSize(1, 1) * toolBarOutput->style()->pixelMetric(QStyle::PM_SmallIconSize)); toolBarNavigate->addWidget(comboBoxNavigate); toolBarNavigate->addSeparator(); toolBarNavigate->addAction(actionNavigateNext); toolBarNavigate->addAction(actionNavigatePrev); toolBarNavigate->addSeparator(); toolBarNavigate->addAction(actionExpandAll); toolBarNavigate->addAction(actionCollapseAll); treeContainer->layout()->addWidget(toolBarNavigate); tabWidgetProps = new QTabWidget(widget); tableWidgetProperties = new QTableWidget(widget); tableWidgetProperties->setColumnCount(2); tableWidgetProperties->horizontalHeader()->setVisible(false); tableWidgetProperties->verticalHeader()->setVisible(false); tableWidgetProperties->horizontalHeader()->setStretchLastSection(true); tabWidgetProps->addTab(tableWidgetProperties, gettext("Properties")); plainTextEditOutput = new OutputTextEdit(widget); plainTextEditOutput->setReadOnly(true); tabWidgetProps->addTab(plainTextEditOutput, gettext("Source")); splitter->addWidget(tabWidgetProps); } }; #endif // UI_OUTPUTEDITORHOCR_HH gImageReader-3.4.0/qt/src/main.cc000066400000000000000000000072531417507262200165150ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * main.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "MainWindow.hh" #include "Config.hh" #include "CrashHandler.hh" int main (int argc, char* argv[]) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif QApplication app(argc, argv); QDir dataDir = QDir(QString("%1/../share/").arg(QApplication::applicationDirPath())); QApplication::setOrganizationName(PACKAGE_NAME); QApplication::setApplicationName(PACKAGE_NAME); QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":/extra-theme-icons"); #ifdef Q_OS_WIN QIcon::setThemeSearchPaths({dataDir.absoluteFilePath("icons")}); QIcon::setThemeName("hicolor"); QDir packageDir = QDir(QString("%1/../").arg(QApplication::applicationDirPath())); if(qgetenv("LANG").isEmpty()) { qputenv("LANG", QLocale::system().name().toLocal8Bit()); } #endif QTranslator qtTranslator; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QString translationsPath = QLibraryInfo::path(QLibraryInfo::TranslationsPath); #else QString translationsPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); #endif #ifdef Q_OS_WIN #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) translationsPath = packageDir.absolutePath() + translationsPath.mid(QLibraryInfo::path(QLibraryInfo::PrefixPath).length()); #else translationsPath = packageDir.absolutePath() + translationsPath.mid(QLibraryInfo::location(QLibraryInfo::PrefixPath).length()); #endif #endif bool success = false; success = qtTranslator.load("qt_" + QLocale::system().name(), translationsPath); success = qtTranslator.load("qtbase_" + QLocale::system().name(), translationsPath); QApplication::instance()->installTranslator(&qtTranslator); bindtextdomain(GETTEXT_PACKAGE, dataDir.absoluteFilePath("locale").toLocal8Bit().data()); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); QWidget* window; if(argc >= 3 && std::strcmp("crashhandle", argv[1]) == 0) { int pid = std::atoi(argv[2]); int tesseractCrash = std::atoi(argv[3]); QString savefile = argc >= 5 ? argv[4] : ""; window = new CrashHandler(pid, tesseractCrash, savefile); } else if(argc >= 2 && std::strcmp("tessdatadir", argv[1]) == 0) { Config::openTessdataDir(); return 0; } else if(argc >= 2 && std::strcmp("spellingdir", argv[1]) == 0) { Config::openSpellingDir(); return 0; } else { #ifdef Q_OS_WIN qputenv("TWAINDSM_LOG", packageDir.absoluteFilePath("twain.log").toLocal8Bit()); std::freopen(packageDir.absoluteFilePath("gimagereader.log").toLocal8Bit().data(), "w", stderr); #endif QStringList files; for(int i = 1; i < argc; ++i) { if(QFile(argv[i]).exists()) { files.append(argv[i]); } } window = new MainWindow(files); } window->show(); int exitcode = app.exec(); delete window; return exitcode; } gImageReader-3.4.0/qt/src/scanner/000077500000000000000000000000001417507262200167045ustar00rootroot00000000000000gImageReader-3.4.0/qt/src/scanner/ScannerSane.cc000066400000000000000000000641471417507262200214270ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerSane.cc * Based on code from Simple Scan, which is: * Copyright (C) 2009-2013 Canonical Ltd. * Author: Robert Ancell * Modifications are: * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScannerSane.hh" #include #include #include #include #include #include void ScannerSane::init() { moveToThread(&m_thread); connect(&m_thread, &QThread::started, this, &ScannerSane::run); m_thread.start(); } void ScannerSane::redetect() { m_requestQueue.enqueue({Request::Type::Redetect, 0}); } void ScannerSane::scan(const Params& params) { Q_ASSERT(params.depth == 8); // only 8 supported m_requestQueue.enqueue({Request::Type::StartScan, new ScanJob(params)}); } void ScannerSane::cancel() { m_requestQueue.enqueue({Request::Type::Cancel, 0}); } void ScannerSane::close() { m_requestQueue.enqueue({Request::Type::Quit, 0}); m_thread.quit(); m_thread.wait(); } /***************************** Thread functions ******************************/ void ScannerSane::run() { // Initialize sane SANE_Int version_code; SANE_Status status = sane_init(&version_code, nullptr); qDebug("sane_init() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { qWarning("Unable to initialize SANE backend: %s", sane_strstatus(status)); emit initFailed(); return; } qDebug("SANE version %d.%d.%d", SANE_VERSION_MAJOR(version_code), SANE_VERSION_MINOR(version_code), SANE_VERSION_BUILD(version_code)); /* Scan for devices on first start */ doRedetect(); bool need_redetect = false; while(true) { // Fetch request if requests are pending or wait for request if idle if(!m_requestQueue.empty() || m_state == State::IDLE) { Request request = m_requestQueue.dequeue(); if(request.type == Request::Type::Redetect) { need_redetect = true; } else if(request.type == Request::Type::StartScan) { setState(State::OPEN); m_job = request.job; } else if(request.type == Request::Type::Cancel) { failScan(_("Scan canceled")); } else if(request.type == Request::Type::Quit) { doStop(); break; } } // Perform operations according to state if(m_state == State::IDLE) { if(need_redetect) { doRedetect(); need_redetect = false; } } else if(m_state == State::OPEN) { doOpen(); } else if(m_state == State::SET_OPTIONS) { doSetOptions(); } else if(m_state == State::START) { doStart(); } else if(m_state == State::GET_PARAMETERS) { doGetParameters(); } else if(m_state == State::READ) { doRead(); } } qDebug("sane_exit()"); // Commented to prevent crash, see https://bugs.launchpad.net/hplip/+bug/1315858 // sane_exit(); } void ScannerSane::setState(State state) { m_state = state; emit scanStateChanged(m_state); } void ScannerSane::failScan(const QString& errorString) { doStop(); emit scanFailed(errorString); } void ScannerSane::doRedetect() { QList devices; const SANE_Device** device_list = nullptr; SANE_Status status = sane_get_devices(&device_list, false); qDebug("sane_get_devices() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { qWarning("Unable to get SANE devices: %s", sane_strstatus(status)); } else { for(int i = 0; device_list[i] != nullptr; ++i) { qDebug("Device: name=\"%s\" vendor=\"%s\" model=\"%s\" type=\"%s\"", device_list[i]->name, device_list[i]->vendor, device_list[i]->model, device_list[i]->type); Device scan_device; scan_device.name = device_list[i]->name; /* Abbreviate HP as it is a long string and does not match what is on the physical scanner */ QString vendor = device_list[i]->vendor; if(vendor == "Hewlett-Packard") { vendor = "HP"; } scan_device.label = QString("%1 %2").arg(vendor).arg(device_list[i]->model); scan_device.label.replace('_', " "); devices.append(scan_device); } } emit devicesDetected(devices); } void ScannerSane::doOpen() { if(m_job->params.device.isEmpty()) { failScan(_("No scanner specified")); return; } SANE_Status status = sane_open(m_job->params.device.toLocal8Bit().data(), &m_job->handle); qDebug("sane_open(\"%s\") -> %s", qPrintable(m_job->params.device), sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { m_job->handle = nullptr; qWarning("Unable to get open device: %s", sane_strstatus(status)); failScan(getErrorMessage(status, _("Unable to connect to scanner"))); return; } setState(State::SET_OPTIONS); } void ScannerSane::doSetOptions() { qDebug("set_options"); int index = 0; const SANE_Option_Descriptor* option; QMap options; /* Build the option table */ while((option = sane_get_option_descriptor(m_job->handle, index)) != nullptr) { logOption(index, option); if( /* Ignore groups */ option->type != SANE_TYPE_GROUP && /* Option disabled */ (option->cap & SANE_CAP_INACTIVE) == 0 && /* Some options are unnamed (e.g. Option 0) */ option->name != nullptr && std::strlen(option->name) > 0 ) { options.insert(option->name, index); } ++index; } /* Apply settings */ /* Pick source */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_SOURCE, index); if(option != nullptr) { QStringList flatbed_sources = { "Auto", SANE_I18N("Auto"), "Flatbed", SANE_I18N("Flatbed"), "FlatBed", "Normal", SANE_I18N("Normal") }; QStringList adf_sources = { "Automatic Document Feeder", SANE_I18N("Automatic Document Feeder"), "ADF", "Automatic Document Feeder(left aligned)", /* Seen in the proprietary brother3 driver */ "Automatic Document Feeder(centrally aligned)" /* Seen in the proprietary brother3 driver */ }; QStringList adf_front_sources = { "ADF Front", SANE_I18N("ADF Front") }; QStringList adf_back_sources = { "ADF Back", SANE_I18N("ADF Back") }; QStringList adf_duplex_sources = { "ADF Duplex", SANE_I18N("ADF Duplex") }; switch(m_job->params.type) { case ScanType::SINGLE: if(!setDefaultOption(m_job->handle, option, index)) if(!setConstrainedStringOption(m_job->handle, option, index, flatbed_sources, nullptr)) { qWarning("Unable to set single page source, please file a bug"); } break; case ScanType::ADF_FRONT: if(!setConstrainedStringOption(m_job->handle, option, index, adf_front_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { qWarning("Unable to set front ADF source, please file a bug"); } break; case ScanType::ADF_BACK: if(!setConstrainedStringOption(m_job->handle, option, index, adf_back_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { qWarning("Unable to set back ADF source, please file a bug"); } break; case ScanType::ADF_BOTH: if(!setConstrainedStringOption(m_job->handle, option, index, adf_duplex_sources, nullptr)) if(!setConstrainedStringOption(m_job->handle, option, index, adf_sources, nullptr)) { qWarning("Unable to set duplex ADF source, please file a bug"); } break; } } /* Scan mode (before resolution as it tends to affect that */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_MODE, index); if(option != nullptr) { /* The names of scan modes often used in drivers, as taken from the sane-backends source */ QStringList color_scan_modes = { SANE_VALUE_SCAN_MODE_COLOR, "Color", "24bit Color" /* Seen in the proprietary brother3 driver */ }; QStringList gray_scan_modes = { SANE_VALUE_SCAN_MODE_GRAY, "Gray", "Grayscale", SANE_I18N("Grayscale"), "True Gray" /* Seen in the proprietary brother3 driver */ }; QStringList lineart_scan_modes = { SANE_VALUE_SCAN_MODE_LINEART, "Lineart", "LineArt", SANE_I18N("LineArt"), "Black & White", SANE_I18N("Black & White"), "Binary", SANE_I18N("Binary"), "Thresholded", SANE_VALUE_SCAN_MODE_GRAY, "Gray", "Grayscale", SANE_I18N("Grayscale"), "True Gray" /* Seen in the proprietary brother3 driver */ }; switch(m_job->params.scan_mode) { case ScanMode::COLOR: if(!setConstrainedStringOption(m_job->handle, option, index, color_scan_modes, nullptr)) { qWarning("Unable to set Color mode, please file a bug"); } break; case ScanMode::GRAY: if(!setConstrainedStringOption(m_job->handle, option, index, gray_scan_modes, nullptr)) { qWarning("Unable to set Gray mode, please file a bug"); } break; case ScanMode::LINEART: if(!setConstrainedStringOption(m_job->handle, option, index, lineart_scan_modes, nullptr)) { qWarning("Unable to set Lineart mode, please file a bug"); } break; default: break; } } /* Duplex */ option = getOptionByName(options, m_job->handle, "duplex", index); if(option != nullptr && option->type == SANE_TYPE_BOOL) { setBoolOption(m_job->handle, option, index, m_job->params.type == ScanType::ADF_BOTH, nullptr); } /* Multi-page options */ option = getOptionByName(options, m_job->handle, "batch-scan", index); if(option != nullptr && option->type == SANE_TYPE_BOOL) { setBoolOption(m_job->handle, option, index, m_job->params.type != ScanType::SINGLE, nullptr); } /* Disable compression, we will compress after scanning */ option = getOptionByName(options, m_job->handle, "compression", index); if(option != nullptr) { QStringList disable_compression_names = { SANE_I18N("None"), SANE_I18N("none"), "None", "none" }; if(!setConstrainedStringOption(m_job->handle, option, index, disable_compression_names, nullptr)) { qWarning("Unable to disable compression, please file a bug"); } } /* Set resolution and bit depth */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_RESOLUTION, index); if(option != nullptr) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.dpi, &m_job->params.dpi); } else { int dpi; setIntOption(m_job->handle, option, index, m_job->params.dpi, &dpi); m_job->params.dpi = dpi; } option = getOptionByName(options, m_job->handle, SANE_NAME_BIT_DEPTH, index); if(option != nullptr && m_job->params.depth > 0) { setIntOption(m_job->handle, option, index, m_job->params.depth, nullptr); } } /* Always use maximum scan area - some scanners default to using partial areas. This should be patched in sane-backends */ option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_BR_X, index); if(option != nullptr && option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, SANE_UNFIX(option->constraint.range->max), nullptr); } else { setIntOption(m_job->handle, option, index, option->constraint.range->max, nullptr); } } option = getOptionByName(options, m_job->handle, SANE_NAME_SCAN_BR_Y, index); if(option != nullptr && option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, SANE_UNFIX(option->constraint.range->max), nullptr); } else { setIntOption(m_job->handle, option, index, option->constraint.range->max, nullptr); } } /* Set page dimensions */ option = getOptionByName(options, m_job->handle, SANE_NAME_PAGE_WIDTH, index); if(option != nullptr && m_job->params.page_width > 0.0) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.page_width / 10.0, nullptr); } else { setIntOption(m_job->handle, option, index, m_job->params.page_width / 10, nullptr); } } option = getOptionByName(options, m_job->handle, SANE_NAME_PAGE_HEIGHT, index); if(option != nullptr && m_job->params.page_height > 0.0) { if(option->type == SANE_TYPE_FIXED) { setFixedOption(m_job->handle, option, index, m_job->params.page_height / 10.0, nullptr); } else { setIntOption(m_job->handle, option, index, m_job->params.page_height / 10, nullptr); } } setState(State::START); } void ScannerSane::doStart() { SANE_Status status = sane_start(m_job->handle); qDebug("sane_start -> %s", sane_strstatus(status)); if(status == SANE_STATUS_GOOD) { setState(State::GET_PARAMETERS); } else { doStop(); failScan(getErrorMessage(status, _("Unable to start scan"))); } } void ScannerSane::doGetParameters() { SANE_Status status = sane_get_parameters(m_job->handle, &m_job->parameters); qDebug("sane_get_parameters() -> %s", sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { failScan(getErrorMessage(status, _("Error communicating with scanner"))); return; } qDebug("Parameters: format=%s last_frame=%s bytes_per_line=%d pixels_per_line=%d lines=%d depth=%d", getFrameModeString(m_job->parameters.format).toLocal8Bit().data(), m_job->parameters.last_frame ? "SANE_TRUE" : "SANE_FALSE", m_job->parameters.bytes_per_line, m_job->parameters.pixels_per_line, m_job->parameters.lines, m_job->parameters.depth); m_job->height = std::max(1, m_job->parameters.lines); m_job->rowstride = m_job->parameters.pixels_per_line * 3; // Buffer is for a 24 bit RGB image m_job->imgbuf.resize(m_job->rowstride * m_job->parameters.lines); /* Prepare for read */ m_job->lineBuffer.resize(m_job->parameters.bytes_per_line); m_job->nUsed = 0; m_job->lineCount = 0; setState(State::READ); } void ScannerSane::doRead() { /* Read as many bytes as we need to complete a line */ int n_to_read = m_job->lineBuffer.size() - m_job->nUsed; SANE_Int n_read; unsigned char* b = &m_job->lineBuffer[m_job->nUsed]; SANE_Status status = sane_read(m_job->handle, b, n_to_read, &n_read); qDebug("sane_read(%d) -> (%s, %d)", n_to_read, sane_strstatus(status), n_read); /* Completed read */ if(status == SANE_STATUS_EOF) { // EOF with no data read, means ADF has no further page if(m_job->lineCount == 0) { doStop(); return; } if(m_job->parameters.lines > 0 && m_job->lineCount != m_job->parameters.lines) { qWarning("Scan completed with %d lines, expected %d lines", m_job->lineCount, m_job->parameters.lines); } if(m_job->nUsed > 0) { qWarning("Scan complete with %d bytes of unused data", m_job->nUsed); } doCompletePage(); return; } else if(status != SANE_STATUS_GOOD) { qWarning("Unable to read frame from device: %s", sane_strstatus(status)); failScan(getErrorMessage(status, _("Error communicating with scanner"))); return; } m_job->nUsed += n_read; /* If we completed a line, feed it out */ if(m_job->nUsed >= m_job->lineBuffer.size()) { Q_ASSERT(m_job->nUsed == m_job->parameters.bytes_per_line); ++m_job->lineCount; // Resize image if necessary if(m_job->lineCount > m_job->height) { m_job->height = m_job->lineCount; m_job->imgbuf.resize(m_job->rowstride * m_job->height); } // Write data int offset = (m_job->lineCount - 1) * m_job->rowstride; if(m_job->parameters.format == SANE_FRAME_GRAY) { for(int i = 0; i < m_job->lineBuffer.size(); ++i) { std::memset(&m_job->imgbuf[offset + 3 * i], m_job->lineBuffer[i], 3); } } else if(m_job->parameters.format == SANE_FRAME_RGB) { std::memcpy(&m_job->imgbuf[offset], &m_job->lineBuffer[0], m_job->lineBuffer.size()); } else if(m_job->parameters.format == SANE_FRAME_RED) { for(int i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 0] = m_job->lineBuffer[i]; } } else if(m_job->parameters.format == SANE_FRAME_GREEN) { for(int i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 1] = m_job->lineBuffer[i]; } } else if(m_job->parameters.format == SANE_FRAME_BLUE) { for(int i = 0; i < m_job->lineBuffer.size(); ++i) { m_job->imgbuf[offset + 3 * i + 2] = m_job->lineBuffer[i]; } } /* Reset buffer */ m_job->nUsed = 0; m_job->lineBuffer.resize(m_job->parameters.bytes_per_line); } } void ScannerSane::doCompletePage() { if(!m_job->parameters.last_frame) { setState(State::GET_PARAMETERS); return; } QString filename = m_job->params.filename; if(m_job->params.type != ScanType::SINGLE) { QFileInfo finfo(filename); filename = QString("%1/%2-%3.%4").arg(finfo.absolutePath()).arg(finfo.completeBaseName()).arg(m_job->pageNumber).arg(finfo.completeSuffix()); filename = Utils::makeOutputFilename(filename); } if(!QImage(m_job->imgbuf.data(), m_job->rowstride / 3, m_job->height, m_job->rowstride, QImage::Format_RGB888).save(filename)) { failScan(_("Failed to save image")); return; } m_job->imgbuf.clear(); emit pageAvailable(filename); if(m_job->params.type != ScanType::SINGLE) { ++m_job->pageNumber; setState(State::GET_PARAMETERS); return; } doStop(); } void ScannerSane::doStop() { if(m_job != nullptr) { if(m_job->handle != nullptr) { qDebug("sane_close()"); sane_close(m_job->handle); } delete m_job; m_job = nullptr; setState(State::IDLE); } } /***************************** Sane option stuff *****************************/ const SANE_Option_Descriptor* ScannerSane::getOptionByName(const QMap& options, SANE_Handle, const QString& name, int& index) { QMap::const_iterator it = options.find(name); if(it != options.end()) { index = it.value(); return sane_get_option_descriptor(m_job->handle, index); } index = 0; return nullptr; } bool ScannerSane::setDefaultOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index) { /* Check if supports automatic option */ if((option->cap & SANE_CAP_AUTOMATIC) == 0) { return false; } SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_AUTO, nullptr, nullptr); qDebug("sane_control_option(%d, SANE_ACTION_SET_AUTO) -> %s", option_index, sane_strstatus(status)); if(status != SANE_STATUS_GOOD) { qWarning("Error setting default option %s: %s", option->name, sane_strstatus(status)); } return status == SANE_STATUS_GOOD; } void ScannerSane::setBoolOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, bool value, bool* result) { if(option->type != SANE_TYPE_BOOL) { return; } SANE_Bool v = static_cast(value); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v, nullptr); if(result) { *result = static_cast(v); } qDebug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %s) -> (%s, %s)", option_index, value ? "SANE_TRUE" : "SANE_FALSE", sane_strstatus(status), result ? "SANE_TRUE" : "SANE_FALSE"); } void ScannerSane::setIntOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, int value, int* result) { if(option->type != SANE_TYPE_INT) { return; } SANE_Word v = static_cast(value); if(option->constraint_type == SANE_CONSTRAINT_RANGE) { if(option->constraint.range->quant != 0) { v *= option->constraint.range->quant; } v = std::max(option->constraint.range->min, std::min(option->constraint.range->max, v)); } else if(option->constraint_type == SANE_CONSTRAINT_WORD_LIST) { int distance = std::numeric_limits::max(); int nearest = 0; /* Find nearest value to requested */ for(int i = 0; i < option->constraint.word_list[0]; ++i) { int x = option->constraint.word_list[i + 1]; int d = qAbs(x - v); if(d < distance) { distance = d; nearest = x; } } v = nearest; } SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v, nullptr); qDebug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %d) -> (%s, %d)", option_index, value, sane_strstatus(status), v); if(result) { *result = v; } } void ScannerSane::setFixedOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, double value, double* result) { if(option->type != SANE_TYPE_FIXED) { return; } double v = value; if(option->constraint_type == SANE_CONSTRAINT_RANGE) { double min = SANE_UNFIX(option->constraint.range->min); double max = SANE_UNFIX(option->constraint.range->max); v = std::max(min, std::min(max, v)); } else if(option->constraint_type == SANE_CONSTRAINT_WORD_LIST) { double distance = std::numeric_limits::max(); double nearest = 0.0; /* Find nearest value to requested */ for(int i = 0; i < option->constraint.word_list[0]; ++i) { double x = SANE_UNFIX(option->constraint.word_list[i + 1]); double d = qAbs(x - v); if(d < distance) { distance = d; nearest = x; } } v = nearest; } SANE_Fixed v_fixed = SANE_FIX(v); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, &v_fixed, nullptr); qDebug("sane_control_option(%d, SANE_ACTION_SET_VALUE, %f) -> (%s, %f)", option_index, value, sane_strstatus(status), SANE_UNFIX(v_fixed)); if(result) { *result = SANE_UNFIX(v_fixed); } } bool ScannerSane::setStringOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const QString& value, QString* result) { if(option->type != SANE_TYPE_STRING) { return false; } char* v = new char[value.size() + 1]; // +1: \0 QByteArray val = value.toLocal8Bit(); strncpy(v, val.data(), val.size() + 1); SANE_Status status = sane_control_option(handle, option_index, SANE_ACTION_SET_VALUE, v, nullptr); qDebug("sane_control_option(%d, SANE_ACTION_SET_VALUE, \"%s\") -> (%s, \"%s\")", option_index, val.data(), sane_strstatus(status), v); if(result) { *result = v; } delete[] v; return status == SANE_STATUS_GOOD; } bool ScannerSane::setConstrainedStringOption(SANE_Handle handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const QStringList& values, QString* result) { if(option->type != SANE_TYPE_STRING) { return false; } if(option->constraint_type != SANE_CONSTRAINT_STRING_LIST) { return false; } for(const QString& value : values) { for(int j = 0; option->constraint.string_list[j] != nullptr; ++j) { if(value == option->constraint.string_list[j]) { return setStringOption(handle, option, option_index, value, result); } } } if(result) { *result = ""; } return false; } void ScannerSane::logOption(SANE_Int index, const SANE_Option_Descriptor* option) { QString s = QString("Option %1:").arg(index); if(option->name && std::strlen(option->name) > 0) { s += QString(" name='%1'").arg(option->name); } if(option->title && std::strlen(option->title) > 0) { s += QString(" title='%1'").arg(option->title); } QString typestr[] = {"bool", "int", "fixed", "string", "button", "group"}; if(option->type <= SANE_TYPE_GROUP) { s += QString(" type=%1").arg(typestr[option->type]); } else { s += QString(" type=%1").arg(option->type); } s += QString(" size=%1").arg(option->size); QString unitstr[] = {"none", "pixel", "bit", "mm", "dpi", "percent", "microseconds"}; if(option->unit <= SANE_UNIT_MICROSECOND) { s += QString(" unit=%1").arg(unitstr[option->unit]); } else { s += QString(" unit=%1").arg(option->unit); } switch(option->constraint_type) { case SANE_CONSTRAINT_RANGE: if(option->type == SANE_TYPE_FIXED) { s += QString(" min=%1, max=%2, quant=%3").arg(SANE_UNFIX(option->constraint.range->min)).arg(SANE_UNFIX(option->constraint.range->max)).arg(option->constraint.range->quant); } else { s += QString(" min=%1, max=%2, quant=%3").arg(option->constraint.range->min).arg(option->constraint.range->max).arg(option->constraint.range->quant); } break; case SANE_CONSTRAINT_WORD_LIST: s += " values=["; for(int i = 0; i < option->constraint.word_list[0]; ++i) { if(i > 0) { s += ", "; } if(option->type == SANE_TYPE_INT) { s += QString("%1").arg(option->constraint.word_list[i + 1]); } else { s += QString("%1").arg(SANE_UNFIX(option->constraint.word_list[i + 1])); } } s += "]"; break; case SANE_CONSTRAINT_STRING_LIST: s += " values=["; for(int i = 0; option->constraint.string_list[i] != nullptr; ++i) { if(i > 0) { s += ", "; } s += QString("\"%1\"").arg(option->constraint.string_list[i]); } s += "]"; break; default: break; } int cap = option->cap; if(cap != 0) { s += " cap="; if((cap & SANE_CAP_SOFT_SELECT) != 0) { s += "soft-select,"; cap &= ~SANE_CAP_SOFT_SELECT; } if((cap & SANE_CAP_HARD_SELECT) != 0) { s += "hard-select,"; cap &= ~SANE_CAP_HARD_SELECT; } if((cap & SANE_CAP_SOFT_DETECT) != 0) { s += "soft-detect,"; cap &= ~SANE_CAP_SOFT_DETECT; } if((cap & SANE_CAP_EMULATED) != 0) { s += "emulated,"; cap &= ~SANE_CAP_EMULATED; } if((cap & SANE_CAP_AUTOMATIC) != 0) { s += "automatic,"; cap &= ~SANE_CAP_AUTOMATIC; } if((cap & SANE_CAP_INACTIVE) != 0) { s += "inactive,"; cap &= ~SANE_CAP_INACTIVE; } if((cap & SANE_CAP_ADVANCED) != 0) { s += "advanced,"; cap &= ~SANE_CAP_ADVANCED; } /* Unknown capabilities */ if(cap != 0) { s += QString("unknown (%1)").arg(cap); } } qDebug("%s", qPrintable(s)); if(option->desc != nullptr) { qDebug(" Description: %s", option->desc); } } QString ScannerSane::getFrameModeString(SANE_Frame frame) { QString framestr[] = {"SANE_FRAME_GRAY", "SANE_FRAME_RGB", "SANE_FRAME_RED", "SANE_FRAME_GREEN", "SANE_FRAME_BLUE"}; if(frame <= SANE_FRAME_BLUE) { return framestr[frame]; } else { return QString("SANE_FRAME(%1)").arg(frame); } } QString ScannerSane::getErrorMessage(SANE_Status status, const QString& defaultMessage) { switch (status) { case SANE_STATUS_CANCELLED: return _("Operation is cancelled."); case SANE_STATUS_DEVICE_BUSY: return _("Device is busy."); case SANE_STATUS_COVER_OPEN: return _("Cover is opened."); case SANE_STATUS_JAMMED: return _("Document feeder jammed."); case SANE_STATUS_NO_DOCS: return _("Document feeder out of documents."); case SANE_STATUS_ACCESS_DENIED: return _("Access to scanner is denied."); default: return defaultMessage; } } gImageReader-3.4.0/qt/src/scanner/ScannerSane.hh000066400000000000000000000065351417507262200214360ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerSane.hh * Based on code from Simple Scan, which is: * Copyright (C) 2009-2013 Canonical Ltd. * Author: Robert Ancell * Modifications are: * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_SANE_HH #define SCANNER_SANE_HH #include "../Scanner.hh" #include "../Utils.hh" #include #include #include class ScannerSane : public Scanner { Q_OBJECT public: void init() override; void redetect() override; void scan(const Params& params) override; void cancel() override; void close() override; private: struct ScanJob { ScanJob(const Params& _params) : params(_params) {} Params params; SANE_Handle handle = nullptr; SANE_Parameters parameters; QVector lineBuffer; QVector imgbuf; int nUsed = 0; // Number of used bytes in the line buffer int lineCount = 0; // Number of read lines int height = 0; int rowstride = 0; int pageNumber = 0; }; struct Request { enum class Type { Redetect, StartScan, Cancel, Quit } type; ScanJob* job; }; QThread m_thread; State m_state = State::IDLE; Utils::AsyncQueue m_requestQueue; ScanJob* m_job = nullptr; void doRedetect(); void doOpen(); void doSetOptions(); void doStart(); void doGetParameters(); void doRead(); void doCompletePage(); void doStop(); void setState(State state); void failScan(const QString& errorString); const SANE_Option_Descriptor* getOptionByName(const QMap& options, SANE_Handle, const QString& name, int& index); bool setDefaultOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index); void setBoolOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, bool value, bool* result); void setIntOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, int value, int* result); void setFixedOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, double value, double* result); bool setStringOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const QString& value, QString* result); bool setConstrainedStringOption(SANE_Handle m_handle, const SANE_Option_Descriptor* option, SANE_Int option_index, const QStringList& values, QString* result); void logOption(SANE_Int index, const SANE_Option_Descriptor* option); static QString getFrameModeString(SANE_Frame frame); static QString getErrorMessage(SANE_Status status, const QString& defaultMessage); private slots: void run(); }; typedef ScannerSane ScannerImpl; #endif // SCANNER_SANE_HH gImageReader-3.4.0/qt/src/scanner/ScannerTwain.cc000066400000000000000000000341011417507262200216060ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerTwain.cc * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScannerTwain.hh" #include "../MainWindow.hh" #include #include #include #ifdef Q_OS_WIN32 bool ScannerTwain::saveDIB(TW_MEMREF hImg, const QString& filename) { PBITMAPINFOHEADER pDIB = reinterpret_cast(m_entryPoint.DSM_MemLock(hImg)); if(pDIB == nullptr) { return false; } DWORD paletteSize = 0; if(pDIB->biBitCount == 1) { paletteSize = 2; } else if(pDIB->biBitCount == 8) { paletteSize = 256; } else if(pDIB->biBitCount == 24) { paletteSize = 0; } else { // Unsupported m_entryPoint.DSM_MemUnlock(hImg); m_entryPoint.DSM_MemFree(hImg); return false; } // If the driver did not fill in the biSizeImage field, then compute it. // Each scan line of the image is aligned on a DWORD (32bit) boundary. if( pDIB->biSizeImage == 0 ) { pDIB->biSizeImage = ((((pDIB->biWidth * pDIB->biBitCount) + 31) & ~31) / 8) * pDIB->biHeight; // If a compression scheme is used the result may be larger: increase size. if (pDIB->biCompression != 0) { pDIB->biSizeImage = (pDIB->biSizeImage * 3) / 2; } } quint64 imageSize = pDIB->biSizeImage + sizeof(RGBQUAD) * paletteSize + sizeof(BITMAPINFOHEADER); BITMAPFILEHEADER bmpFIH = {0}; bmpFIH.bfType = ( (WORD) ('M' << 8) | 'B'); bmpFIH.bfSize = imageSize + sizeof(BITMAPFILEHEADER); bmpFIH.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (sizeof(RGBQUAD) * paletteSize); unsigned char* bmpData = new unsigned char[sizeof(BITMAPFILEHEADER) + imageSize]; std::memcpy(bmpData, &bmpFIH, sizeof(BITMAPFILEHEADER)); std::memcpy(bmpData + sizeof(BITMAPFILEHEADER), pDIB, imageSize); QImage image; image.loadFromData(bmpData, sizeof(BITMAPFILEHEADER) + imageSize, "bmp"); bool success = image.save(filename); delete[] bmpData; m_entryPoint.DSM_MemUnlock(hImg); m_entryPoint.DSM_MemFree(hImg); return success; } #endif ScannerTwain* ScannerTwain::s_instance = nullptr; void ScannerTwain::init() { if(m_dsmLib.isLoaded()) { qWarning("Init already called!"); emit initFailed(); return; } #ifdef Q_OS_WIN32 QString twaindsm = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath("twaindsm.dll"); #else QString twaindsm = "libtwaindsm.so.2.2.0"; #endif // State 1 to 2 m_dsmLib.setFileName(twaindsm); if(!m_dsmLib.load()) { qCritical("LoadLibrary failed on %s", qPrintable(twaindsm)); emit initFailed(); close(); return; } m_dsmEntry = (DSMENTRYPROC)m_dsmLib.resolve("DSM_Entry"); if(m_dsmEntry == nullptr) { qCritical("GetProcAddress failed on %s::DSM_Entry", qPrintable(twaindsm)); emit initFailed(); close(); return; } m_appID.Id = 0; m_appID.Version.MajorNum = 1; m_appID.Version.MinorNum = 0; m_appID.Version.Language = TWLG_USA; m_appID.Version.Country = TWCY_USA; std::strncpy(m_appID.Version.Info, "TWAIN Interface", sizeof(m_appID.Version.Info)); std::strncpy(m_appID.ProductName, "TWAIN Interface", sizeof(m_appID.ProductName)); std::strncpy(m_appID.Manufacturer, "Sandro Mani", sizeof(m_appID.Manufacturer)); std::strncpy(m_appID.ProductFamily, "Sandro Mani", sizeof(m_appID.ProductFamily)); m_appID.SupportedGroups = DF_APP2 | DG_IMAGE | DG_CONTROL; m_appID.ProtocolMajor = TWON_PROTOCOLMAJOR; m_appID.ProtocolMinor = TWON_PROTOCOLMINOR; m_state = 2; // State 2 to 3 TW_MEMREF phwnd = nullptr; #ifdef Q_OS_WIN32 HWND hwnd = (HWND)MAIN->winId(); phwnd = &hwnd; #endif if(call(nullptr, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, phwnd) != TWRC_SUCCESS) { emit initFailed(); close(); return; } if((m_appID.SupportedGroups & DF_DSM2) == 0) { qCritical("Twain 2.x interface is not supported"); emit initFailed(); close(); return; } // Get entry point of memory management functions m_entryPoint.Size = sizeof(TW_ENTRYPOINT); if(call(nullptr, DG_CONTROL, DAT_ENTRYPOINT, MSG_GET, &m_entryPoint) != TWRC_SUCCESS) { emit initFailed(); close(); return; } m_state = 3; s_instance = this; // Redetect on init redetect(); } void ScannerTwain::redetect() { TW_IDENTITY sourceID; QList sources; // Get the first source TW_UINT16 twRC = call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_GETFIRST, &sourceID); // Loop through all the sources while (twRC == TWRC_SUCCESS) { sources.append(Device{sourceID.ProductName, sourceID.ProductName}); twRC = call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_GETNEXT, &sourceID); } emit devicesDetected(sources); } void ScannerTwain::scan(const Params& params) { if(params.device.isEmpty()) { failScan(_("No scanner specified")); return; } /** Open device **/ emit scanStateChanged(State::OPEN); std::strncpy(m_srcID.ProductName, params.device.toLocal8Bit().data(), sizeof(m_srcID.ProductName) - 1); // State 3 to 4 if(call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, &m_srcID) != TWRC_SUCCESS) { failScan(_("Unable to connect to scanner")); return; } m_state = 4; // Register callback TW_CALLBACK cb = {}; cb.CallBackProc = reinterpret_cast(callback); if(TWRC_SUCCESS == call(&m_srcID, DG_CONTROL, DAT_CALLBACK, MSG_REGISTER_CALLBACK, &cb)) { m_useCallback = true; } else { m_useCallback = false; } /** Set options **/ emit scanStateChanged(State::SET_OPTIONS); #ifndef Q_OS_WIN32 // Set the filename TW_SETUPFILEXFER xferFile = {}; std::strncpy(xferFile.FileName, params.filename.toLocal8Bit().data(), sizeof(xferFile.FileName)); xferFile.Format = TWFF_PNG; xferFile.VRefNum = TWON_DONTCARE16; if(call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_SET, &xferFile) != TWRC_SUCCESS) { // Possibly unsupported file format. Get the default format, and try again with that one call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_GET, &xferFile); QString defaultfile = xferFile.FileName; params.filename = params.filename.left(params.filename.lastIndexOf('.')) + defaultfile.right(defaultfile.length() - defaultfile.lastIndexOf('.')); std::strncpy(xferFile.FileName, params.filename.toLocal8Bit().data(), sizeof(xferFile.FileName)); if(call(&m_srcID, DG_CONTROL, DAT_SETUPFILEXFER, MSG_SET, &xferFile) != TWRC_SUCCESS) { // If we failed again, just return the default file... params.filename = defaultfile; } } #endif // Set capabilities setCapability(CAP_XFERCOUNT, CapOneVal(TWTY_INT16, 1)); setCapability(ICAP_XRESOLUTION, CapOneVal(TWTY_FIX32, floatToFix32(params.dpi))); setCapability(ICAP_YRESOLUTION, CapOneVal(TWTY_FIX32, floatToFix32(params.dpi))); setCapability(ICAP_SUPPORTEDSIZES, CapOneVal(TWTY_UINT16, TWSS_NONE)); // Maximum scan area setCapability(ICAP_BITDEPTH, CapOneVal(TWTY_UINT16, params.depth)); if(params.scan_mode != ScanMode::DEFAULT) { if(params.scan_mode == ScanMode::COLOR) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_RGB)); } else if(params.scan_mode == ScanMode::GRAY) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_GRAY)); } else if(params.scan_mode == ScanMode::LINEART) { setCapability(ICAP_PIXELTYPE, CapOneVal(TWTY_UINT16, TWPT_BW)); } } // TODO: ADF, duplex, paper size /** Start device **/ emit scanStateChanged(State::START); m_dsMsg = MSG_NULL; m_dsQuit = false; m_ui.ShowUI = true; m_ui.ModalUI = true; m_ui.hParent = nullptr;; #ifdef Q_OS_WIN32 m_ui.hParent = (HWND)MAIN->winId(); #endif // State 4 to 5 if(call(&m_srcID, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &m_ui) != TWRC_SUCCESS) { failScan(_("Unable to start scan")); return; } m_state = 5; m_cancel = false; #ifdef Q_OS_WIN32 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) QAbstractEventDispatcher::instance()->setEventFilter(eventFilter); #else QCoreApplication::instance()->installNativeEventFilter(&m_eventFilter); #endif while(m_dsMsg == 0 && !m_dsQuit && !m_cancel) { QCoreApplication::processEvents(); } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) QAbstractEventDispatcher::instance()->setEventFilter(nullptr); #else QCoreApplication::instance()->removeNativeEventFilter(&m_eventFilter); #endif #else m_mutex.lock(); while(m_dsMsg == MSG_NULL) { m_cond.wait(&m_mutex); } m_mutex.unlock(); #endif if(m_cancel) { failScan(_("Scan canceled")); } if(m_dsMsg != MSG_XFERREADY) { failScan(_("Unable to start scan")); return; } /** Read **/ emit scanStateChanged(State::READ); m_state = 6; bool saveOk = true; #ifdef Q_OS_WIN32 TW_MEMREF hImg = nullptr; TW_UINT16 twRC = call(&m_srcID, DG_IMAGE, DAT_IMAGENATIVEXFER, MSG_GET, (TW_MEMREF)&hImg); if(twRC == TWRC_XFERDONE) { saveOk = saveDIB(hImg, params.filename); } #else TW_UINT16 twRC = call(&m_srcID, DG_IMAGE, DAT_IMAGEFILEXFER, MSG_GET, nullptr); #endif TW_PENDINGXFERS twPendingXFers = {}; call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, &twPendingXFers); if(twPendingXFers.Count != 0) { // Discard any additional pending transfers std::memset(&twPendingXFers, 0, sizeof(twPendingXFers)); call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, &twPendingXFers); } if(twRC != TWRC_XFERDONE || !saveOk) { failScan(_("Error communicating with scanner")); return; } emit pageAvailable(params.filename); /** Stop device **/ doStop(); } void ScannerTwain::doStop() { if(m_state == 6) { TW_PENDINGXFERS twPendingXFers = {}; // State 7/6 to 5 call(&m_srcID, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, &twPendingXFers); m_state = 5; } if(m_state == 5) { // State 5 to 4 call(&m_srcID, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &m_ui); m_state = 4; } if(m_state == 4) { // State 4 to 3 call(nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, &m_srcID); m_srcID = {}; m_state = 3; } emit scanStateChanged(State::IDLE); } void ScannerTwain::failScan(const QString& errorString) { doStop(); emit scanFailed(errorString); } void ScannerTwain::close() { doStop(); if(m_state == 3) { // State 3 to 2 call(nullptr, DG_CONTROL, DAT_PARENT, MSG_CLOSEDSM, nullptr); m_state = 2; } if(m_state == 2) { m_dsmLib.unload(); } m_state = 1; s_instance = nullptr; } #ifdef Q_OS_WIN32 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) bool ScannerTwain::eventFilter(void* message) #else bool ScannerTwain::NativeEventFilter::nativeEventFilter(const QByteArray& /*eventType*/, void* message, long* /*result*/) #endif { LPMSG msg = static_cast(message); if(msg->message == WM_CLOSE) { s_instance->m_dsQuit = true; return true; } TW_EVENT twEvent = {0}; twEvent.pEvent = (TW_MEMREF)msg; twEvent.TWMessage = MSG_NULL; TW_UINT16 twRC = s_instance->m_dsmEntry(&s_instance->m_appID, &s_instance->m_srcID, DG_CONTROL, DAT_EVENT, MSG_PROCESSEVENT, (TW_MEMREF)&twEvent); if(!s_instance->m_useCallback && twRC == TWRC_DSEVENT) { if(twEvent.TWMessage == MSG_XFERREADY || twEvent.TWMessage == MSG_CLOSEDSREQ || twEvent.TWMessage == MSG_CLOSEDSOK || twEvent.TWMessage == MSG_NULL) { s_instance->m_dsMsg = twEvent.TWMessage; } return true; } return false; } #endif /*********************** ScannerTwain internal methods ***********************/ TW_UINT16 ScannerTwain::call(TW_IDENTITY* idDS, TW_UINT32 dataGroup, TW_UINT16 dataType, TW_UINT16 msg, TW_MEMREF data) { TW_UINT16 rc = m_dsmEntry(&m_appID, idDS, dataGroup, dataType, msg, data); if(rc == TWRC_FAILURE) { TW_STATUS status = {}; rc = m_dsmEntry(&m_appID, idDS, DG_CONTROL, DAT_STATUS, MSG_GET, &status); TW_UINT16 cc = rc == TWRC_SUCCESS ? status.ConditionCode : TWCC_BUMMER; qCritical("Call failed with code 0x%x: DataGroup: 0x%lx, DataType = 0x%x, Msg = 0x%x", cc, dataGroup, dataType, msg); return TWRC_FAILURE; } return rc; } // TWTY_** size: INT8, INT16, INT32, UINT8, UINT16, UINT32, BOOL, FIX32, FRAME, STR32, STR64, STR128, STR255; static std::size_t TWTY_Size[] = { 1, 2, 4, 1, 2, 4, 2, 4, 16, 32, 64, 128, 255}; void ScannerTwain::setCapability(TW_UINT16 capCode, const CapOneVal& cap) { TW_CAPABILITY twCapability = {capCode, TWON_DONTCARE16, nullptr}; TW_UINT16 rc = call(&m_srcID, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCapability); // Unsupported capability if(rc != TWRC_SUCCESS) { return; } Q_ASSERT(twCapability.ConType == TWON_ONEVALUE); pTW_ONEVALUE val = static_cast(m_entryPoint.DSM_MemLock(twCapability.hContainer)); Q_ASSERT(val->ItemType == cap.type && val->ItemType <= TWTY_STR255); // This works because the DSM should return a TW_ONEVALUE container allocated sufficiently large to hold // the value of type ItemType. std::memcpy(&val->Item, &cap.data, TWTY_Size[cap.type]); m_entryPoint.DSM_MemUnlock(twCapability.hContainer); call(&m_srcID, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCapability); m_entryPoint.DSM_MemFree(twCapability.hContainer); } TW_UINT16 ScannerTwain::callback(TW_IDENTITY* origin, TW_IDENTITY* /*dest*/, TW_UINT32 /*DG*/, TW_UINT16 /*DAT*/, TW_UINT16 MSG, TW_MEMREF /*data*/) { if(origin == nullptr || origin->Id != s_instance->m_srcID.Id) { return TWRC_FAILURE; } if(MSG == MSG_XFERREADY || MSG == MSG_CLOSEDSREQ || MSG == MSG_CLOSEDSOK || MSG == MSG_NULL) { s_instance->m_dsMsg = MSG; #ifndef Q_OS_WIN32 s_instance->m_mutex.lock(); s_instance->m_cond.wakeOne(); s_instance->m_mutex.unlock(); #endif return TWRC_SUCCESS; } return TWRC_FAILURE; } inline TW_FIX32 ScannerTwain::floatToFix32(float float32) { TW_FIX32 fix32; TW_INT32 value = (TW_INT32)(float32 * 65536.0 + 0.5); fix32.Whole = (TW_INT16)((value >> 16) & 0xFFFFL); fix32.Frac = (TW_INT16)(value & 0xFFFFL); return fix32; } inline float ScannerTwain::fix32ToFloat(TW_FIX32 fix32) { return float(fix32.Whole) + float(fix32.Frac) / (1 << 16); } gImageReader-3.4.0/qt/src/scanner/ScannerTwain.hh000066400000000000000000000061601417507262200216240ustar00rootroot00000000000000/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * ScannerTwain.hh * Copyright (C) 2013-2022 Sandro Mani * * gImageReader is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gImageReader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef SCANNER_TWAIN_HH #define SCANNER_TWAIN_HH #include "../Scanner.hh" #include #include #include #include #include #ifdef Q_OS_WIN32 #include #include #endif #include class ScannerTwain : public Scanner { Q_OBJECT public: void init() override; void redetect() override; void scan(const Params& params) override; void cancel() override { m_cancel = true; } void close() override; private: QLibrary m_dsmLib; DSMENTRYPROC m_dsmEntry = nullptr; TW_IDENTITY m_appID = {}; TW_ENTRYPOINT m_entryPoint = {}; TW_IDENTITY m_srcID = {}; TW_USERINTERFACE m_ui = {}; TW_UINT16 m_dsMsg = MSG_NULL; bool m_dsQuit = false; bool m_cancel = false; bool m_useCallback = false; int m_state = 0; static ScannerTwain* s_instance; #ifndef Q_OS_WIN32 QMutex m_mutex; QWaitCondition m_cond; #endif struct CapOneVal { CapOneVal() = default; CapOneVal(TW_UINT16 _type, std::int32_t _integer) : type(_type) { data.integer = _integer; } CapOneVal(TW_UINT16 _type, TW_FIX32 _fix32) : type(_type) { data.fix32 = _fix32; } CapOneVal(TW_UINT16 _type, TW_FIX32(&_frame)[4]) : type(_type) { std::memcpy(&data.frame[0], &_frame[0], sizeof(data.frame)); } CapOneVal(TW_UINT16 _type, const char* _string) : type(_type) { std::strncpy(&data.string[0], &_string[0], sizeof(data.string)); } TW_UINT16 type; union { std::uint32_t integer; TW_FIX32 fix32; TW_FIX32 frame[4]; char string[256]; } data; }; void doStop(); void failScan(const QString& errorString); TW_UINT16 call(TW_IDENTITY* idDS, TW_UINT32 dataGroup, TW_UINT16 dataType, TW_UINT16 msg, TW_MEMREF data); void setCapability(TW_UINT16 capCode, const CapOneVal& cap); #ifdef Q_OS_WIN32 bool saveDIB(TW_MEMREF hImg, const QString& filename); class NativeEventFilter : public QAbstractNativeEventFilter { public: bool nativeEventFilter(const QByteArray& eventType, void* message, long* result); }; NativeEventFilter m_eventFilter; #endif static PASCAL TW_UINT16 callback(TW_IDENTITY* origin, TW_IDENTITY* dest, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF data); static inline float fix32ToFloat(TW_FIX32 fix32); static inline TW_FIX32 floatToFix32(float float32); }; typedef ScannerTwain ScannerImpl; #endif // SCANNER_TWAIN_HH gImageReader-3.4.0/updateTranslations.sh000077500000000000000000000015621417507262200202670ustar00rootroot00000000000000#!/bin/sh cd "$(dirname "$(readlink -f "$0")")" # Generate POTFILES.in echo "Updating POTFILES.in..." echo "# List of source files containing translatable strings." > po/POTFILES.in echo "" >> po/POTFILES.in echo "data/gimagereader.desktop.in" >> po/POTFILES.in find gtk/data/ -type f -name *.ui -printf '[type: gettext/glade]%p\n' | sort >> po/POTFILES.in find gtk/src/ -type f \( -name *.hh -or -name *.cc \) -print | sort >> po/POTFILES.in find qt/data/ -type f -name *.ui -printf '[type: gettext/qtdesigner]%p\n' | sort >> po/POTFILES.in find qt/src/ -type f \( -name *.hh -or -name *.cc \) -print | sort >> po/POTFILES.in # Update POT and PO files ( cd po echo "Updating gimagereader.pot..." intltool-update --gettext-package=gimagereader --pot while read lang; do echo "Updating $lang.po..." intltool-update --gettext-package=gimagereader $lang done < LINGUAS )