diff --git a/.gitattributes b/.gitattributes index aae1e4ca..b68f4af6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,3 +10,5 @@ *.slvs binary ToolTime_win/bin/*.exe filter=lfs diff=lfs merge=lfs -text ToolTime_win/bin/*.dll filter=lfs diff=lfs merge=lfs -text +ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/* filter=lfs diff=lfs merge=lfs -text +ToolTime_mac/bin/SolveSpace.app/Contents/Frameworks/*.dylib filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index ecd50bc4..60e815d1 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -20,6 +20,8 @@ jobs: access_token: ${{ github.token }} test_ubuntu: + # Disabled: compilation operations paused. + if: false needs: [cancel_previous_runs] runs-on: ubuntu-latest name: Test Ubuntu @@ -31,6 +33,8 @@ jobs: run: .github/scripts/build-ubuntu.sh test_windows: + # Disabled: compilation operations paused. + if: false needs: [cancel_previous_runs] runs-on: windows-2019 name: Test Windows @@ -44,6 +48,8 @@ jobs: shell: bash test_macos: + # Disabled: compilation operations paused. + if: false needs: [cancel_previous_runs] runs-on: macos-latest name: Test macOS @@ -55,6 +61,8 @@ jobs: run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64 build_release_windows: + # Disabled: compilation operations paused. + if: false needs: [test_ubuntu, test_windows, test_macos] name: Build Release Windows runs-on: windows-2019 @@ -73,6 +81,8 @@ jobs: path: build/bin/RelWithDebInfo/solvespace.exe build_release_windows_openmp: + # Disabled: compilation operations paused. + if: false needs: [test_ubuntu, test_windows, test_macos] name: Build Release Windows (OpenMP) runs-on: windows-2019 @@ -91,6 +101,8 @@ jobs: path: build/bin/RelWithDebInfo/solvespace-openmp.exe build_release_macos: + # Disabled: compilation operations paused. + if: false needs: [test_ubuntu, test_windows, test_macos] name: Build Release macOS runs-on: macos-latest @@ -115,6 +127,8 @@ jobs: path: build/bin/SolveSpace.dmg deploy_snap_amd64: + # Disabled: compilation operations paused. + if: false needs: [test_ubuntu, test_windows, test_macos] name: Deploy AMD64 Snap runs-on: ubuntu-latest diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 23188859..37bf6776 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,37 +11,41 @@ on: - v* jobs: - test_ubuntu: - runs-on: ubuntu-latest - name: Test Ubuntu - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: .github/scripts/install-ubuntu.sh - - name: Build & Test - run: .github/scripts/build-ubuntu.sh + # Disabled compile/test classes (kept for easy re-enable): + # - Ubuntu + # - Windows + # - macOS + # test_ubuntu: + # runs-on: ubuntu-latest + # name: Test Ubuntu + # steps: + # - uses: actions/checkout@v2 + # - name: Install Dependencies + # run: .github/scripts/install-ubuntu.sh + # - name: Build & Test + # run: .github/scripts/build-ubuntu.sh - test_windows: - runs-on: windows-2019 - name: Test Windows - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: .github/scripts/install-windows.sh - shell: bash - - name: Build & Test - run: .github/scripts/build-windows.sh - shell: bash + # test_windows: + # runs-on: windows-2019 + # name: Test Windows + # steps: + # - uses: actions/checkout@v2 + # - name: Install Dependencies + # run: .github/scripts/install-windows.sh + # shell: bash + # - name: Build & Test + # run: .github/scripts/build-windows.sh + # shell: bash - test_macos: - runs-on: macos-latest - name: Test macOS - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: .github/scripts/install-macos.sh ci - - name: Build & Test - run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64 + # test_macos: + # runs-on: macos-latest + # name: Test macOS + # steps: + # - uses: actions/checkout@v2 + # - name: Install Dependencies + # run: .github/scripts/install-macos.sh ci + # - name: Build & Test + # run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64 test_flatpak: name: Test Flatpak x86_64 diff --git a/.gitignore b/.gitignore index 1e4ffc65..8718e70d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,12 +2,37 @@ /build*/ /tooltime_*/ /ToolTime_*/ +/ToolTime_*/build/ +!/ToolTime_mac/ +/ToolTime_mac/* +!/ToolTime_mac/bin/ +/ToolTime_mac/bin/* +!/ToolTime_mac/bin/SolveSpace.app/ +!/ToolTime_mac/bin/SolveSpace.app/** !/ToolTime_win/ /ToolTime_win/* !/ToolTime_win/bin/ /ToolTime_win/bin/* !/ToolTime_win/bin/*.exe !/ToolTime_win/bin/*.dll +!/ToolTime_win_ucrt64/ +/ToolTime_win_ucrt64/* +!/ToolTime_win_ucrt64/bin/ +/ToolTime_win_ucrt64/bin/* +!/ToolTime_win_ucrt64/bin/*.exe +!/ToolTime_win_ucrt64/bin/*.dll +!/ToolTime_win_ming32/ +/ToolTime_win_ming32/* +!/ToolTime_win_ming32/bin/ +/ToolTime_win_ming32/bin/* +!/ToolTime_win_ming32/bin/*.exe +!/ToolTime_win_ming32/bin/*.dll +!/ToolTime_win_msvc/ +/ToolTime_win_msvc/* +!/ToolTime_win_msvc/bin/ +/ToolTime_win_msvc/bin/* +!/ToolTime_win_msvc/bin/*.exe +!/ToolTime_win_msvc/bin/*.dll /test/**/*.diff.* /test/**/*.curr.* *.trace @@ -21,7 +46,6 @@ /debian/libslvs1-dev/ /obj-*/ /*.slvs -.vscode/ .playwright-mcp/ # Local macOS SDK / osxcross safety guards diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..3de9d2f9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "git.repositoryScanIgnoredFolders": [ + "extlib/cairo", + "extlib/pixman", + "extlib/libdxfrw", + "extlib/eigen", + "extlib/mimalloc" + ], + "sarif-viewer.connectToGithubCodeScanning": "off" +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..ab1cb709 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build ToolTime (all targets)", + "type": "shell", + "command": "${workspaceFolder}/asyn0c/,test,tooltime,x,ubuntu,all", + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [] + } + ] +} diff --git a/CMakeLists.txt b/CMakeLists.txt index c2c93883..190742e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,9 @@ include(GetGitCommitHash) # set(GIT_COMMIT_HASH 0000000000000000000000000000000000000000) string(SUBSTRING "${GIT_COMMIT_HASH}" 0 8 solvespace_GIT_HASH) +if(NOT DEFINED GIT_COMMIT_DESCRIBE OR "${GIT_COMMIT_DESCRIBE}" STREQUAL "") + set(GIT_COMMIT_DESCRIBE "${solvespace_GIT_HASH}") +endif() project(solvespace VERSION 3.1 LANGUAGES C CXX ASM) @@ -91,6 +94,10 @@ endif() if(MINGW) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") + # Some vendored dependency interfaces may still contribute plain + # `-l` tokens (e.g. -lzlibstatic). Ensure the build output + # directory is in the link search path for MinGW executables. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_BINARY_DIR}/bin") # Link 32 bit SolveSpace with --large-address-aware which allows it to access # up to 3GB on a properly configured 32 bit Windows and up to 4GB on 64 bit. # See https://msdn.microsoft.com/en-us/library/aa366778 @@ -187,6 +194,7 @@ endif() if(APPLE) set(CMAKE_FIND_FRAMEWORK LAST) + find_library(COREFOUNDATION_LIBRARY CoreFoundation REQUIRED) endif() if(EMSCRIPTEN) @@ -228,34 +236,93 @@ if(WIN32 OR APPLE OR EMSCRIPTEN) include(FindVendoredPackage) include(AddVendoredSubdirectory) - set(FORCE_VENDORED_ZLIB ON) - set(FORCE_VENDORED_PNG ON) - set(FORCE_VENDORED_Freetype ON) - - find_vendored_package(ZLIB zlib - ZLIB_LIBRARY zlibstatic - ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/zlib) - list(APPEND ZLIB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/zlib) - - find_vendored_package(PNG libpng - SKIP_INSTALL_ALL ON - PNG_LIBRARY png_static - PNG_ARM_NEON "off" - PNG_SHARED OFF - PNG_STATIC ON - PNG_EXECUTABLES OFF - PNG_TESTS OFF - PNG_FRAMEWORK OFF - PNG_PNG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/libpng) - list(APPEND PNG_PNG_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/libpng) - - find_vendored_package(Freetype freetype - WITH_ZLIB OFF - WITH_BZip2 OFF - WITH_PNG OFF - WITH_HarfBuzz OFF - FREETYPE_LIBRARY freetype - FREETYPE_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extlib/freetype/include) + if(NOT DEFINED FORCE_VENDORED_ZLIB) + set(FORCE_VENDORED_ZLIB ON) + endif() + if(NOT DEFINED FORCE_VENDORED_PNG) + set(FORCE_VENDORED_PNG ON) + endif() + if(NOT DEFINED FORCE_VENDORED_Freetype) + set(FORCE_VENDORED_Freetype ON) + endif() + + if(FORCE_VENDORED_ZLIB) + find_vendored_package(ZLIB zlib + ZLIB_LIBRARY zlibstatic + ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/zlib) + list(APPEND ZLIB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/zlib) + + # Some vendored consumers still pass a plain `-lzlibstatic` token on + # MinGW. Ensure the produced static archive name matches that token. + if(WIN32 AND MINGW AND TARGET zlibstatic) + set_target_properties(zlibstatic PROPERTIES OUTPUT_NAME zlibstatic) + endif() + + # Keep link dependencies target-based so generated buildsystems keep + # proper target-level ordering; avoid file-path forcing here. + else() + find_package(ZLIB REQUIRED) + if(NOT ZLIB_LIBRARY AND ZLIB_LIBRARIES) + set(ZLIB_LIBRARY ${ZLIB_LIBRARIES}) + endif() + endif() + + if(FORCE_VENDORED_PNG) + find_vendored_package(PNG libpng + SKIP_INSTALL_ALL ON + PNG_LIBRARY png_static + PNG_ARM_NEON "off" + PNG_SHARED OFF + PNG_STATIC ON + PNG_EXECUTABLES OFF + PNG_TESTS OFF + PNG_FRAMEWORK OFF + PNG_PNG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/libpng) + list(APPEND PNG_PNG_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/libpng) + + # On MinGW, libpng can propagate a raw `zlibstatic` token via its + # interface link libraries. Rewrite that to the concrete archive path + # so the final executable link does not fail with "cannot find + # zlibstatic". + if(WIN32 AND MINGW AND TARGET png_static AND TARGET zlibstatic) + get_target_property(PNG_IFACE_LIBS png_static INTERFACE_LINK_LIBRARIES) + if(PNG_IFACE_LIBS) + string(REPLACE "zlibstatic" "$" PNG_IFACE_LIBS "${PNG_IFACE_LIBS}") + set_property(TARGET png_static PROPERTY + INTERFACE_LINK_LIBRARIES "${PNG_IFACE_LIBS}") + endif() + unset(PNG_IFACE_LIBS) + endif() + else() + find_package(PNG REQUIRED) + if(NOT PNG_LIBRARY AND PNG_LIBRARIES) + set(PNG_LIBRARY ${PNG_LIBRARIES}) + endif() + if(NOT PNG_PNG_INCLUDE_DIR AND PNG_INCLUDE_DIRS) + set(PNG_PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS}) + endif() + endif() + + if(APPLE AND CMAKE_CROSSCOMPILING) + set(SLVS_FREETYPE_WITH_ZLIB ON) + else() + set(SLVS_FREETYPE_WITH_ZLIB OFF) + endif() + + if(FORCE_VENDORED_Freetype) + find_vendored_package(Freetype freetype + WITH_ZLIB ${SLVS_FREETYPE_WITH_ZLIB} + WITH_BZip2 OFF + WITH_PNG OFF + WITH_HarfBuzz OFF + FREETYPE_LIBRARY freetype + FREETYPE_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extlib/freetype/include) + else() + find_package(Freetype REQUIRED) + if(NOT FREETYPE_LIBRARY AND FREETYPE_LIBRARIES) + set(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES}) + endif() + endif() message(STATUS "Using in-tree pixman") set(PIXMAN_FOUND YES) @@ -303,8 +370,10 @@ if(ENABLE_GUI) find_package(OpenGL REQUIRED) endif() - if(MSVC AND ${CMAKE_SIZEOF_VOID_P} EQUAL 4) - message(STATUS "Using prebuilt SpaceWare") + if(${CMAKE_SIZEOF_VOID_P} EQUAL 4 AND + EXISTS "${CMAKE_SOURCE_DIR}/extlib/si/siapp.h" AND + EXISTS "${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib") + message(STATUS "Using prebuilt 32-bit SpaceWare SDK") set(SPACEWARE_FOUND TRUE) set(SPACEWARE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/extlib/si") diff --git a/README.md b/README.md index 6416b3ad..692905a8 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ -# SolveSpace +# ToolTime SolveSpace Logo +This repository contains the source code of [ToolTime][], a fork of the SolveSpace parametric +2D/3D Computer Aided Design software, with automation enhancements. + +[tooltime]: https://tooltime.frankencluster.right-to-bear-risc.com/ + +## Original SolveSpace + [![Build Status](https://github.com/solvespace/solvespace/workflows/CD/badge.svg)](https://github.com/solvespace/solvespace/actions) [![solvespace](https://snapcraft.io/solvespace/badge.svg)](https://snapcraft.io/solvespace) [![solvespace](https://snapcraft.io/solvespace/trending.svg?name=0)](https://snapcraft.io/solvespace) -This repository contains the source code of [SolveSpace][], a parametric -2d/3d CAD. - -[solvespace]: https://solvespace.com - ## Community The official SolveSpace [website][sswebsite] has [tutorials][sstutorial], @@ -82,11 +84,14 @@ Irrespective of the OS used, before building, check out the project and the necessary submodules: ```sh -git clone https://github.com/solvespace/solvespace +git clone --recurse-submodules https://github.com/solvespace/solvespace cd solvespace git submodule update --init ``` +Windows GUI builds require the pinned `extlib/angle` submodule. Linux and macOS +CLI-only workflows do not use `angle`. + You will need `git`. See the platform specific instructions below to install it. ## Building on Linux @@ -282,6 +287,13 @@ If not CMake may fail in libpng due to some awk scripts - issue #1228. Before building, [check out the project and the necessary submodules](#via-source-code). +If `extlib/angle` was not populated during the initial clone, initialize it before +building on Windows: + +```sh +git submodule update --init extlib/angle +``` + ### Building with Visual Studio IDE Create a directory `build` in diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Frameworks/libz.1.dylib b/ToolTime_mac/bin/SolveSpace.app/Contents/Frameworks/libz.1.dylib new file mode 100755 index 00000000..18ab41ef --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Frameworks/libz.1.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a988400dbf57f00fbf36d233c513b9578ce5e5481c89462eae51931f767c7770 +size 105800 diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Info.plist b/ToolTime_mac/bin/SolveSpace.app/Contents/Info.plist new file mode 100644 index 00000000..2389c234 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleIdentifier + com.solvespace + CFBundleDevelopmentRegion + English + CFBundleExecutable + SolveSpace + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SolveSpace + CFBundlePackageType + APPL + CFBundleVersion + 3.1~de926c79 + CFBundleShortVersionString + 3.1 + NSHumanReadableCopyright + © 2008-2023 Jonathan Westhues and other authors + NSPrincipalClass + NSApplication + NSMainNibFile + MainMenu + CFBundleIconFile + AppIcon + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + slvs + + CFBundleTypeIconFile + AppIcon.icns + CFBundleTypeName + SolveSpace sketch + CFBundleTypeOSTypes + + slvs + + CFBundleTypeRole + Editor + + + + diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/SolveSpace b/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/SolveSpace new file mode 100755 index 00000000..5051b881 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/SolveSpace @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6471b4c9774da16c1d9ab26b3f4bf72ea423342443198fcf3283c8f176bbb27 +size 4716560 diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/solvespace-cli b/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/solvespace-cli new file mode 100755 index 00000000..f3b18b03 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/MacOS/solvespace-cli @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bebff35dca2029d782c0db0068c5f0cbc890e91bff454be74bab20f2843b6cf0 +size 5903144 diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/banner.txt b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/banner.txt new file mode 100644 index 00000000..ad8f4f80 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/banner.txt @@ -0,0 +1 @@ +SolveSpace! diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/BitstreamVeraSans-Roman-builtin.ttf b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/BitstreamVeraSans-Roman-builtin.ttf new file mode 100644 index 00000000..550fe364 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/BitstreamVeraSans-Roman-builtin.ttf differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/0-check-false.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/0-check-false.png new file mode 100644 index 00000000..b9020c33 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/0-check-false.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/1-check-true.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/1-check-true.png new file mode 100644 index 00000000..7f6a42c5 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/1-check-true.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/2-radio-false.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/2-radio-false.png new file mode 100644 index 00000000..f35d6eef Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/2-radio-false.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/3-radio-true.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/3-radio-true.png new file mode 100644 index 00000000..5322f587 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/3-radio-true.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/4-stipple-dot.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/4-stipple-dot.png new file mode 100644 index 00000000..52fc2195 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/4-stipple-dot.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/5-stipple-dash-long.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/5-stipple-dash-long.png new file mode 100644 index 00000000..b73853c7 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/5-stipple-dash-long.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/6-stipple-dash.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/6-stipple-dash.png new file mode 100644 index 00000000..1cec678e Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/6-stipple-dash.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/7-stipple-zigzag.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/7-stipple-zigzag.png new file mode 100644 index 00000000..470a7f27 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/private/7-stipple-zigzag.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unicode.lff.gz b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unicode.lff.gz new file mode 100644 index 00000000..6d35aecf Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unicode.lff.gz differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unifont.hex.gz b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unifont.hex.gz new file mode 100644 index 00000000..db7a7100 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/fonts/unifont.hex.gz differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/angle.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/angle.png new file mode 100644 index 00000000..8b82ba3d Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/angle.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/arc.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/arc.png new file mode 100644 index 00000000..0acded45 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/arc.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/assemble.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/assemble.png new file mode 100644 index 00000000..8436dcdd Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/assemble.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/bezier.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/bezier.png new file mode 100644 index 00000000..fd7d438a Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/bezier.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/circle.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/circle.png new file mode 100644 index 00000000..6ec2c83f Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/circle.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/construction.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/construction.png new file mode 100644 index 00000000..6f48aede Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/construction.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/equal.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/equal.png new file mode 100644 index 00000000..ba9053aa Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/equal.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/extrude.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/extrude.png new file mode 100644 index 00000000..a8eb88bc Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/extrude.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/helix.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/helix.png new file mode 100644 index 00000000..ac4f5096 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/helix.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/horiz.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/horiz.png new file mode 100644 index 00000000..3c23d677 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/horiz.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/image.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/image.png new file mode 100644 index 00000000..5df953a7 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/image.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/in3d.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/in3d.png new file mode 100644 index 00000000..bf395f62 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/in3d.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/lathe.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/lathe.png new file mode 100644 index 00000000..cb91631b Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/lathe.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/length.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/length.png new file mode 100644 index 00000000..552c87c6 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/length.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/line.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/line.png new file mode 100644 index 00000000..356130f9 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/line.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ontoworkplane.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ontoworkplane.png new file mode 100644 index 00000000..66642a33 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ontoworkplane.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/other-supp.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/other-supp.png new file mode 100644 index 00000000..a5577760 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/other-supp.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/parallel.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/parallel.png new file mode 100644 index 00000000..5f76105d Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/parallel.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/perpendicular.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/perpendicular.png new file mode 100644 index 00000000..21277143 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/perpendicular.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/point.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/point.png new file mode 100644 index 00000000..a1a56660 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/point.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/pointonx.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/pointonx.png new file mode 100644 index 00000000..0fa95065 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/pointonx.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/rectangle.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/rectangle.png new file mode 100644 index 00000000..3f9ea7cc Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/rectangle.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ref.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ref.png new file mode 100644 index 00000000..6bc2894f Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/ref.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/revolve.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/revolve.png new file mode 100644 index 00000000..0569907c Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/revolve.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/same-orientation.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/same-orientation.png new file mode 100644 index 00000000..7223d0cc Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/same-orientation.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-3d.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-3d.png new file mode 100644 index 00000000..d15a0d32 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-3d.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-plane.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-plane.png new file mode 100644 index 00000000..30c99beb Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/sketch-in-plane.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-rotate.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-rotate.png new file mode 100644 index 00000000..a64eae44 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-rotate.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-translate.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-translate.png new file mode 100644 index 00000000..493f8533 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/step-translate.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/symmetric.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/symmetric.png new file mode 100644 index 00000000..41926842 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/symmetric.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/tangent-arc.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/tangent-arc.png new file mode 100644 index 00000000..88feddbd Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/tangent-arc.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/text.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/text.png new file mode 100644 index 00000000..886a80aa Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/text.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/trim.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/trim.png new file mode 100644 index 00000000..de11e17a Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/trim.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/vert.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/vert.png new file mode 100644 index 00000000..996b191e Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/graphics-window/vert.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-dimo.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-dimo.png new file mode 100644 index 00000000..bbe6e22c Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-dimo.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-wo.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-wo.png new file mode 100644 index 00000000..c3a445ef Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint-wo.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint.png new file mode 100644 index 00000000..431ed754 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/constraint.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/construction.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/construction.png new file mode 100644 index 00000000..0ecc9a13 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/construction.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/edges.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/edges.png new file mode 100644 index 00000000..f428de17 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/edges.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/faces.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/faces.png new file mode 100644 index 00000000..57345dff Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/faces.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/mesh.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/mesh.png new file mode 100644 index 00000000..260b083f Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/mesh.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/normal.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/normal.png new file mode 100644 index 00000000..95a83391 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/normal.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-invisible.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-invisible.png new file mode 100644 index 00000000..ed353012 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-invisible.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-stippled.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-stippled.png new file mode 100644 index 00000000..04ee458e Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-stippled.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-visible.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-visible.png new file mode 100644 index 00000000..23415c30 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/occluded-visible.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/outlines.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/outlines.png new file mode 100644 index 00000000..f947ec7f Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/outlines.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/point.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/point.png new file mode 100644 index 00000000..a1a56660 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/point.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/shaded.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/shaded.png new file mode 100644 index 00000000..0dff1ae1 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/shaded.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/workplane.png b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/workplane.png new file mode 100644 index 00000000..8e293cd5 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/icons/text-window/workplane.png differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales.txt b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales.txt new file mode 100644 index 00000000..377d6575 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales.txt @@ -0,0 +1,12 @@ +# This file lists the ISO locale codes (ISO 639-1/ISO 3166-1), Windows LCIDs, +# and human-readable names for every culture supported by SolveSpace. +cs-CZ,1029,Česky +de-DE,0407,Deutsch +en-US,0409,English (US) +fr-FR,040C,Français +es-AR,2C0A,español (AR) +ru-RU,0419,Русский +tr-TR,041F,Türkçe +uk-UA,0422,Українська +zh-CN,0804,简体中文 +ja-JP,0411,日本語 diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/cs_CZ.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/cs_CZ.po new file mode 100644 index 00000000..9941e43b --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/cs_CZ.po @@ -0,0 +1,2236 @@ +# Czech translations for SolveSpace package. +# Copyright (C) 2022 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Pavel Stržínek , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.1\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2022-06-19 20:16+0200\n" +"Last-Translator: Pavel Stržínek \n" +"Language-Team: none\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Kopírování, vkládání a vyjímání je funkční jen v pracovní rovině.\n" +"\n" +"Aktivuj ji přes Náčrt -> V pracovní rovině." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Schránka je prázdná; nic ke vložení." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Je třeba zadat alespoň jednu kopii ke vložení." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Měřítko nemůže být nulové." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Vyber jeden bod pro určení počátku otočení." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Vyber dva body pro určení vektoru posunutí." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "Transformace je identická. Všechny kopie budou přesně nad sebou." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Příliš mnoho položek ke vložení; rozděl je a vlož po částech." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Není aktivní žádná pracovní rovina." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Chybný formát: zadej souřadnice jako x, y, z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Chybný formát: zadej barvu jako r, g, b" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Faktor perspektivy nebude mít žádný vliv, dokud nezvolíš Pohled -> Použít " +"perspektivní projekci." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Urči počet platných číslic za desetinnou čárkou mezi 0 a %d." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Měřítko exportu nesmí být nulové!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Posunutí poloměru výřezu nesmí být záporné!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "Chybná hodnota: interval automatického ukládání by měl být kladný" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Chybný formát: zadej interval v celých minutách" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "shoda-bodů" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "vzdálenost-dvou-bodů" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "vzdálenost-bodu-a-úsečky" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "vzdálenost-bodu-a-roviny" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "vzdálenost-bodu-a-stěny" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-vzdálenost-dvou-bodů" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "bod-v-rovině" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "bod-na-přímce" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "bod-na-stěně" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "shodná-délka" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "shodná-délka-a-vzdálenost-bodu-a-úsečky" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "shodná-vzdálenost-bodu-a-úsečky" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "poměr-délky" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "poměr-délky-dvou-oblouků" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "poměr-délky-oblouku-a-úsečky" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "rozdíl-délky" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "rozdíl-délky-dvou-oblouků" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "rozdíl-délky-oblouku-a-úsečky" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "symetrie" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "symetrie-h" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "symetrie-v" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "symetrie-přímka" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "ve-středu" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontála" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertikála" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "průměr" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "bod-na-kruhu" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "shodná-orientace" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "úhel" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "rovnoběžnost" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "tečný-oblouk-a-úsečka" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "tečná-splajna-a-úsečka" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "tečné-dvě-křivky" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "kolmost" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "shodný-poloměr" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "shodný-úhel" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "shodná-délka-úsečky-a-oblouku" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "zámek-kam-přetažen" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "komentář" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Oblouk a tečná úsečka musejí mít společný koncový bod. Omez je nejdříve " +"příkazem Omezit -> Na bodě / křivce / ploše." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Tečný splajn a úsečka musejí mít společný koncový bod. Omez je nejdříve " +"příkazem Omezit -> Na bodě / křivce / ploše." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Křivky musejí mít společný koncový bod. Omez je příkazem Omezit -> V bodě " +"před omezením tečny." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Chybný výběr pro omezení vzdálenosti / průměru. Toto omezení lze použít " +"pro:\n" +"\n" +" * dva body (vzdálenost mezi body)\n" +" * úsečku (délka)\n" +" * dva body a úsečku nebo normálu (promítnutá vzdálenost)\n" +" * pracovní rovinu a bod (minimální vzdálenost)\n" +" * úsečku a bod (minimální vzdálenost)\n" +" * rovinnou plochu a bod (minimální vzdálenost)\n" +" * kružnici nebo oblouk (průměr)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Chybný výběr pro omezení na bod / křivku / rovinu. Toto omezení lze použít " +"pro:\n" +"\n" +" * dva a více bodů (body se shodují)\n" +" * bod a pracovní rovinu (bod v rovině)\n" +" * bod a úsečku (bod na přímce)\n" +" * bod a kružnici nebo oblouk (bod na křivce)\n" +" * bod a jednu až tři rovinné plochy (bod na ploše/plochách)\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Chybný výběr pro omezení stejné délky / poloměru. Toto omezení lze použít " +"pro:\n" +"\n" +" * dvě a více úseček (stejné délky)\n" +" * dvě úsečky a dva body (stejné vzdálenosti bodů od úseček)\n" +" * úsečku a dva body (stejné vzdálenosti bodů od přímky)\n" +" * úsečku a bod a úsečku (vzdálenost bodu od přímky se rovná délce)\n" +" * dvě a více kružnic nebo oblouků (stejný poloměr)\n" +" * úsečku a oblouk (délka úsečky se rovná délce oblouku)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Chybný výběr pro omezení poměru délky. Toto omezení lze použít pro:\n" +"\n" +" * dvě úsečky\n" +" * dva oblouky\n" +" * jeden oblouk a jednu úsečku\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Chybný výběr pro omezení rozdílu délek. Toto omezení lze použít pro:\n" +"\n" +" * dvě úsečky\n" +" * dva oblouky\n" +" * jeden oblouk a jednu úsečku\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Chybný výběr pro omezení ve středovém bodě. Toto omezení lze použít pro: \n" +"\n" +" * úsečku a bod (bod ve středovém bodě)\n" +" * úsečku a pracovní rovinu (střed úsečky v rovině)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Chybný výběr pro symetrické omezení. Toto omezení lze použít pro:\n" +"\n" +" * dva body nebo úsečku (symetrickou vůči souřadnicím osy pracovní " +"roviny)\n" +" * úsečku a dva body nebo úsečku (symetrická k úsečce)\n" +" * pracovní rovinu a dva body nebo úsečku (symetrická k pracovní rovině)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Pracovní rovina musí být aktivní, pokud je omezena symetricky bez explicitní " +"symetrické roviny." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Aktivuj pracovní rovinu (pomocí Náčrt -> V pracovní rovině) před použitím " +"omezení horizontály nebo vertikály." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Chybný výběr pro horizontální / vertikální omezení. Toto omezení lze použít " +"pro:\n" +"\n" +" * dva a více bodů\n" +" * jednu a více úseček\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Chybný výběr pro omezení stejné orientace. Toto omezení lze použít pro: \n" +" \n" +" * dvě normály\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Je nutné vybrat omezení úhlu." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Je nutné vybrat omezení s přiřazeným štítkem." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Chybný výběr pro omezení úhlu. Toto omezení lze použít pro: \n" +"\n" +"Úhel mezi:\n" +" * dvěma úsečkami\n" +" * úsečkou a normálou\n" +" * dvěma normálami\n" +"\n" +"Shodné úhly:\n" +" * čtyři úsečky nebo normály (shodný úhel mezi A,B a C,D)\n" +" * tři úsečky nebo normály (shodný úhel mezi A,B a B,C)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "Tečnost dvou křivek musí být použita v pracovní rovině." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Chybný výběr pro rovnoběžné / tečné omezení. Toto omezení lze použít pro:\n" +" \n" +" * dvě plochy\n" +" * dvě a více úseček (rovnoběžné)\n" +" * jednu a více úseček a jednu a více normál (rovnoběžné)\n" +" * dvě a více normál (rovnoběžné)\n" +" * dvě úsečky, oblouky nebo beziéry, které mají společný koncový bod " +"(tečné)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Chybný výběr pro omezení kolmosti. Toto omezení lze použít pro: \n" +"\n" +" * dvě plochy\n" +" * dvě úsečky\n" +" * úsečku a normálu\n" +" * dvě normály\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Chybný výběr pro omezení uzamčení v místě přetažení. Toto omezení lze použít " +"pro: \n" +"\n" +" * bod\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NOVÝ KOMENTÁŘ -- UPRAVIT DVOJKLIKEM" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "klikni na střed textu komentáře" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Není přítomen žádný model tělesa; vytvoř model pomocí extruzí a rotací nebo " +"použij Exportovat 2D pohled... pro export prostých čar a křivek." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Chybný výběr části pro export. Vyber prosím:\n" +"\n" +" * nic, s aktivní pracovní rovinou (pracovní rovina je rovina řezu)\n" +" * plochu (rovina řezu procházející plochou)\n" +" * bod a dvě úsečky (rovina procházející bodem a rovnoběžná s přímkami)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Síť aktivní skupiny je prázdná; není co exportovat." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "volné úsečky byly nahrazeny souvislými" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "klikaté úsečky byly nahrazeny souvislými" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Některé prvky výkresu nemají ekvivalent ve formátu DXF a nebyly " +"exportovány:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"Velikost stránky PDF přesahuje 200 x 200 palců; mnoho prohlížečů může tento " +"soubor odmítnout." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "náčrt-v-rovině" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#odkazy" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Soubor je prázdný. Může být poškozený." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Nerozpoznaná data v souboru. Tento soubor může být poškozený nebo pochází z " +"novější verze programu." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Chybějící soubor" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "Odkazovaný soubor “%s” není k dispozici." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Chceš jej vyhledat ručně?\n" +"\n" +"Pokud odmítneš, všechny geometrie, které závisí na chybějícím souboru, budou " +"trvale odstraněny." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Ano" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Ne" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Zrušit" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Soubor" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Nový" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Otevřít..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Otevřít &nedávný" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Uložit" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Uložit &jako..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Exportovat &Obrázek..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Exportovat 2D &pohled..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Exportovat 2D čá&st..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Exportovat 3D &drátěný model..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Exportovat &trojúhelníkovou síť (mesh)..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Exportovat &povrchy..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "&Importovat..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "U&končit" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "Up&ravit" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Zpět" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "Z&novu" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Znovu vše &generovat" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Přichytit výběr k &mřížce" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Otočit importované o &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Vyjmou&t" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Kopírovat" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "V&ložit" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Vložit &transformované..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "O&dstranit" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Vybrat ř&etězec hran" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Vybr&at vše" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "Zr&ušit výběr všeho" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "Sty&ly čar..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Projekční pohled..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Nastave&ní..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Zobrazení" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Přiblíž&it" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "&Oddálit" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Přiblížit na &míru" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Zarovnat pohled na pracovní rovinu" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Nejbližší &ortogonální pohled" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Nejbližší &izometrický pohled" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Pohled na střed v bodě" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Zobrazit mřížku přichy&cení" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Ztmavit neaktivní tělesa" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Použít &perspektivní projekci" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Zobrazit &rozbalený pohled" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "&Jednotky rozměru" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Rozměry v &milimetrech" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Rozměry v m&etrech" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Rozměry v &palcích" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Rozměry ve &stopách a palcích" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Zobrazit panel &nástrojů" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Zobrazit ¶metry" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "Na &celou obrazovku" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&Nová skupina" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Náčrt ve &3D" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Náčrt v nové pracovní &rovině" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Krokový &posun" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Krokové &otočení" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "Extruze (e&xtrude)" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "Šroubovice (&helix)" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "Plná rotace (&lathe)" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Volná rotace (re&volve)" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Odkaz / Sestavení..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Odkaz na nedávný" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Náčrt" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "V &pracovní rovině" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Kdekoliv ve &3D" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Vztažný &Bod" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Pracovní rovina" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Úsečka" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "Konstrukční úsečka" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Obdélník" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Kružnice" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Oblouk kružnice" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "&Bézierův kubický splajn" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Text v písmu TrueType" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Obrázek" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Přepnout &konstrukci" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Tečný &oblouk v bodě" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Rozdělit kř&ivky v průsečíku" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "Ome&zení" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Vzdálenost / průměr" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Re&ferenční rozměr" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "Úhe&l / shodný úhel" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Refe&renční úhel" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Další doplňkový úh&el" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Přepnout r&eferenční rozměr" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontála" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertikála" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&Na bodě / křivce / ploše" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "Shodná dél&ka / poloměr" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Poměr délky / oblo&uku" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Rozdíl &délky / oblouku" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "Ve středové&m bodě" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "S&ymetrie" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Rovno&běžnost / tečna" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Kolmost" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Shodná orient&ace" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Uzamčení v místě pře&tažení" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Komentář" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyzovat" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Měření &objemu" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Měření &plochy" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Měření ob&vodu" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Zobrazit kol&idující části" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Zobrazit ob&nažené hrany" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Zobrazit &těžiště" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Zobrazit &nedostatečně omezené body" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Trasovat bod" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Zastavit trasování..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "&Rozměr kroku..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Nápověda" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Jazyk" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Web / Manuál" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "Revize na &GitHubu" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "O &aplikaci" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(žádné nedávné soubory)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "Soubor '%s' neexistuje." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "Žádná pracovní rovina není aktivní, proto nebude mřížka zobrazena." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Faktor perspektivy je nastaven na nulu, proto bude pohled vždy rovnoběžnou " +"projekcí.\n" +"\n" +"Pro perspektivní projekci uprav faktor perspektivy v konfigurační obrazovce. " +"Typická hodnota je kolem 0,3." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "Vyber bod; tento bod se stane středem pohledu na obrazovce." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "Žádné další entity nesdílejí koncové body s vybranými entitami." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Chceš-li použít tento příkaz, vyber bod nebo jinou entitu z propojené části " +"nebo vyber skupinu propojení jako aktivní skupinu." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Žádná pracovní rovina není aktivní. Aktivuj pracovní rovinu (pomocí Náčrt -> " +"V pracovní rovině) pro nastavení roviny přichytávání na mřížku." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Tyto položky nelze přichytit k mřížce; vyber body, textové komentáře nebo " +"omezení se štítkem. Chceš-li přichytit úsečku, vyber její koncové body." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Není vybrána žádná pracovní rovina. Aktivuji výchozí pracovní rovinu pro " +"tuto skupinu." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Není vybrána žádná pracovní rovina a aktivní skupina nemá výchozí pracovní " +"rovinu přiřazenu. Zkus vybrat pracovní rovinu nebo aktivovat skupinu náčrt-v-" +"rovině." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Chybný výběr tečného oblouku v bodě. Vyber jeden bod nebo výběr zruš pro " +"nastavení parametrů oblouku." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "klikni na bod oblouku (kresleno proti směru hodinových ručiček)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "klikni pro umístění vztažného bodu" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "klikni na první bod úsečky" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "klikni na první bod konstrukční úsečky" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "klikni na první bod segmentu splajnu" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "klikni na střed kružnice" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "klikni na počátek pracovní roviny" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "klikni na jeden roh obdélníku" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "klikni na levý horní roh textu" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "klikni na levý horní roh obrázku" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Nejsou vybrány žádné entity. Před přepnutím stavu konstrukce nějaké entity " +"vyber." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "náčrt-ve-3D" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Chybný výběr nového náčrtu v pracovním plánu. Tuto skupinu lze vytvořit " +"pomocí:\n" +"\n" +" * bodu (přes bod, kolmo na souřadnicové osy)\n" +" * bodu a dvou úseček (procházející bodem, rovnoběžná s přímkami)\n" +" * bodu a normály (procházející bodem, kolmá na normálu)\n" +" * pracovní roviny (kopie pracovní roviny)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Před extruzí aktivuj pracovní rovinu (Náčrt -> V pracovní rovině). Náčrt " +"bude extrudován ve směru normály k pracovní rovině." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "extruze" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "Operace plné rotace lze použít pouze na rovinné náčrty.." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Chybný výběr pro novou skupinu plné rotace. Tuto skupinu lze vytvořit " +"pomocí:\n" +"\n" +" * bodu a úsečky nebo normály (rotací kolem osy rovnoběžné k přímce / " +"normále, procházející bodem)\n" +" * úsečky (rotací kolem úsečky)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "plná-rotace" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "Operaci volné rotace lze použít pouze na rovinné náčrty." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Chybný výběr pro novou skupinu volné rotace. Tuto skupinu lze vytvořit " +"pomocí:\n" +"\n" +" * bodu a úsečky nebo normály (rotace kolem osy rovnoběžné s přímkou / " +"normálou, procházející bodem)\n" +" * úsečky (rotace kolem úsečky)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "volná-rotace" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Operaci šroubovice lze použít pouze na rovinné náčrty." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Chybný výběr pro novou skupinu šroubovice. Tuto skupinu lze vytvořit " +"pomocí:\n" +"\n" +" * bodu a úsečky nebo normály (rotací kolem osy rovnoběžné k přímce / " +"normále, procházející bodem)\n" +" * úsečky (rotací kolem úsečky)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "šroubovice" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Chybný výběr pro nové krokové otočení. Tuto skupinu lze vytvořit pomocí:\n" +"\n" +" * bodu, přičemž je uzamčen v pracovní rovině (otočení v rovině, kolem " +"tohoto bodu)\n" +" * bodu a úsečky nebo normály (otočení kolem osy procházející bodem a " +"rovnoběžně s přímkou / normálou)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "otočení" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "posun" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(nepojmenované)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "Obrys není uzavřený nebo není celý v jednotném stylu!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "Ne všechny body jsou v rovině!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "Obrys se sám protíná!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "Nulová délka hrany!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Textové soubory STL nejsou v této chvíli podporovány." + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Pro vytvoření tečného oblouku je nutné kreslit v pracovní rovině." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Chceš-li vytvořit tečný oblouk, vyber bod, kde se s pracovní rovinou stýkají " +"dvě nekonstrukční úsečky nebo kružnice v této skupině." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Tento roh nelze zaoblit. Zkus menší poloměr nebo zkus vytvořit požadovanou " +"geometrii ručně pomocí tečných omezení." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" +"Tuto entitu se nepodařilo rozdělit; pouze úsečky, kružnice nebo splajny." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Rozdělení lze provést pouze při náčrtu v pracovní rovině." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Vyber dvě entity, které se vzájemně protínají (např. dvě čáry / kružnice / " +"oblouky nebo úsečka / kružnice / oblouk a bod)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Nelze rozdělit, nebyla nalezena žádná průsečnice." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Přiřadit ke stylu" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Žádný styl" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Nově vytvořený vlastní styl..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Info o skupině" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Info o stylu" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Vybrat řetězec hran" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Přepnout referenční rozměr" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Další doplňkový úhel" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Přichytit k mřížce" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Odebrat bod splajnu" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Přidat bod splajnu" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "Nelze přidat bod splajnu: bylo dosaženo maximálního počtu bodů." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Přepnout konstrukci" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Odstranit omezení kolidujícího bodu" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Vyjmout" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Kopírovat" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Vybrat vše" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Vložit" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Vložit transformované..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Odstranit" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Zrušit výběr všeho" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Zrušit výběr při najetí" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Přiblížit na míru" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "klikni na další bod úsečky nebo stiskni klávesu Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Nelze nakreslit obdélník ve 3D; nejprve aktivuj pracovní rovinu pomocí Náčrt " +"-> V pracovní rovině." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "kliknutím umísti další roh obdélníku" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "kliknutím nastav poloměr" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Nelze nakreslit oblouk ve 3D; nejprve aktivuj pracovní rovinu pomocí Náčrt -" +"> V pracovní rovině." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "kliknutím umísti bod" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "klikni na další bod splajnu nebo stiskni Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Kreslení v pracovní rovině již probíhá; před vytvořením nové pracovní roviny " +"kresli ve 3D." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Nelze kreslit text ve 3D; nejprve aktivuj pracovní rovinu pomocí Náčrt -> V " +"pracovní rovině." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "klikni pro umístění pravého dolního rohu textu" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Nelze nakreslit obrázek ve 3d; nejprve aktivuj pracovní rovinu pomocí Náčrt -" +"> V pracovní rovině." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace modely" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "VŠE" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF deska plošných spojů" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL trojúhelníková síť" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG obrázek" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL síť (mesh)" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ síť (mesh)" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-compatibilní síť (mesh), s prohlížečem" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-compatibilní síť (mesh), bez prohlížeče" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML textový soubor" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP soubor" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF soubor" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Zapouzdřený PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "SVG soubor" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF soubor (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL soubor" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G kód (G Code)" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF a DWG soubory" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "CSV soubor" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "nepojmenovaný" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Uložit soubor" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Otevřít soubor" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Zrušit" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Uložit" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Otevřít" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Dostupné automatické ukládání" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Pro tento náčrt je k dispozici automatické ukládání souboru." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Chceš místo toho načíst automaticky uložený soubor?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Načíst automaticky uložený" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Nenačítat" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Upravený soubor" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Chceš uložit změny, které jsi provedl v náčrtu “%s”?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Chceš provedené změny uložit do nového náčrtu?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Pokud změny neuložíš, budou ztraceny." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Uložit" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Neukládat" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(nový náčrt)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Parametry" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Omezení jsou aktuálně zobrazena a budou exportována do cesty nástroje. To " +"pravděpodobně není to, co chceš; skryj je kliknutím na odkaz v horní části " +"textového okna." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Nelze určit typ souboru podle přípony názvu souboru '%s'; zkus .dxf nebo ." +"dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Omezení musí mít popisek a nesmí být referenčním rozměrem." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Chybný výběr rozměru kroku; vyber omezení." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "V pořádku, sestava se nepřekrývá." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Objem modelu tělesa je:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Objem aktuální mesh skupiny je:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Zakřivené plochy byly aproximovány jako trojúhelníky.\n" +"To přináší chybu, obvykle kolem 1%%." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Plocha vybraných stěn je:\n" +"\n" +" %s\n" +"\n" +"Křivky byly aproximovány jako po částech lineární.\n" +"To přináší chybu, obvykle kolem 1%%." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Tato skupina neobsahuje správně vytvořenou uzavřenou 2D oblast. Je otevřená, " +"není koplanární ani se neprotíná." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Plocha regionu zakresleného v této skupině je:\n" +"\n" +" %s\n" +"\n" +"Křivky byly aproximovány jako po částech lineární.\n" +"To přináší chybu, obvykle kolem 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Celková délka vybraných entit je:\n" +"\n" +" %s\n" +"\n" +"Křivky byly aproximovány jako po částech lineární.\n" +"To přináší chybu, obvykle kolem 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Chybný výběr obvodu; vyber úsečky, oblouky a křivky." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Chybný výběr pro trasování; vyber jeden bod." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Nelze zapisovat do '%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Síť se sama protíná (NENÍ v pořádku, je neplatná)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Síť se sama neprotíná (je v pořádku, je platná)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Síť má obnažené hrany (NENÍ v pořádku, je neplatná)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Síť je vodotěsná (je v pořádku, je platná)." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Model obsahuje %d trojúhelníků z %d povrchů." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Žádné problematické hrany, v pořádku.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Chyba, počet problematických hran: %d.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Toto je SolveSpace verze %s.\n" +"\n" +"Další informace naleznete na adrese http://solvespace.com/\n" +"\n" +"SolveSpace je svobodný software: můžete jej svobodně upravovat\n" +"a/nebo jej šířit za podmínek GNU\n" +"General Public License (GPL) verze 3 nebo novější.\n" +"\n" +"V rozsahu povoleném zákonem není poskytována ŽÁDNÁ ZÁRUKA.\n" +"Podrobnosti najdete na adrese http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues a další autoři.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Nelze přiřadit styl entitě, která je odvozena od jiné entity; zkus přiřadit " +"styl nadřazené entitě." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Název stylu nemůže být prázdný" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Nelze opakovat méně než 1krát." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Nelze opakovat více než 999krát." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Název skupiny nemůže být prázdný" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Neprůhlednost musí být mezi nulou a jedničkou." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Poloměr nemůže být nulový nebo záporný." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Náčrt úsečky" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Náčrt obdélníku" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Náčrt kružnice" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Náčrt oblouku kružnice" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Náčrt křivek z textu v písmu TrueType" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Náčrt obrázku ze souboru" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Vytvořit tečný oblouk ve vybraném bodě" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Náčrt kubického Bézierova splajnu" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Náčrt vztažného bodu" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Přepnout konstrukci" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Rozdělení úseček / křivek v místě jejich průsečíku" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Omezení vzdálenosti / průměru / délky" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Omezení úhlu" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Omezení horizontály" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Omezení vertikály" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Omezení rovnoběžnosti nebo tečny" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Omezení kolmosti" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Omezení bodu na přímce / křivce / rovině / bodu" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Omezení symetrie" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Omezení shodné délky / poloměru / úhlu" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Omezení normál se stejnou orientací" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Další doplňkový úhel" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Přepnout referenční rozměr" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Nová skupina extruzí aktivního náčrtu" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Nová skupina plnou rotací aktivního náčrtu" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Nová skupina šroubovicí aktivního náčrtu" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Nová skupina volnou rotací aktivního náčrtu" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Nová skupina krokovým otočením" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Nová skupina krokovým posunem" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "Nová skupina v pracovní rovině (přes dané entity)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Nová skupina ve 3D" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Nová skupina odkazem / sestavením souboru" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Nejbližší isometrický pohled" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Zarovnat pohled na aktivní pracovní rovinu" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Chyba" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Zpráva" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&OK" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Měřítko nemůže být nulové nebo záporné." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Chybný formát: zadej x, y, z" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/de_DE.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/de_DE.po new file mode 100644 index 00000000..28c6892f --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/de_DE.po @@ -0,0 +1,2553 @@ +# German translations for the SolveSpace package. +# Copyright (C) 2018 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Guido Hoss , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2022-04-30 16:44+0200\n" +"Last-Translator: Reini Urban \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Ausschneiden, Einfügen und Kopieren sind nur in einer Arbeitsebene " +"zulässig.\n" +"\n" +"Aktivieren Sie eine mit \"Skizze -> In Arbeitsebene\"." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Zwischenablage ist leer; es gibt nichts einzufügen." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Die Anzahl der einzufügenden Kopien muss mind. 1 sein." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Maßstab kann nicht Null sein." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Wählen Sie einen Punkt, um den Drehmittelpunkt zu definieren." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Wählen Sie zwei Punkte, um den Verschiebungsvektor zu definieren." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"Die Transformation ist die Identität. Alle Kopien werden deckungsgleich " +"übereinanderliegen." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "" +"Zuviele Objekte zum Einfügen; teilen Sie diese in kleinere " +"Einfügeoperationen auf." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Es ist keine Arbeitsebene aktiv." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Ungültiges Format: geben Sie Koordinaten als x, y, z an" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Ungültiges Format: geben Sie Farben als r, g, b an" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> " +"Perspektive Projektion aktivieren." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Der Exportmaßstab darf nicht Null sein!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Der Werkzeugradialabstand darf nicht negativ sein!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "" +"Ungültiger Wert: Interval für automatisches Speichern muss positiv sein" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "Pkt-Deckung" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "Pkt-Pkt-Abstand" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "Pkt-Linie-Abstand" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "Pkt-Ebene-Abstand" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "Pkt-Fläche-Abstand" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "Proj-Pkt-Pkt-Abstand" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "Pkt-in-Ebene" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "Pkt-auf-Linie" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "Pkt-auf-Fläche" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "gl-Länge" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "gl-Länge-und-Pkt-Linie-Abstand" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "gl-Pkt-Linie-Abstände" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "Längenverhältnis" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "Bogen-Bogen-Längenverhältnis" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "Bogen-Linien-Längenverhältnis" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "Längendifferenz" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "Bogen-Bogen-Längendifferenz" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "Bogen-Linien-Längendifferenz" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "Symmetrisch" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "Symmetrisch-H" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "Symmetrisch-V" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "Symmetrisch-Linie" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "auf-Mittelpunkt" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "Horizontal" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "Vertikal" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "Durchmesser" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "Pkt-auf-Kreis" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "gl-Orientierung" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "Winkel" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "Parallel" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "Bogen-Linie-Tangente" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "Kub-Linie-Tangente" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "Kurve-Kurve-Tangente" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "Rechtwinklig" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "gl-Radius" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "gl-Winkel" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "gl-Linie-Länge-Bogen-Länge" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "Fix-an-Position" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "Kommentar" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Die Bogentangente und das Liniensegment müssen einen gemeinsamen Endpunkt " +"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " +"Tangente einschränken." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Die Kurventangente und das Liniensegment müssen einen gemeinsamen Endpunkt " +"haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " +"Tangente einschränken." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Die Kurven müssen einen gemeinsamen Endpunkt haben. Schränken Sie mit " +"\"Einschränkung / Auf Punkt\" ein, bevor Sie die Tangente einschränken." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung Abstand / Durchmesser Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei Punkte [Abstand zwischen Punkten]\n" +" * ein Liniensegment [Länge]\n" +" * zwei Punkte und ein Liniensegment oder Normale [projizierter Abstand]\n" +" * eine Arbeitsebene und ein Punkt [minimaler Abstand] \n" +" * ein Liniensegment und ein Punkt [minimaler Abstand]\n" +" * eine Seitenfläche und ein Punkt [minimaler Abstand]\n" +" * ein Kreis oder ein Bogen [Durchmesser]\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Auf Punkt / Kurve / Ebene\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei oder mehr Punkte [deckungsgleich]\n" +" * einen Punkt und eine Arbeitsebene [Punkt auf Ebene]\n" +" * einen Punkt und ein Liniensegment [Punkt auf Linie]\n" +" * einen Punkt und einen Kreis oder Bogen [Punkt auf Kurve]\n" +" * einen Punkt und ein bis drei Seitenflächen [Punkt auf Fläche]\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"gleicher Abstand / Radius\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei oder mehr Liniensegmente [gleiche Länge]\n" +" * zwei Liniensegmente und zwei Punkte [gleiche Punkt-Linien-Abstände]\n" +" * ein Liniensegment und zwei Punkte [gleiche Punkt-Linien-Abstände]\n" +" * ein Liniensegment und ein Punkt oder Liniensegment [Abstand Punkt-" +"Linie gleich Länge]\n" +" * zwei oder mehr Kreise oder Bögen [gleicher Radius]\n" +" * ein Liniensegment und ein Bogen [Länge des Liniensegments gleich " +"Bogenlänge]\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Längenverhältnis\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei Liniensegmente\n" +" * zwei Bögen\n" +" * einen Bogen und ein Liniensegment\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Längendifferenz\". Diese Einschränkung " +"ist anwendbar auf:\n" +"\n" +" * zwei Liniensegmente\n" +" * zwei Bögen\n" +" * einen Bogen und ein Liniensegment\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Mittelpunkt\". Diese Einschränkung ist " +"anwendbar auf:\n" +"\n" +" * ein Liniensegment und ein Punkt [Punkt auf Mittelpunkt]\n" +" * ein Liniensegment und eine Arbeitsebene [Mittelpunkt der Linie auf " +"Ebene]\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Symmetrisch\". Diese Einschränkung ist " +"anwendbar auf:\n" +"\n" +" * zwei Punkte oder ein Liniensegment [symmetrisch zu Koordinatenachse " +"der Arbeitsebene]\n" +" * ein Liniensegment und zwei Punkte oder ein Liniensegment [symmetrisch " +"zu Liniensegment]\n" +" * eine Arbeitsebene und zwei Punkte oder ein Liniensegment [symmetrisch " +"zu Arbeitsebene]\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Eine Arbeitsebene muss aktiv sein, um die Symmetrie ohne explizite " +"Symmetrieebene einzuschränken." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Aktivieren Sie eine Arbeitsebene (mit Skizze -> In Arbeitsebene), bevor Sie " +"horizontal oder vertikal einschränken." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"horizontal / vertikal\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei oder mehr Punkte\n" +" * ein oder mehr Liniensegmente\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"gleiche Orientierung\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei Normale\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Sie müssen einen eingeschränkten Winkel auswählen." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Sie müssen eine Einschränkung mit zugeordneter Kennzeichnung angeben." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Winkel\". Diese Einschränkung ist " +"anwendbar auf:\n" +"\n" +"Winkel zwischen:\n" +" * zwei Liniensegmente\n" +" * ein Liniensegment und eine Normale\n" +" * zwei Normale\n" +"\n" +"Gleicher Winkel:\n" +" * vier Liniensegmente oder Normale [gleicher Winkel zwischen A,B und C," +"D]\n" +" * drei Liniensegmente oder Normale [gleicher Winkel zwischen A,B und B," +"C]\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "" +"Die Kurven-Kurven-Tangente muss in der Arbeitsebene eingeschränkt werden." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Parallel / Tangente\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * zwei Flächen\n" +" * zwei oder mehr Liniensegmente [parallel]\n" +" * ein oder mehr Liniensegmente und eine oder mehr Normalen [parallel]\n" +" * zwei oder mehr Normalen [parallel]\n" +" * zwei Liniensegmente, Bögen oder Beziers mit gemeinsamem Endpunkt " +"[Tangente]\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Rechtwinklig\". Diese Einschränkung " +"ist anwendbar auf:\n" +"\n" +" * zwei Flächen\n" +" * zwei Liniensegmente\n" +" * ein Liniensegment und eine Normale\n" +" * zwei Normale\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Ungültige Auswahl für Einschränkung \"Punkt an Position\". Diese " +"Einschränkung ist anwendbar auf:\n" +"\n" +" * einen Punkt\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NEUER KOMMENTAR -- DOPPELKLICKEN ZUM BEARBEITEN" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "Klicken Sie auf die Mitte des Kommentartextes" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Kein Festkörper vorhanden; zeichnen Sie eines mit Extrusionen und Drehungen, " +"oder exportieren Sie bloße Linien und Kurven mit \"2D-Ansicht exportieren\"." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Ungültige Auswahl für teilweisen Export. Bitte wählen Sie aus:\n" +"\n" +" * nichts, mit einer aktiven Arbeitsebene [Arbeitsebene ist " +"Schnittebene]\n" +" * eine Seitenfläche [Schnittebene durch Seitenfläche]\n" +" * einen Punkt und zwei Liniensegmente [Schnittebene durch Punkt und " +"parallel zu Linien]\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Das Netz der aktiven Gruppe ist leer; es gibt nichts zu exportieren." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "Freihandlinien wurden mit durchgehenden Linien ersetzt" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "Zickzacklinien wurden mit durchgehenden Linien ersetzt" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Teile der Zeichnung haben keine Entsprechung in DXF und wurden nicht " +"exportiert:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"Die PDF-Seitengröße überschreitet 200 x 200 Zoll; die Datei kann u.U. in " +"vielen Programmen nicht geöffnet werden." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "Skizze-in-Ebene" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#Referenzen" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Die Datei ist leer. Es kann beschädigt sein." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Nicht erkannte Daten in der Datei. Diese Datei könnte beschädigt sein oder " +"von einer neueren Version des Programms stammen." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Fehlende Datei" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "Die verlinkte Datei “%s” fehlt." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Möchten Sie sie selber auswählen?\n" +"Falls Sie ablehnen, wird jegliche mit der fehlenden Datei verknüpfte " +"Geometrie verworfen." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Ja" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Nein" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Abbrechen" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Datei" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Neu" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Öffnen..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Öffne &letzte" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Speichern" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Speichern &Als…" + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Exportiere &Bild…" + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Exportiere 2D-Ansicht…" + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Exportiere 2D-Auswahl…" + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Exportiere 3D-Drahtgittermodell..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Exportiere Dreiecksnetz…" + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Exportiere Oberflächen…" + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&portiere…" + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "Beenden" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Bearbeiten" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Rückgängig machen" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Wiederholen" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Alles &neu zeichnen" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Auswahl auf &Raster ausrichten" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Importierte Objekte &90° drehen" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Ausschneiden" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "Kopieren" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "Einfügen" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "&Transformiert einfügen…" + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Löschen" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "&Kantenverlauf auswählen" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "&Alle auswählen" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "Alle &deselektieren" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Linien Stile..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "An&sichts Projektion..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "&Einstellungen..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "Ansicht" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Zoom größer" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Zoom kleiner" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Zoom anpassen" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Ansicht auf Arbeitsebene ausrichten" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Nächste Ortho-Ansicht" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Nächste isometrische Ansicht" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "Ansicht auf Punkt zentrieren" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Arbeitsraster anzeigen" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Dunklere inaktive Festkörper" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Perspektivische Projektion" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Zeige e&xplodierte Ansicht" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Maßeinheit" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Maße in Millimeter" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Masse in M&etern" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Maße in Zoll" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Maße in &Fuß und Inch" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Werkzeugleiste anzeigen" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Attributbrowser anzeigen" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "Vollbildschirm" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "Neue Gruppe" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "In 3D skizzieren" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "In neuer Arbeitsebene skizzieren" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Kopieren und verschieben" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Kopieren und drehen" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtrudieren" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Helix" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "R&otieren" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "D&rehen" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Verknüpfen / Zusammensetzen..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Letzte verknüpfen" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Skizze" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "In Arbeitsebene" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Im 3D-Raum" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Bezugspunkt" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "Arbeits&ebene" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "&Linie" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "K&onstruktionslinie" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rechteck" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Kreis" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "Kreisbogen" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "Kubischer &Bezier-Spline" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Text in Truetype-Font" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "B&ild" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Konstruktionselement an/aus" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Bogentangente an Punkt" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Kurven im Schnittpunkt trennen" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Einschränkung" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "Abstand / Durchmesser" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Referenzangabe" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "Winkel / Gleicher Winkel" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Referenzwinkel" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Komplementärwinkel" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Referenzangabe ein/aus" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertikal" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "Auf Punkt / Kurve / Ebene" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "Gleicher Abstand / Radius" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Länge / Bogen Verhäl&tnis" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Länge / Bogen Diff&erenz" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "Auf &Mittelpunkt" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "Symmetrisch" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Paral&llel / Tangente" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "Rechtwinklig" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Gleiche Orientierung" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Punkt an Position fixieren" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Kommentar" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyse" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "&Volumen bestimmen" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Fläche bestimmen" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Umfang bestimmen" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Überlagernde Teile anzeigen" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Freiliegende Kanten anzeigen" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Massenmittelpunkt anzeigen" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "&Unterbeschränkte Punkte anzeigen" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "Punkt nachzeichnen" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "Nachzeichnen beenden..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Schrittgröße…" + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Hilfe" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "Sprache" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Website / Anleitung" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "&Gehe zu GitHub commit" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "Über" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(keine vorhergehenden Dateien)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "Datei '%s' existiert nicht." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "" +"Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Der Perspektivfaktor is auf Null gesetzt, also wird die Ansicht eine " +"Parallelprojektion sein.\n" +"\n" +"Ändern Sie den Faktor für die Perspektivprojektion in der " +"Konfigurationsmaske. Ein typischer Wert ist ca. 0,3." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der " +"Bildschirmansicht sein." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" +"Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen " +"Objekten." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Für diesen Befehl wählen Sie einen Punkt oder ein anderes Objekt von einem " +"verknüpften Teil aus, oder aktivieren Sie eine verknüpfte Gruppe." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Es wurde keine Arbeitsebene ausgewählt. Aktivieren Sie eine Arbeitsebene " +"(mit Skizze -> In Arbeitsebene), um die Ebene für das Gitterraster zu " +"definieren." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Diese Objekte können nicht auf das Raster ausgerichtet werden. Dies geht nur " +"für Punkte, Textkommentare, oder Einschränkungen mit einer Bezeichnung. Um " +"eine Linie auf das Raster auszurichten, wählen Sie deren Endpunkte aus." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese " +"Gruppe wird aktiviert." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Es wurde keine Arbeitsebene ausgewählt, und die aktive Gruppe hat keine " +"standardmäßige Arbeitsebene. Wählen Sie eine Arbeitsebene aus, oder " +"erstellen Sie eine Gruppe in einer neuen Arbeitsebene." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen " +"Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "" +"Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "Klicken Sie auf den ersten Punkt des Liniensegments" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "Klicken Sie auf den Kreismittelpunkt" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "Klicken Sie auf eine Ecke des Rechtecks" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "Klicken Sie auf die obere linke Ecke des Texts" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "Klicken Sie auf die obere linke Ecke des Bilds" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Es wurden keine Objekte ausgewählt Wählen Sie Objekte aus, bevor Sie sie von/" +"zu Konstruktionsmerkmalen umwandeln." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "Skizze-in-3D" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Ungültige Auswahl für neue Skizze in der Arbeitsebene. Diese Gruppe kann " +"erstellt werden mit:\n" +"\n" +" * einem Punkt (durch den Punkt, orthogonal zur Koordinatenachse)\n" +" * einem Punkt und zwei Linienabschnitten (durch den Punkt, parallel zu " +"den Linien)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Aktivieren Sie vor der Extrusion eine Arbeitsebene (mit Skizze -> In " +"Arbeitsebene). Die Skizze wird senkrecht zur Arbeitsebene extrudiert." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "Extrusion" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "Rotieren kann nur mit planaren Skizzen ausgeführt werden." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Ungültige Auswahl für neue Gruppe mit Drehquerschnitt. Diese Gruppe kann " +"erstellt werden mit:\n" +"\n" +" * einem Punkt und einem Liniensegment oder einer Normale (Drehung um " +"eine Achse parallel zur Linie/Normalen, durch den Punkt)\n" +" * einem Liniensegment (Drehung um das Liniensegment)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "Drehung" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "Revolve kann nur mit planaren Skizzen ausgeführt werden." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Ungültige Auswahl für eine neue Revolve Gruppe. Diese Gruppe kann erzeugt " +"werden mit:\n" +"\n" +" * einem Punkt und einem Liniensegment oder Normale (gedreht um eine " +"Achse parallel zu Linie / Normale, durch Punkt)\n" +" * einem Liniensegment (gedreht um Liniensegment)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "Revolve" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Helix kann nur mit planaren Skizzen ausgeführt werden." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Ungültige Auswahl für eine neue Helix Gruppe. Diese Gruppe kann erzeugt " +"werden mit:\n" +"\n" +" * einem Punkt und einem Liniensegment oder Normale (gedreht um eine " +"Achse parallel zu Linie / Normale, durch Punkt)\n" +" * einem Liniensegment (gedreht um Liniensegment)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "Helix" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Ungültige Auswahl für neue Rotation. Diese Gruppe kann erstellt werden mit:\n" +"\n" +" * einem Punkt in vorgegebener Arbeitsebene (gedreht in der Ebene um den " +"Punkt)\n" +" * einem Punkt und einer Linie oder einer Normale (gedreht um eine Achse " +"durch den Punkt, parallel zur Linie / Normale)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "Drehen" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "Versetzen" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "unbenannt" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "Kontur nicht geschlossen, oder kein einheitlicher Linientyp!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "Punkte sind nicht alle koplanar!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "Kontur überschneidet sich selbst!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "Kante mit Länge Null!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Text-formatierte STL Dateien werden aktuell nicht unterstützt" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Eine Bogentangente kann nur in einer Arbeitsebene erstellt werden." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Um eine Bogentangente zu erstellen, wählen Sie einen Punkt, in dem sich zwei " +"nicht-Konstruktionslinien oder -kreise in dieser Gruppe und Arbeitsebene " +"treffen." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Diese Ecke konnte nicht abgerundet werden. Versuchen Sie einen kleineren " +"Radius, oder erstellen Sie die gewünschte Geometrie von Hand mit \"Tangente" +"\"-Einschränkungen." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" +"Dieses Objekt konnte nicht geteilt werden. Dies geht nur für Linien, Kreise " +"oder kubische Splines." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Trennen ist nur in einer Arbeitsebene möglich." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Wählen Sie zwei Objekte aus, die sich schneiden (z.B. zwei Linien/Kreise/" +"Bögen, oder eine Linie/Kreis/Bogen und ein Punkt)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Trennen nicht möglich; keine Überschneidung gefunden." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Linientyp zuordnen" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Kein Linientyp" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Neu erstellter benutzerdefinierter Linientyp…" + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Info zu Gruppe" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Info zu Linientyp" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Kantenverlauf auswählen" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Von/zu Referenzangabe wechseln" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Anderer Komplementärwinkel" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Auf Raster ausrichten" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Spline-Punkt löschen" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Spline-Punkt hinzufügen" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"Spline-Punkt kann nicht hinzugefügt werden: maximale Anzahl der Punkte " +"erreicht." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Konstruktionselement an/aus" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Einschränkung \"Punkte deckungsgleich\" löschen" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Ausschneiden" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Kopieren" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Alle auswählen" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Einfügen" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Einfügen und transformieren…" + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Löschen" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Alle deselektieren" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Aktive deselektieren" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Zoom an Bildschirm anpassen" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "Klicken Sie auf den nächsten Punkt der Linie, oder drücken Sie Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Ein Rechteck kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " +"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "Klicken Sie auf die gegenüberliegende Ecke des Rechtecks" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "Klicken Sie, um den Radius festzulegen" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Ein Kreisbogen kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " +"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "Klicken Sie, um einen Punkt zu platzieren" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "" +"Klicken Sie auf den nächsten Punkt der kubischen Linie, oder drücken Sie Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Eine Arbeitsebene ist bereits aktiv. Skizzieren Sie in 3D, bevor Sie eine " +"neue Arbeitsebene erstellen." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Text kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " +"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "Klicken Sie auf die untere rechte Ecke des Texts" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Das Bild kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " +"Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace-Modelle" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "ALLE" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF Leiterplatte" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL-Dreiecks-Netz" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG-Datei" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL-Netz" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ-Netz" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-kompatibles Netz, mit Ansicht" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-kompatibles Netz, nur Netz" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML Textdatei" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP-Datei" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF-Datei" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Eingebettetes Postscript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Skalierbare Vektorgrafik" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF-Datei (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL-Datei" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G-Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF- und DWG-Dateien" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Werte durch Komma getrennt (CSV)" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "unbenannt" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Datei speichern" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Datei öffnen" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Abbrechen" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Speichern" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Öffnen" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Automatische Sicherungsdatei verfügbar" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "AutoDatei &öffnen" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Nicht laden" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Geänderte Datei" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Wollen Sie die Änderungen an der Skizze sichern?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Sichern" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Verwerfen" + +# solvespace.cpp:557 +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(Neue Skizze)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Attribut-Browser" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Einschränkungen sind momentan sichtbar und werden exportiert. Das wollen Sie " +"wahrscheinlich nicht. Verstecken Sie sie in dem auf den Link oben im " +"Textfenster klicken." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Kann den Dateityp der Datei '%s' nicht auf Grund der Dateierweiterung " +"erkennen. Versuchen Sie .dxf oder .dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" +"Die Einschränkung muss einen Namen haben, und darf keine " +"Referenzdimensionierung sein." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" +"Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine " +"Einschränkung." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "Der Zusammenbau funktioniert, gut." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Das Volumen des Modell ist:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Das Volumen des Netz der aktiven Gruppe ist:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Fläche der ausgewählten Flächen ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, " +"nicht koplanar, oder überschneidet sich selbst." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Summe der Flächen in dieser Gruppe ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Die Gesamtlänge der ausgwählten Elemente ist:\n" +"\n" +" %s\n" +"\n" +"Kurven wurden als gerade Linienstücke angenähert.\n" +"Das verursacht Fehler, typischerweise um 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Falsche Auswahl für Umfang. Wähle Liniensegmente, Bögen und Kurven." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Konnte '%s' nicht schreiben" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Das Netz schneidet sich selbst: Falsch, ungültig." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Das Netz schneidet sich nicht: Gut, gültig." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Das Netz hat lose Kanten: Falsch, ungültig." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Das Netz hat keine lose Kanten: Gut, gültig." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Das Modell hat %d Dreiecke, von %d Flächen." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Keine problematischen Kanten, gut.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematische Kanten, schlecht.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Das ist SolveSpace version %s.\n" +"\n" +"Für mehr Information siehe http://solvespace.com/\n" +"\n" +"SolveSpace ist freie Software: Sie steht Ihnen frei sie zu ändern\n" +"und/oder zu vervielfältigen unter der Auflage der GNU\n" +"General Public License (GPL) Version 3 oder späterer Versionen.\n" +"\n" +"Es besteht keinerlei Gewährleistung und Haftung für das Programm, soweit " +"dies gesetzlich zulässig ist.\n" +"Für Details siehe http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues und andere.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Ein Linientyp kann keinem Objekt zugeordnet werden, das von einem anderen " +"Objekt abgeleitet wurde. Versuchen Sie, dem übergeordneten Objekt einen Typ " +"zuzuordnen." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Name des Linientyps kann nicht leer sein" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Nicht weniger als 1 Wiederholung möglich." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Nicht mehr als 999 Wiederholungen möglich." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Der Name der Gruppe darf nicht leer sein" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Durchsichtigkeit muss zwischen Null und Eins sein." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Radius darf nicht null oder negativ sein." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Liniensegment erstellen" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Rechteck erstellen" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Kreis erstellen" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Kreisbogen erstellen" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Kurven aus Text in einem TrueType-Font erzeugen" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Skizze von einer Bilddatei erstellen" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Bogentangente im ausgewählten Punkt erstellen" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Kubischen Bezier-Spline erstellen" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Bezugspunkt erstellen" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Konstruktionselement an/aus" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Linien / Kurven im Schnittpunkt trennen" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Abstand / Durchmesser / Länge einschränken" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Winkel einschränken" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Horizontale Einschränkung" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Vertikale Einschränkung" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Einschränkung auf Parallele oder Tangente" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Rechtwinklige Einschränkung" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Punkt auf Linie / Kurve / Ebene / Punkt einschränken" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Symmetrische Einschränkung" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Gleiche Länge / Radius / Winkel einschränken" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Normale auf gleiche Richtung einschränken" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Anderer Komplementärwinkel" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Von/zu Referenzangabe wechseln" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Neue Gruppe mit extrudierter aktiver Skizze" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Neue Gruppe mit rotierter aktiver Skizze" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Neue Gruppe Helix von aktiver Skizze" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Neue Gruppe mit gedrehter aktiver Skizze" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Neue Gruppe mit kopierter gedrehter Skizze" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Neue Gruppe mit kopierter versetzter Skizze" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "" +"Neue Gruppe in neuer Arbeitsebene (definiert durch ausgewählte Objekte)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Neue Gruppe in 3D" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Neue Gruppe mit verknüpfter Datei" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Nächste isometrische Ansicht" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Ansicht auf Arbeitsebene ausrichten" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Fehler" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Mitteilung" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&OK" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Der Maßstab kann nicht Null oder negativ sein." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Ungültiges Format: geben Sie x, y, z ein" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Auf Punkt / Kurve / Ebene\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Punkte [deckungsgleich]\n" +#~ " * einen Punkt und eine Arbeitsebene [Punkt auf Ebene]\n" +#~ " * einen Punkt und ein Liniensegment [Punkt auf Linie]\n" +#~ " * einen Punkt und einen Kreis oder Bogen [Punkt auf Kurve]\n" +#~ " * einen Punkt und eine Seitenfläche [Punkt auf Fläche]\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"gleicher Abstand / Radius\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente [gleiche Länge]\n" +#~ " * zwei Liniensegmente und zwei Punkte [gleiche Punkt-Linien-" +#~ "Abstände]\n" +#~ " * ein Liniensegment und zwei Punkte [gleiche Punkt-Linien-Abstände]\n" +#~ " * ein Liniensegment und ein Punkt oder Liniensegment [Abstand Punkt-" +#~ "Linie gleich Länge]\n" +#~ " * vier Liniensegmente oder Normale [gleicher Winkel zwischen A,B und " +#~ "C,D]\n" +#~ " * drei Liniensegmente oder Normale [gleicher Winkel zwischen A,B und " +#~ "B,C]\n" +#~ " * zwei Kreise oder Bögen [gleicher Radius]\n" +#~ " * ein Liniensegment und ein Bogen [Länge des Liniensegments gleich " +#~ "Bogenlänge]\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"horizontal / vertikal\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Punkte\n" +#~ " * ein Liniensegment\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Winkel\". Diese Einschränkung ist " +#~ "anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" +#~ " * ein Liniensegment und eine Normale\n" +#~ " * zwei Normale\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Parallel / Tangente\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente [parallel]\n" +#~ " * ein Liniensegment und eine Normale [parallel]\n" +#~ " * zwei Normalen [parallel]\n" +#~ " * zwei Liniensegmente, Bögen oder Beziers mit gemeinsamem Endpunkt " +#~ "[Tangente]\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Rechtwinklig\". Diese Einschränkung " +#~ "ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" +#~ " * ein Liniensegment und eine Normale\n" +#~ " * zwei Normale\n" + +#~ msgid "A&ngle" +#~ msgstr "Winkel" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "Gleicher Abstand / Radius / Winkel" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Längenverhältnis\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Längendifferenz\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Längenverhältnis" + +#~ msgid "Length Diff&erence" +#~ msgstr "Längendifferenz" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Skizze in neuer Arbeitsebene. Diese Gruppe kann " +#~ "erstellt werden mit:\n" +#~ "\n" +#~ " * einem Punkt (durch den Punkt, orthogonal zu den Koordinatenachsen)\n" +#~ " * einem Punkt und zwei Liniensegmenten (durch den Punkt, parallel zu " +#~ "den Linien)\n" +#~ " * einer Arbeitsebene (Kopie der Arbeitsebene)\n" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D Objektdatei" + +#~ msgid "Specify between 0 and 8 digits after the decimal." +#~ msgstr "Geben Sie 0 bis 8 Ziffern nach dem Dezimalzeichen an." + +#~ msgid "click to place bottom left of text" +#~ msgstr "Klicken Sie auf die untere linke Ecke des Texts" + +#~ msgid "Do you want to save the changes you made to the new sketch?" +#~ msgstr "Möchten Sie die Änderungen in Ihrer Skizze speichern?" + +#~ msgid "Your changes will be lost if you don't save them." +#~ msgstr "" +#~ "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden." + +#~ msgctxt "button" +#~ msgid "Save" +#~ msgstr "Speichern" + +#~ msgctxt "button" +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#~ msgctxt "button" +#~ msgid "Don't Save" +#~ msgstr "Nicht speichern" + +#~ msgid "An autosave file is available for this project." +#~ msgstr "" +#~ "Eine automatisch gespeicherte Datei ist für dieses Projekt vorhanden." + +#~ msgid "Do you want to load the autosave file instead?" +#~ msgstr "Möchten Sie die automatische Speicherdatei stattdessen öffnen?" + +#~ msgctxt "button" +#~ msgid "Load" +#~ msgstr "Öffnen" + +#~ msgctxt "button" +#~ msgid "Don't Load" +#~ msgstr "Nicht öffnen" + +#~ msgid "" +#~ "Do you want to locate it manually?\n" +#~ "If you select “No”, any geometry that depends on the missing file will be " +#~ "removed." +#~ msgstr "" +#~ "Möchten Sie sie selber auswählen?\n" +#~ "Falls Sie \"Nein\" wählen, wird jegliche mit der fehlenden Datei " +#~ "verknüpfte Geometrie verworfen." + +#~ msgctxt "button" +#~ msgid "Yes" +#~ msgstr "Ja" + +#~ msgctxt "button" +#~ msgid "No" +#~ msgstr "Nein" + +#~ msgctxt "button" +#~ msgid "OK" +#~ msgstr "OK" + +#~ msgid "_Cancel" +#~ msgstr "_Abbrechen" + +#~ msgid "_Open" +#~ msgstr "_Öffnen" + +#~ msgid "" +#~ "The file has changed since it was last saved.\n" +#~ "\n" +#~ "Do you want to save the changes?" +#~ msgstr "" +#~ "Die Datei wurde seit der letzten Speicherung geändert.\n" +#~ "\n" +#~ "Möchten Sie die Änderungen speichern?" + +#~ msgctxt "button" +#~ msgid "Do_n't Save" +#~ msgstr "Nicht speichern" + +#~ msgid "" +#~ "An autosave file is available for this project.\n" +#~ "\n" +#~ "Do you want to load the autosave file instead?" +#~ msgstr "" +#~ "Eine automatisch gespeicherte Datei ist für dieses Projekt vorhanden.\n" +#~ "\n" +#~ "Wollen Sie die automatisch gespeicherte Datei öffnen?" + +#~ msgctxt "button" +#~ msgid "_Load autosave" +#~ msgstr "AutoDatei öffnen" + +#~ msgctxt "button" +#~ msgid "Do_n't Load" +#~ msgstr "Nicht öffnen" + +#~ msgctxt "button" +#~ msgid "_Yes" +#~ msgstr "_Ja" + +#~ msgctxt "button" +#~ msgid "_No" +#~ msgstr "_Nein" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/en_US.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/en_US.po new file mode 100644 index 00000000..eab6b493 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/en_US.po @@ -0,0 +1,2999 @@ +# English translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2017-01-05 10:30+0000\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en_US\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" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Clipboard is empty; nothing to paste." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Number of copies to paste must be at least one." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Scale cannot be zero." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Select one point to define origin of rotation." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Select two points to define translation vector." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Too many items to paste; split this into smaller pastes." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "No workplane active." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Bad format: specify coordinates as x, y, z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Bad format: specify color as r, g, b" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Specify between 0 and %d digits after the decimal." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Export scale must not be zero!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Cutter radius offset must not be negative!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "Bad value: autosave interval should be positive" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Bad format: specify interval in integral minutes" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "pts-coincident" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "pt-pt-distance" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "pt-line-distance" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "pt-plane-distance" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "pt-face-distance" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-pt-pt-distance" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "pt-in-plane" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "pt-on-line" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "pt-on-face" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "eq-length" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "eq-length-and-pt-ln-dist" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "eq-pt-line-distances" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "length-ratio" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "arc-arc-length-ratio" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "arc-line-length-ratio" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "length-difference" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "arc-arc-len-difference" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "arc-line-len-difference" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "symmetric" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "symmetric-h" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "symmetric-v" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "symmetric-line" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "at-midpoint" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontal" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertical" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "diameter" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "pt-on-circle" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "same-orientation" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "angle" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "parallel" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "arc-line-tangent" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "cubic-line-tangent" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "curve-curve-tangent" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "perpendicular" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "eq-radius" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "eq-angle" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "eq-line-len-arc-len" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "lock-where-dragged" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "comment" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Must select an angle constraint." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Must select a constraint with associated label." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "Curve-curve tangency must apply in workplane." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NEW COMMENT -- DOUBLE-CLICK TO EDIT" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "click center of comment text" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Active group mesh is empty; nothing to export." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "freehand lines were replaced with continuous lines" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "zigzag lines were replaced with continuous lines" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "sketch-in-plane" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#references" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "The file is empty. It may be corrupt." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Missing File" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "The linked file “%s” is not present." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Yes" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&No" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Cancel" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&File" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&New" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Open..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Open &Recent" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Save" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Save &As..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Export &Image..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Export 2d &View..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Export 2d &Section..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Export 3d &Wireframe..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Export Triangle &Mesh..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Export &Surfaces..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&port..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "E&xit" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Edit" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Undo" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Redo" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&generate All" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Snap Selection to &Grid" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Rotate Imported &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Cu&t" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copy" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Paste" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Paste &Transformed..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Delete" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Select &Edge Chain" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Select &All" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Unselect All" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Line Styles..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&View Projection..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuration..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&View" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Zoom &In" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Zoom &Out" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Zoom To &Fit" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Align View to &Workplane" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Nearest &Ortho View" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Nearest &Isometric View" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Center View At Point" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Show Snap &Grid" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Darken Inactive Solids" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Use &Perspective Projection" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Show E&xploded View" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Dimension &Units" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Dimensions in &Millimeters" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Dimensions in M&eters" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Dimensions in &Inches" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensions in &Feet and Inches" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Show &Toolbar" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Show Property Bro&wser" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Full Screen" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&New Group" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Sketch In &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Sketch In New &Workplane" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Step &Translating" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Step &Rotating" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtrude" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Helix" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Lathe" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Re&volve" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Link / Assemble..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Link Recent" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Sketch" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "In &Workplane" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Anywhere In &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Datum &Point" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Workplane" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Line &Segment" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "C&onstruction Line Segment" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rectangle" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Circle" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Arc of a Circle" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "&Bezier Cubic Spline" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Text in TrueType Font" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Image" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "To&ggle Construction" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Tangent &Arc at Point" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Split Curves at &Intersection" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Constrain" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Distance / Diameter" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Re&ference Dimension" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "A&ngle / Equal Angle" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Reference An&gle" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Other S&upplementary Angle" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Toggle R&eference Dim" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&On Point / Curve / Plane" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "E&qual Length / Radius" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Length / Arc Ra&tio" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Length / Arc Diff&erence" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "At &Midpoint" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "S&ymmetric" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Para&llel / Tangent" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Perpendicular" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Same Orient&ation" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Lock Point Where &Dragged" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Comment" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyze" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Measure &Volume" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Measure A&rea" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Measure &Perimeter" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Show &Interfering Parts" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Show &Naked Edges" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Show &Center of Mass" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Show &Underconstrained Points" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Trace Point" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Stop Tracing..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Step &Dimension..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Help" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Language" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Website / Manual" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "&Go to GitHub commit" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&About" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(no recent files)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "File '%s' does not exist." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "No workplane is active, so the grid will not appear." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Select a point; this point will become the center of the view on screen." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "No additional entities share endpoints with the selected entities." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "No workplane selected. Activating default workplane for this group." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "click point on arc (draws anti-clockwise)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "click to place datum point" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "click first point of line segment" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "click first point of construction line segment" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "click first point of cubic segment" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "click center of circle" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "click origin of workplane" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "click one corner of rectangle" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "click top left of text" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "click top left of image" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Save" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Save &As..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Export &Image..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Export 2d &View..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Export 2d &Section..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Export 3d &Wireframe..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Export Triangle &Mesh..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Export &Surfaces..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&port..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "E&xit" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Edit" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Undo" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Redo" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&generate All" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Snap Selection to &Grid" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Rotate Imported &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Cu&t" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copy" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Paste" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Paste &Transformed..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Delete" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Select &Edge Chain" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Select &All" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Unselect All" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Line Styles..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&View Projection..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuration..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&View" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Zoom &In" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Zoom &Out" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Zoom To &Fit" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Align View to &Workplane" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Nearest &Ortho View" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Nearest &Isometric View" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Center View At Point" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Show Snap &Grid" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Darken Inactive Solids" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Use &Perspective Projection" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Show E&xploded View" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Dimension &Units" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Dimensions in &Millimeters" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Dimensions in M&eters" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Dimensions in &Inches" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensions in &Feet and Inches" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Show &Toolbar" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Show Property Bro&wser" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Full Screen" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&New Group" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Sketch In &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Sketch In New &Workplane" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Step &Translating" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Step &Rotating" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtrude" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Helix" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Lathe" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Re&volve" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Link / Assemble..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Link Recent" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Sketch" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "In &Workplane" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Anywhere In &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Datum &Point" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Workplane" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Line &Segment" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "C&onstruction Line Segment" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rectangle" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Circle" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Arc of a Circle" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "&Bezier Cubic Spline" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Text in TrueType Font" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Image" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "To&ggle Construction" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Tangent &Arc at Point" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Split Curves at &Intersection" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Constrain" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Distance / Diameter" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Re&ference Dimension" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "A&ngle / Equal Angle" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Reference An&gle" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Other S&upplementary Angle" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Toggle R&eference Dim" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&On Point / Curve / Plane" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "E&qual Length / Radius" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Length / Arc Ra&tio" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Length / Arc Diff&erence" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "At &Midpoint" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "S&ymmetric" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Para&llel / Tangent" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Perpendicular" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Same Orient&ation" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Lock Point Where &Dragged" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Comment" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyze" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Measure &Volume" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Measure A&rea" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Measure &Perimeter" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Show &Interfering Parts" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Show &Naked Edges" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Show &Center of Mass" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Show &Underconstrained Points" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Trace Point" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Stop Tracing..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Step &Dimension..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Help" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Language" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Website / Manual" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "&Go to GitHub commit" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&About" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(no recent files)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "File '%s' does not exist." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "No workplane is active, so the grid will not appear." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Select a point; this point will become the center of the view on screen." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "No additional entities share endpoints with the selected entities." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "No workplane selected. Activating default workplane for this group." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "click point on arc (draws anti-clockwise)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "click to place datum point" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "click first point of line segment" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "click first point of construction line segment" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "click first point of cubic segment" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "click center of circle" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "click origin of workplane" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "click one corner of rectangle" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "click top left of text" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "click top left of image" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "sketch-in-3d" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "extrude" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "Lathe operation can only be applied to planar sketches." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "lathe" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "Revolve operation can only be applied to planar sketches." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "revolve" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Helix operation can only be applied to planar sketches." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "helix" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "rotate" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "translate" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(unnamed)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "not closed contour, or not all same style!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "points not all coplanar!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "contour is self-intersecting!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "zero-length edge!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Text-formated STL files are not currently supported" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Must be sketching in workplane to create tangent arc." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "Couldn't split this entity; lines, circles, or cubics only." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Must be sketching in workplane to split." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Can't split; no intersection found." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Assign to Style" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "No Style" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Newly Created Custom Style..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Group Info" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Style Info" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Select Edge Chain" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Toggle Reference Dimension" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Other Supplementary Angle" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Snap to Grid" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Remove Spline Point" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Add Spline Point" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "Cannot add spline point: maximum number of points reached." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Toggle Construction" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Delete Point-Coincident Constraint" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Cut" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Copy" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Select All" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Paste" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Paste Transformed..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Delete" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Unselect All" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Unselect Hovered" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Zoom to Fit" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "click next point of line, or press Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "click to place other corner of rectangle" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "click to set radius" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "click to place point" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "click next point of cubic, or press Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "click to place bottom right of text" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace models" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "ALL" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF circuit board" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL triangle mesh" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG image" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL mesh" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ mesh" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-compatible mesh, with viewer" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-compatible mesh, mesh only" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML text file" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP file" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF file" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulated PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Scalable Vector Graphics" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF file (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL file" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF and DWG files" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Comma-separated values" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "untitled" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Save File" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Open File" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Cancel" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Save" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Open" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Autosave Available" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "An autosave file is available for this sketch." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Do you want to load the autosave file instead?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Load autosave" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "Do&n't Load" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Modified File" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Do you want to save the changes you made to the sketch “%s”?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Do you want to save the changes you made to the new sketch?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Your changes will be lost if you don't save them." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Save" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "Do&n't Save" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(new sketch)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Property Browser" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Constraint must have a label, and must not be a reference dimension." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Bad selection for step dimension; select a constraint." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "The assembly does not interfere, good." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"The volume of the solid model is:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Bad selection for perimeter; select line segments, arcs, and curves." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Bad selection for trace; select a single point." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Couldn't write to '%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "The mesh is self-intersecting (NOT okay, invalid)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "The mesh is not self-intersecting (okay, valid)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "The mesh has naked edges (NOT okay, invalid)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "The mesh is watertight (okay, valid)." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Style name cannot be empty" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Can't repeat fewer than 1 time." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Can't repeat more than 999 times." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Group name cannot be empty" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Opacity must be between zero and one." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Radius cannot be zero or negative." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Sketch line segment" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Sketch rectangle" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Sketch circle" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Sketch arc of a circle" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Sketch curves from text in a TrueType font" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Sketch image from a file" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Create tangent arc at selected point" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Sketch cubic Bezier spline" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Sketch datum point" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Toggle construction" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Split lines / curves where they intersect" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Constrain distance / diameter / length" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Constrain angle" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Constrain to be horizontal" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Constrain to be vertical" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Constrain to be parallel or tangent" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Constrain to be perpendicular" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Constrain point on line / curve / plane / point" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Constrain symmetric" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Constrain equal length / radius / angle" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Constrain normals in same orientation" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Other supplementary angle" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Toggle reference dimension" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "New group extruding active sketch" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "New group rotating active sketch" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "New group helix from active sketch" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "New group revolve active sketch" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "New group step and repeat rotating" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "New group step and repeat translating" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "New group in new workplane (thru given entities)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "New group in 3d" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "New group linking / assembling file" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Nearest isometric view" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Align view to active workplane" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Error" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Message" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&OK" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Scale cannot be zero or negative." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Bad format: specify x, y, z" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" + +#~ msgid "A&ngle" +#~ msgstr "A&ngle" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "E&qual Length / Radius / Angle" + +#~ msgid "&Mirror" +#~ msgstr "&Mirror" + +#~ msgctxt "group-name" +#~ msgid "mirror" +#~ msgstr "mirror" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Length Ra&tio" + +#~ msgid "Length Diff&erence" +#~ msgstr "Length Diff&erence" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D Object file" + +# Runtime hotfix: current menu mnemonic variants observed on macOS. +msgid "A&uto" +msgstr "A&uto" + +msgid "Save && &Export" +msgstr "Save && &Export" + +msgid "Load / Import" +msgstr "Load / Import" + +msgid "JavaScript" +msgstr "JavaScript" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Wor&kplane" +msgstr "Wor&kplane" + +msgid "I&mage" +msgstr "I&mage" + +msgid "Ta&ngent Arc at Point" +msgstr "Ta&ngent Arc at Point" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/es_AR.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/es_AR.po new file mode 100644 index 00000000..e928005f --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/es_AR.po @@ -0,0 +1,2274 @@ +# Spanish/Argentina translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Maxi , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2021-09-17 \n" +"Last-Translator: andesfreedesign@gmail.com\n" +"Language-Team: AndesFreeDesign\n" +"Language: es_AR\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" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Cortar, pegar y copiar trabajo\n" +"solo en un plano de trabajo.\n" +"Activar uno con Croquis-> En Plano de trabajo" + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "El portapapeles está vacío; nada que pegar." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "El número de copias para pegar debe ser al menos una." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "La escala no puede ser cero." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Seleccione un punto para definir el origen de la rotación." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Seleccione dos puntos para definir el vector de traslación." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"No se especificó ninguna transformación. Todas las copias estarán ubicadas " +"en el mismo lugar." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Demasiados elementos para pegar; divida esto en partes más pequeñas." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Ningún plano de trabajo activo." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Formato incorrecto: especifique las coordenadas como x, y, z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Formato incorrecto: especifique color como r, g, b" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> " +"UsarProyección Perspectiva." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Especifique entre 0 y %d dígitos después del decimal." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "¡La escala de exportación no debe ser cero!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "¡El desfase del radio de corte no debe ser negativo!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "Valor incorrecto: el intervalo de autoguardado debe ser positivo" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Formato incorrecto: especifique el intervalo en minutos integrales" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "ps-coincidente" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "p-p-distancia" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "p-línea-distancia" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "p-plano-distancia" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "p-cara-distancia" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proy-p-p-distancia" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "p-en-plano" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "p-sobre-línea" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "p-sobre-cara" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "igual-longitud" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "igual-longitud-y-p-línea-dist" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "igual-p-línea-distancias" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "longitud-radio" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "longitud-diferencia" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "simetría" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "simetría-h" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "simetría-v" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "simetría-línea" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "en-puntoMedio" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontal" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertical" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "diámetro" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "p-sobre-círculo" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "misma-orientación" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "ángulo" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "paralela" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "arco-línea-tangente" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "cúbica-línea-tangente" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "curva-curva-tangente" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "perpendicular" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "igual-radio" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "igual-ángulo" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "igual-línea-long-arco-long" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "fijación" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "comentario" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"El arco tangente y la línea deben compartir un punto final. Restringirlos " +"con Restringir -> En el punto antes de restringir la tangente." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"La tangente cúbica y la línea deben compartir un punto final. Restringirlos " +"con Restringir -> En el punto antes de restringir la tangente." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Las curvas deben compartir un punto final. Restringirlos con Restringir -> " +"En el punto antes de restringir la tangente." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Mala selección para la restricción de distancia / diámetro. Esta restricción " +"puede aplicarse a:\n" +"\n" +" * dos puntos (distancia entre puntos) \n" +" * un segmento de línea (longitud) \n" +" * dos puntos y un segmento de línea o normal (distancia proyectada) \n" +" * un plano de trabajo y un punto (distancia mínima) \n" +" * un segmento de línea y un punto (distancia mínima) \n" +" * una cara plana y un punto (distancia mínima) \n" +" * un círculo o un arco (diámetro) \n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Mala selección para una restricción de punto / curva / plano. Esta " +"restricción puedeaplicar a: \n" +"\n" +" * dos o más puntos (puntos coincidentes) \n" +" * un punto y un plano de trabajo (punto en el plano) \n" +" * un punto y un segmento de línea (punto en la línea) \n" +" * un punto y un círculo o arco (punto en la curva) \n" +" * un punto y de una a tres caras planas (punto en la(s) cara(s)) \n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Mala selección para restricción de igualdad longitud / radio. Esta " +"restricción puede aplicar a:\n" +"\n" +" * dos o más segmentos de línea (igual longitud)\n" +" * dos segmentos de línea y dos puntos (distancias de línea-punto " +"iguales)\n" +" * un segmento de línea y dos puntos (distancias punto-línea iguales)\n" +" * un segmento de línea, y un punto y un segmento de línea (distancia " +"punto-línea igual a la longitud)\n" +" * dos o más círculos o arcos (igual radio)\n" +" * un segmento de línea y un arco (la longitud del segmento de línea es " +"igual a la longitud del arco)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Mala selección por restricción de la relación de longitud. Esta " +"restricción se puede aplicar a:\n" +"\n" +" * dos segmentos de línea\n" +" * dos arcos\n" +" * un arco y a un segmento de línea\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Mala selección por restricción de diferencia de longitud. Esta " +"restricción puede aplicar a:\n" +"\n" +" * dos segmentos de línea\n" +" * dos arcos\n" +" * un arco y a un segmento de línea\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Mala selección para una restricción de punto medio. Esta restricción se " +"puede aplicar a:\n" +"\n" +" * un segmento de línea y un punto (punto en el punto medio)\n" +" * un segmento de línea y un plano de trabajo (punto medio de la línea en " +"el plano)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Mala selección por restricción simétrica. Esta restricción se puede aplicar " +"a:\n" +"\n" +" * dos puntos o un segmento de línea (simétrico con respecto al eje de " +"coordenadas del plano de trabajo)\n" +" * segmento de línea, y dos puntos o un segmento de línea (simétrico con " +"respecto al segmento de línea)\n" +" * plano de trabajo, y dos puntos o un segmento de recta (simétrico sobre " +"plano de trabajo)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Un plano de trabajo debe estar activo al restringir simétrico sin un plano " +"de simetría explícito." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Active un plano de trabajo (con Croquis -> En plano de trabajo) antes de " +"aplicar una restricción horizontal o vertical." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Mala selección por restricción horizontal / vertical. Esta restricción puede " +"aplicar a:\n" +"\n" +" * dos o más puntos\n" +" * uno o más segmentos de línea\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Mala selección para la misma restricción de orientación. Esta restricción " +"puede aplicarse a:\n" +"\n" +" * dos normales\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Debe seleccionar una restricción de ángulo." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Debe seleccionar una restricción con etiqueta asociada." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Mala selección por restricción de ángulo. Esta restricción se puede aplicar " +"a:\n" +"\n" +"Ángulo entre:\n" +" * dos segmentos de línea\n" +" * un segmento de linea y una normal\n" +" * dos normales\n" +"\n" +"Ángulos iguales:\n" +" * cuatro segmentos de línea o normales (ángulo igual entre A,B y C,D)\n" +" * tres segmentos de línea o normales (ángulo igual entre A,B y B,C)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "La tangencia curva-curva debe aplicarse en el plano de trabajo." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Mala selección para restricción de paralelo / tangente. Esta restricción " +"puede aplicarse a:\n" +"\n" +" * dos caras\n" +" * dos o más segmentos de línea (paralelos)\n" +" * uno o más segmentos de línea y una o más normales (paralelas)\n" +" * dos o más normales (paralelas)\n" +" * dos segmentos de línea, arcos, o beziers, que comparten un punto final " +"(tangente)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Mala selección por restricción perpendicular. Esta restricción se puede " +"aplicar a:\n" +"\n" +" * dos caras\n" +" * dos segmentos de línea\n" +" * un segmento de línea y una normal\n" +" * dos normales\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Mala selección para el punto de bloqueo donde se arrastró la restricción. " +"Esta restricción puede aplicar a:\n" +"\n" +" * un punto\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NUEVO COMENTARIO -- DOBLE-CLIC PARA EDITAR" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "clic en el centro del texto del comentario" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"No hay un modelo sólido presente; dibuje uno con extrusiones y revoluciones, " +"o use Exportar Vista 2d para exportar líneas y curvas desnudas." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Mala selección para la sección de exportación. Por favor seleccione:\n" +"\n" +" * nada, con un plano de trabajo activo (el plano de trabajo es un plano " +"de sección)\n" +" * una cara (plano de sección a través de la cara)\n" +" * un punto y dos segmentos de línea (plano que pasa por el punto y " +"paralelo a las líneas)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "La malla del grupo activo está vacía; nada para exportar." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "Las líneas a mano alzada fueron reemplazadas por líneas continuas." + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "Las líneas en zigzag fueron reemplazadas por líneas continuas." + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Algunos aspectos del dibujo no tienen equivalente DXF y no se exportaron:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"El tamaño de la página PDF supera las 5080mm x 5080mm; muchos usuarios " +"pueden rechazar este archivo." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "croquis-en-plano" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#referencias" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "El archivo esta vacío. Puede estar corrupto." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Datos no reconocidos en el archivo. Este archivo puede estar dañado o ser de " +"una versión más reciente del programa." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Archivo perdido" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "El archivo vinculado “%s” no esta presente." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"¿Quieres localizarlo manualmente?\n" +"\n" +"Si lo rechaza, cualquier geometría que dependa del archivo faltante se " +"eliminará permanentemente." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Si" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&No" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Cancelar" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Archivo" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Nuevo" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Abrir..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Abrir &Reciente" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Guardar" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Guardar &Como..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Exportar &Imagen..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Exportar 2d &Vista..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Exportar 2d &Corte..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Exportar 3d &Estructura alámbrica..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Exportar Triángulo &Malla..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Exportar &Superficies..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&portar..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "S&alir" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Editar" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Deshacer" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Rehacer" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&generar Todo" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Selección Enganche a &Cuadrícula" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Rotar importado a &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Cor&tar" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copiar" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Pegar" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Pegar &Тransformar..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Borrar" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Seleccionar Cadena de &Aristas" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Seleccionar &Todo" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Deseleccionar Todo" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "Estilos de Línea..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Ver Proyección..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuración..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Vista" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Acer&car" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Ale&jar" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr " Enfoque para ajustar" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Alinear Vista a &Plano de trabajo" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Vista &Ortogonal mas cercana" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Vista &Isometrica mas cercana" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Vista Central en Punto" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Mostrar Enganches &Cuadrícula" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Oscurecer Sólidos Inactivos" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Usar Proyección &Perspectiva" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Mostrar vista e&xplosionada" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "&Unidades de Cota" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Cotas en &Milímetros" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Cotas en M&etros" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Cotas en &Pulgadas" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensiones en pies y pulgadas" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Mostrar &Barra de herramientas" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Mostrar Nave&gador de Propiedades" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Pantalla Completa" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&Nuevo Grupo" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Сroquis En &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Сroquis En Nuevo &Plano de trabajo" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Paso &Traslación" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Paso &Giratorio" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtrusión" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Hélice" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Torno" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Re&volución" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Enlace / Ensamblar..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Enlace Reciente" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Croquis" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "En &Plano de trabajo" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "En cualquier lugar en &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Referencia &Punto" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Plano de trabajo" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Línea &Segmento" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "S&egmento de Línea de Construcción" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rectángulo" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Círculo" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Arco de un Círculo" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "&Spline Cúbico de Bezier" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Texto en Fuente TrueType" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Imagen" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Al&ternar Construcción" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Tangente &Arco en el Punto" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Dividir Curvas en &Intersección" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Restricción" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Distancia / Diámetro" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Co&ta de Referencia" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "Á&ngulo / Igual ángulo" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Ángulo de Re&ferencia" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Otro Á&ngulo Suplementario" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Alternar C&ota Referencia" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&Sobre Punto / Curva / Plano" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "I&gual Longitud / Radio" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Relación Lo&ngitud / Arco" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Diferencia Long&itud / Arco" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "En &PuntoMedio" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "S&imetría" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Para&lela / Tangente" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Perpendicular" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Misma Orient&ación" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Punto de Bloqueo Donde &Arrastrado" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Comentario" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analizar" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Medición &Volumen" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Medición Á&rea" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Medición &Perímetro" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Mostrar &Piezas que Interfieren" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Mostrar &Aristas Desnudas" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Mostrar &Centro de Masa" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Mostrar &Puntos Subrestringidos" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Punto de Rastro" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Dejar de rastrear..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Cota &Paso..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Ayuda" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Lenguaje" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Sitio Web / Manual" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&Acerca" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(no hay archivos recientes)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "El archivo '%s' no existe." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "" +"No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"El factor de perspectiva se establece en cero, por lo que la vista siempre " +"será una proyección paralela.\n" +"\n" +"Para una proyección en perspectiva, modifique el factor de perspectiva en la " +"pantalla de configuración. Un valor de alrededor de 0,3 es típico." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Seleccione un punto; este punto se convertirá en el centro de la vista en " +"pantalla." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" +"Ninguna entidad adicional comparte puntos finales con las entidades " +"seleccionadas." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Para usar este comando, seleccione un punto u otra entidad de una parte " +"vinculada, o convertir un grupo de enlaces en el grupo activo." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No hay ningún plano de trabajo activo. Activar un plano de trabajo (con " +"Croquis -> En plano de trabajo) para definir el plano para el enganche a la " +"cuadrícula." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"No se pueden enganchar estos elementos a la cuadrícula; seleccionar puntos, " +"comentarios de texto o restricciones con una etiqueta. Para enganchar una " +"línea, seleccione sus puntos finales." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"No se seleccionó ningún plano de trabajo. Activando el plano de trabajo " +"predeterminado para este grupo." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No se selecciona ningún plano de trabajo y el grupo activo no tiene un plano " +"de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-" +"nuevo-grupo de plano de trabajo." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Mala selección de arco tangente en el punto. Seleccione un solo punto o no " +"seleccione nada para configurar los parámetros del arco." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "clic en el punto en el arco (dibuja en sentido antihorario)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "clic para colocar el punto de referencia" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "clic en el primer punto del segmento de línea" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "clic en el primer punto del segmento de línea de construcción" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "clic en el primer punto del segmento cúbico" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "clic en el centro del círculo" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "clic en origen del plano de trabajo" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "clic en una esquina del rectángulo" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "clic en la parte superior izquierda del texto" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "clic en la parte superior izquierda de la imagen" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No se seleccionaron entidades. Seleccione entidades antes de intentar " +"alternar su estado de construcción." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "croquis-en-3d" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Mala selección para un nuevo croquis en el plano de trabajo. Este grupo " +"se puede crear con:\n" +"\n" +" * un punto (a través del punto, ortogonal a los ejes de coordenadas)\n" +" * un punto y dos segmentos de línea (a través del punto, paralelo a " +"líneas)\n" +" * un punto y una normal (a través del punto, ortogonal a la normal)\n" +" * un plano de trabajo (copia de un plano de trabajo)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Active un plano de trabajo (Croquis -> En plano de trabajo) antes de " +"extruir. El croquis se extruirá normal al plano de trabajo." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "extruir" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "La operación de torno solo se puede aplicar a croquis planos." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de torno. Este grupo se puede crear con:\n" +"\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de " +"un eje paralelo a la línea / normal, a través del punto)\n" +" * un segmento de línea (revolucionado sobre un segmento de línea)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "torno" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "La operación de revolución solo se puede aplicar a croquis planos." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de revolución. Este grupo se puede crear " +"con:\n" +"\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de " +"un eje paralelo a la línea / normal, a través del punto)\n" +" * un segmento de línea (revolucionado sobre un segmento de línea)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "revolución" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "La operación de hélice solo se puede aplicar a croquis planos." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de hélice. Este grupo se puede crear " +"con:\n" +"\n" +" * un punto y un segmento de recta o normal (girado alrededor de un eje " +"paralelo a la línea / normal, a través del punto)\n" +" * un segmento de línea (girado sobre un segmento de línea)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "hélice" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Mala selección para nueva rotación. Este grupo se puede crear con:\n" +"\n" +" * un punto, mientras está bloqueado en el plano de trabajo (girar en el " +"plano, sobre ese punto)\n" +" * un punto y una línea o una normal (rotar alrededor de un eje a través " +"de un punto y paralela a la línea / normal)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "rotar" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "trasladar" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(sin nombre)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "¡Contorno no cerrado, o no todos del mismo estilo!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "¡No todos los puntos son coplanares!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "¡El contorno se intersecta a sí mismo!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "¡arista de longitud cero!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Los archivos STL con formato de texto no son compatibles actualmente" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "" +"Debe estar dibujando en el plano de trabajo para crear un arco tangente." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Para crear un arco tangente, seleccione un punto donde dos líneas que no " +"sean de construcción o los círculos de este grupo y el plano de trabajo se " +"unen." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"No pude redondear esta esquina. Pruebe con un radio más pequeño o intente " +"crear la geometría deseada a mano con restricciones de tangencia." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "No se pudo dividir esta entidad; solo líneas, círculos o cúbicos." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Debe estar dibujando en el plano de trabajo para dividir." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Seleccione dos entidades que se crucen entre sí (por ejemplo, dos líneas / " +"círculos / arcos o una línea / círculo / arco y un punto)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "No se puede dividir; no se encontró ninguna intersección." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Asignar a Estilo" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Sin Estilo" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Estilo Personalizado Recién Creado..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Información de Grupo" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Información de Estilo" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Seleccionar Cadena de Arista" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Alternar Cota de Referencia" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Otro Ángulo Suplementario" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Enganchar a la cuadrícula" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Remover Punto de Spline" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Agregar Punto de Spline" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"No se puede agregar un punto de spline: se alcanzó el número máximo de " +"puntos." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Alternar Construcción" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Eliminar restricción de punto-coincidente" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Cortar" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Copiar" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Seleccionar Todo " + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Pegar" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Pegar Transformado ..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Eliminar" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Deseleccionar Todo" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Deselección Flotante" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Zoom para ajustar" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "clic en el siguiente punto de la línea o presione Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar un rectángulo en 3d; primero, active un plano de trabajo " +"con Croquis -> En Plano de trabajo." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "clic para colocar la otra esquina del rectángulo" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "clic para establecer el radio" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar un arco en 3d; primero, active un plano de trabajo con " +"Croquis -> En Plano de trabajo." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "clic para colocar el punto" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "clic en el siguiente punto del cúbico, o presione Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Dibujando en un plano de trabajo ya; croquis en 3d antes de crear un nuevo " +"plano de trabajo." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar texto en 3D; primero, active un plano de trabajo con " +"Croquis -> En Plano de trabajo." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "clic para colocar la parte inferior derecha del texto" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo " +"con Croquis -> En Plano de Trabajo." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace modelos" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "placa circuito IDF" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL malla triangular" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "imagen PNG" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL malla" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ malla" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-malla compatible, con visor" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-malla compatible, solo malla" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "Archivo texto VRML" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "Archivo STEP" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "Archivo PDF" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulado PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Gráficos Vectoriales Escalables" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "Archivo DXF (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "Archivo HPGL" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "Archivos AutoCAD DXF y DWG" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Valores separados por comas" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "sin título" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Guardar Archivo" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Abrir Archivo" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Cancelar" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Guardar" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Abrir" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Autoguardado Disponible" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Un archivo de autoguardado está disponible para este croquis." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "¿Desea cargar el archivo de autoguardado en su lugar?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Cargar autoguardado" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "No Cargar" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Archivo Modificado" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "¿Desea guardar los cambios que realizó en el croquis “%s”?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "¿Desea guardar los cambios que realizó en el nuevo croquis?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Sus cambios se perderán si no los guarda." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Guardar" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "No& Guardar" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(nuevo croquis)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Explorador de Propiedades" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Las restricciones se muestran actualmente y se exportarán en la trayectoria." +"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el " +"enlace en la parte superior de la ventana de texto." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"No se puede identificar el tipo de archivo a partir de la extensión del " +"nombre del archivo '%s'; intente .dxf o .dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" +"La restricción debe tener una etiqueta y no debe ser una cota de referencia." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Mala selección para la cota del paso; seleccione una restricción." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "El ensamble no interfiere, bien." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"El volumen del modelo sólido es:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"El volumen de la malla del grupo actual es:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Las superficies curvas se han aproximado como triángulos.\n" +"Esto introduce un error, normalmente alrededor del 1%." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"El área de la superficie de las caras seleccionadas es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Este grupo no contiene un área cerrada 2d correctamente formada. Está " +"abierta, no coplanares, ni auto-intersectantes." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"El área de la región croquizada en este grupo es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"La longitud total de las entidades seleccionadas es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Mala selección de rastreo; seleccione un solo punto." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "No pude escribir a '%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "La malla se intersecta a si misma (NO está bien, no es válida)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "La malla no se intersecta (está bien, es válida)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "La malla tiene bordes desnudos (NO está bien, no es válida)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "La malla es estanca (está bien, es válida)." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"El modelo contiene %d triángulos, desde %d superficies." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Cero aristas problemáticas, bien.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d aristas problemáticas, mal.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Esta es la versión de SolveSpace %s.\n" +"\n" +"Para más información, ver http://solvespace.com/\n" +"\n" +"SolveSpace es software libre: eres libre de modificarlo\n" +"y/o redistribuirlo bajo los términos de la GNU\n" +"Licencia Pública General (GPL) version 3 o posterior.\n" +"\n" +"NO HAY GARANTÍA, en la medida permitida por\n" +"ley. Para detalles, visita http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues y otros autores.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"No se puede asignar estilo a una entidad derivada de otra entidad;; intente " +"asignar un estilo al padre de esta entidad." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "El nombre del estilo no puede estar vacío" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "No se puede repetir menos de 1 vez." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "No se puede repetir más de 999 veces." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "El nombre del grupo no puede estar vacío" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "La opacidad debe estar entre cero y uno." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "El radio no puede ser cero o negativo." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Croquizar segmento de línea" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Croquizar rectángulo" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Croquizar círculo" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Croquizar arco de un círculo" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Croquizar curvas desde texto en fuente TrueType" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Croquizar imagen desde un archivo" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Crear arco tangente en el punto seleccionado" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Croquizar spline de Bezier cúbico" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Croquizar punto de referencia" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Alternar construcción" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Dividir líneas / curvas donde se intersectan" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Restringir distancia / diámetro / longitud" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Restringir ángulo" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Restringir para ser horizontal" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Restringir para ser vertical" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Restringir para ser paralela o tangente" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Restringir para ser perpendicular" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Restringir punto en línea / curva / plano / punto" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Restringir simétrico" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Restringir igualdad longitud / radio / ángulo" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Restringir normales en la misma orientación" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Otro ángulo suplementario" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Alternar cota de referencia" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Nuevo grupo de extrusión de croquis activo" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Nuevo croquis activo giratorio de grupo" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Nueva hélice de grupo a partir del croquis activo" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Nuevo croquis activo de revolución de grupo" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Nuevo paso de grupo y rotación repetida" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Nuevo paso de grupo y traslación repetida" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "Nuevo grupo en nuevo plano de trabajo (a través de entidades dadas)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Nuevo grupo en 3d" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Nuevo enlace de grupo / archivo de ensamble" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Vista isométrica más cercana" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Alinear vista al plano de trabajo activo" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Error" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Mensaje" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&Aceptar" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "La escala no debe ser cero o negativa." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Formato incorrecto: especifica x, y, z" + + + + + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Archivo Objeto Q3D" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/fr_FR.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/fr_FR.po new file mode 100644 index 00000000..d95b700a --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/fr_FR.po @@ -0,0 +1,2577 @@ +# French translations for the SolveSpace package. +# Copyright (C) 2018 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# whitequark , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2022-10-15 17:32+0200\n" +"Last-Translator: whitequark \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Couper, coller et copier fonctionnent uniquement dans un plan de travail.\n" +"\n" +"Activez un plan avec « Dessin -> Dans le plan de travail »." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Presse papier vide ; rien à coller." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Le nombre de copies à coller doit être d'au moins un." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "L'échelle ne peut pas être zéro." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Sélectionnez un point pour définir l'origine de la rotation." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Sélectionnez deux points pour définir le vecteur de translation." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"Transformation identique. Donc, toutes les copies seront exactement les unes " +"au-dessus des autres." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Trop d'éléments à coller ; divisez-les en plus petits groupes." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Pas d'espace de travail actif." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Mauvais format : spécifiez les coordonnées comme x, y, z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Mauvais format ; spécifiez la couleur comme r, v, b" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas " +"activé « Affichage -> Utiliser la Vue en perspective »." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Spécifier entre 0 et %d chiffres après la virgule." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "L'échelle d'export ne doit pas être zéro !" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Le décalage du rayon de coupe ne doit pas être négatif !" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "" +"Mauvaise valeur : l'intervalle d'enregistrement automatique devrait être " +"positif" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Mauvais format : spécifiez un nombre entier de minutes" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "pts-coïncidence" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "pt-pt-distance" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "pt-ligne-distance" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "pt-plan-distance" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "pt-face-distance" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-pt-pt-distance" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "pt-dans-plan" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "pt-sur-ligne" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "pt-sur-face" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "eg-longueur" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "eg-longueur-et-pt-dans-dist" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "eg-pt-ligne-distances" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "longueur-ratio" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "arc-arc-longueur-ratio" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "arc-ligne-longueur-ratio" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "longueur-difference" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "arc-arc-longueur-différence" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "arc-ligne-longueur-différence" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "symétrique" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "symétrique-h" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "symétrique-v" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "symétrique-ligne" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "au-point-milieu" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontal" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertical" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "diamètre" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "pt-sur-cercle" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "même-orientation" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "angle" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "parallèle" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "arc-ligne-tangente" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "cubique-ligne-tangente" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "courbe-courbe-tangente" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "perpendiculaire" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "eg-rayon" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "eg-angle" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "eg-ligne-long-arc-long" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "verrouillé-où-déplacé" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "commentaire" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"L'arc tangent et le segment de ligne doivent partager une extrémité. " +"Contraignez-les avec « Contraintes -> Sur Point » avant de contraindre la " +"tangente." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"La tangente cubique et le segment de ligne doivent partager une extrémité. " +"Contraignez-les avec « Contraintes -> Sur Point » avant de contraindre la " +"tangente." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Les courbes doivent partager une extrémité. Contraignez-les avec " +"« Contraintes -> Sur Point » avant de contraindre la tangente." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Mauvaise sélection pour la contrainte distance / diamètre. Cette contrainte " +"peut s'appliquer à :\n" +"\n" +" – Deux points (distance entre points)\n" +" – Un segment de ligne (longueur)\n" +" – Deux points et un segment de ligne ou normal (distance projetée)\n" +" – Un plan de travail et un point (distance minimale)\n" +" – Un segment de ligne et un point (distance minimale)\n" +" – Une face plane et un point (distance minimale)\n" +" – Un cercle ou un arc (diamètre)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Mauvaise sélection pour la contrainte point / courbe / plan. Cette " +"contrainte peut s'appliquer à :\n" +"\n" +" – Au moins deux points (points coïncidents)\n" +" – Un point et un plan de travail (point dans le plan)\n" +" – Un point et un segment de ligne (point en ligne)\n" +" – Un point et un cercle ou un arc (point sur courbe)\n" +" – Un point, et entre une et trois faces planes (point sur face(s))\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Mauvaise sélection pour une contrainte de longueur / rayon égale. Cette " +"contrainte peut s'appliquer à :\n" +"\n" +" – Au moins deux segments de ligne(s) (longueur égale)\n" +" – Deux segments de ligne et deux points (distances point-ligne égales)\n" +" – Un segment de ligne et deux points (distances point-ligne égales)\n" +" – Un segment de ligne ou un segment de ligne et point (distance point-" +"ligne de longueur égale)\n" +" – Au moins deux cercles ou arcs (rayon égaux)\n" +" – Un segment de ligne et un arc (la longueur de segment de ligne est " +"égale à la longueur d'arc)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Mauvaise sélection pour une contrainte de ratio de longueur. Cette " +"contrainte peut s'appliquer à :\n" +"\n" +" – Deux segments de ligne\n" +" – Deux arcs\n" +" – Un arc et un segment de ligne\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Mauvaise sélection pour une contrainte de différence de longueur. Cette " +"contrainte peut s'appliquer à :\n" +"\n" +" – Deux segments de ligne\n" +" – Deux arcs\n" +" – Un arc et un segment de ligne\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Mauvaise sélection pour une contrainte de point médian. Cette contrainte " +"peut s'appliquer à :\n" +"\n" +" – Un segment de ligne et un point (point au milieu)\n" +" – Un segment de ligne et un plan de travail (point médian dans le plan)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Mauvaise sélection pour la contrainte symétrique. Cette contrainte peut " +"s'appliquer à :\n" +"\n" +" – Deux points ou un segment de ligne (symétrique à l'axe des coordonnées " +"du plan de travail)\n" +" – Segment de ligne, et deux points ou un segment de ligne (symétrique " +"sur le segment de ligne)\n" +" – Plan de travail, et deux points ou un segment de ligne (symétrique au " +"plan de travail)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Un plan de travail doit être actif lors d'une contrainte de symétrie sans " +"plan de symétrie explicite." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Activez un plan de travail (avec Dessin -> Dans le plan de travail) avant " +"d'appliquer une contrainte horizontale ou verticale." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Mauvaise sélection pour la contrainte horizontale / verticale. Cette " +"contrainte peut s'appliquer à :\n" +"\n" +" – Au moins deux points\n" +" – Au moins un segment de ligne(s)\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Mauvaise sélection pour la même contrainte d'orientation. Cette contrainte " +"peut s'appliquer à :\n" +"\n" +" – Deux normales\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Vous devez sélectionner une contrainte d'angle." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Vous devez sélectionner une contrainte avec une étiquette associée." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Mauvaise sélection pour une contrainte d'angle. Cette contrainte peut " +"s'appliquer à :\n" +"\n" +"Angle entre :\n" +" – Deux segments de ligne\n" +" – Un segment de ligne et une normale\n" +" – Deux normales\n" +"\n" +"Angles égaux :\n" +" – Quatre segments de ligne ou des normales (angle entre A, B et C, D " +"égaux)\n" +" – Trois segments de ligne ou des normales (angle entre A, B et B, C " +"égaux)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "La tangence courbe-courbe doit s'appliquer dans le plan de travail." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Mauvaise sélection pour la contrainte parallèle / tangente. Cette contrainte " +"peut s'appliquer à :\n" +"\n" +" – Deux faces\n" +" – Au moins deux segments de ligne(s) (parallèle)\n" +" – Au moins un segment de ligne et au moins une normale (parallèle)\n" +" – Au moins deux normales (parallèle)\n" +" – Deux segments de ligne, des arcs ou des Béziers, qui partagent une " +"extrémité (tangente)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Mauvaise sélection pour une contrainte perpendiculaire. Cette contrainte " +"peut s'appliquer à :\n" +"\n" +" – Deux faces\n" +" – Deux segments de ligne\n" +" – Un segment de ligne et une normale\n" +" – Deux normales\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Mauvaise sélection pour le point de verrouillage où la contrainte déplacé. " +"Cette contrainte peut s'appliquer à :\n" +"\n" +" – un point\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NOUVEAU COMMENTAIRE — DOUBLE-CLIQUEZ POUR EDITER" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "cliquez le centre du texte de commentaire" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Aucun modèle solide présent ; dessinez-en un avec une extrusion et " +"révolution, ou utilisez « Exporter vue 2d » pour exporter les lignes et les " +"courbes dépouillées." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Mauvaise sélection pour la section export. Sélectionnez :\n" +"\n" +" – Rien, avec un plan de travail actif (plan de travail est un plan de " +"section)\n" +" – Une face (plan de coupe au-travers d'une face)\n" +" – Un point et deux segments de ligne (plan au-travers d'un point et " +"parallèle aux lignes)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Le maillage du groupe actif est vide ; Rien à exporter." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "les lignes à main levée ont été remplacées par des lignes continues" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "les lignes en zigzag ont été remplacées par des lignes continues" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Certains aspects du dessin n'ont pas d'équivalent DXF et n'ont pas été " +"exportés :\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"La taille de la page PDF dépasse 200 par 200 pouces ; de nombreux lecteurs " +"risquent rejeter ce fichier." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "dessin-dans-plan" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#références" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Le fichier est vide. Il est possible qu'il soit corrompu." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Données non reconnues dans le fichier. Ce fichier peut être corrompu, ou " +"venir d'une version plus récente du programme." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Fichier manquant" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "Le fichier lié « %s » n'est pas présent." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Voulez-vous le chercher manuellement ?\n" +"\n" +"Sinon, toute géométrie qui dépend du fichier manquant sera définitivement " +"supprimée." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Oui" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Non" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Annuler" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Fichier" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Nouveau" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Ouvrir..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Ouvrir &Récent" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Sauver" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Sauver &Comme..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Exporter &Image..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Exporter &vue 2D..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Exporter &Section 2d..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Exporter &Fil de fer 3d..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Exporter Triangle &Maillage..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Export &Surfaces..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&porter..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "&Quitter" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Editer" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Annuler" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Refaire" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&générer Tout" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Accrocher la sélection à la &Grille" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Tourner l'import de &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Co&uper" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copier" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "Co&ller" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Coller &Transformer..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Effacer" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Sélectionner une Chaîne d'&Arêtes" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Sélectionner &Tout" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Désélectionner Tout" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Styles de Ligne..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Affichage Perspective..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuration..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Affichage" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Zoom &Avant" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Zoom A&rrière" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Zoom A&justé" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Aligner la vue au &Plan de travail" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Vue &Orthogonale la plus proche" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Vue &Isométrique la plus proche" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Centrer la Vue sur le Point" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Afficher la &grille d'accrochage" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Noircir Solides Inactifs" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Utiliser la Vue en &Perspective" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Afficher Vue Éclatée" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "&Unités de dimensions" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Dimensions en &Millimètres" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Dimensions en &Mètres" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Dimensions en &Pouces" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensions en &Pieds et Pouces" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Affichage &Barre d'outils" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Affichage du &Navigateur de Propriété" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Plein Ecran" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&Nouveau Groupe" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Dessin en &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Dessin dans un nouveau &Plan de travail" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Répéter par &Translation" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Répéter par &Rotation" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtruder" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Hélice" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Tour (révolution complète)" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Ré&volution" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Lier / Assembler..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Lier Récent" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Dessin" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "Dans le &Plan de travail" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "N'importe où dans la &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "&Point" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Plan de travail" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Ligne - &Polyligne" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "Ligne de C&onstruction" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rectangle" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Cercle" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Arc de Cercle" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "Spline Cubique de &Bézier" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Texte en Police TrueType" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Image" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "&Basculer en mode « Construction »" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Rendre l'&Arc Tangent au Point" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Diviser les Courbes à l'&Intersection" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Contraintes" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Distance / Diamètre" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Dimension Maîtresse / Indicative" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "A&ngle / Égalité Angle" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "An&gle Maître / Indicatif" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Autre angle S&upplémentaire" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Basculer cote Maîtresse / cote Indicative" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&Sur Point / Courbe / Plan" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "É&galité Longueur / Rayon" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Ratio Longueur / Arc" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Différence Longueur / Arc" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "Au &Milieu" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "&Symétrique" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Para&llèle / Tangent" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Perpendiculaire" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Même Orient&ation" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Accrocher le point à l'&Emplacement" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Commentaire" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyse" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Mesurer &Volume" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Mesurer &Aire" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Mesurer &Périmètre" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Montrer les Pièces &Interférentes" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Montrer les Arêtes &Nues" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Montrer le &Centre de Gravité" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Montrer les &sous-contraintes Points" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Tracer Point" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Arrêter Tracé..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "&Dimension pas-à-pas..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Aide" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Langue" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Site web / Manuel" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "Voir le commit sur &GitHub" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&A propos" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(pas de fichier récent)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "Le fichier « %s » n'existe pas." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "Pas de plan de travail actif, la grille ne va donc pas apparaître." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Le facteur de perspective est réglé à 0, donc la vue restera une projection " +"parallèle.\n" +"\n" +"Pour une projection en perspective, modifiez le facteur de perspective dans " +"l'écran de configuration. Une valeur d'environ 0,3 est typique." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Sélectionnez un point. Ce point deviendra le centre de la vue à l'écran." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" +"Aucune entité supplémentaire ne partage des points d'extrémité avec les " +"entités sélectionnées." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Pour utiliser cette commande, sélectionnez un point ou une autre entité à " +"partir d'une pièce liée ou créez un groupe de liens dans le groupe actif." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Aucun plan de travail n'est actif. Activez un plan de travail (avec Dessin -" +"> Dans le plan de travail) pour définir le plan pour la grille d'accrochage." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Impossible d'accrocher ces éléments à la grille. Sélectionnez des points, " +"des textes de commentaires ou des contraintes avec une étiquette. Pour " +"accrocher une ligne, sélectionnez ses extrémités." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Aucun plan de travail sélectionné. Activation du plan de travail par défaut " +"pour ce groupe." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Aucun plan de travail n'est sélectionné et le groupe actif n'a pas de plan " +"de travail par défaut. Essayez de sélectionner un plan de travail ou " +"d'activer un groupe de « Dessin dans nouveau plan travail »." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Mauvaise sélection pour l'arc tangent au point. Sélectionnez un seul point, " +"ou ne sélectionnez rien pour configurer les paramètres de l'arc." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "cliquez un point sur l'arc (dessine dans le sens anti-horaire)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "cliquez pour placer un point" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "cliquez le premier point du segment de ligne" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "cliquez le premier point de la ligne de construction" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "cliquez le premier point du segment cubique" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "cliquez pour placer le centre du cercle" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "cliquez pour placer l'origine du plan de travail" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "cliquez un coin du rectangle" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "cliquez le haut à gauche du texte" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "cliquez le haut à gauche de l'image" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Aucune entité n'est sélectionnée. Sélectionnez les entités avant d'essayer " +"de basculer leurs états de construction." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "dessin-en-3d" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Mauvaise sélection pour un nouveau dessin. Ce groupe peut être créé avec :\n" +"\n" +" – Un point (passant par le point, orthogonal aux axes de coordonnées)\n" +" – Un point et deux segments de lignes (passant par le point, parallèle " +"aux deux lignes)\n" +" – Un point et une normale (passant par le point, orthogonal à la " +"normale)\n" +" – Un plan de travail (copie du plan de travail)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Activez un plan de travail (Dessin -> Dans le plan de travail) avant " +"l'extrusion. Le croquis sera extrudé normalement au plan de travail." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "extruder" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "L'opération tour ne peut être appliquée qu'à des dessins plans." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mauvaise sélection pour un nouveau groupe de révolution. Ce groupe peut être " +"créé avec :\n" +"\n" +" – Un point et un segment de ligne ou normal (révolution autour d'un axe " +"parallèle à la ligne / point normal, par le point)\n" +" – Un segment de ligne (révolution sur le segment de ligne)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "tour" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "L'opération révolution ne peut être appliquée qu'à des dessins plans" + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mauvaise sélection pour un nouveau groupe de révolution. Ce groupe peut être " +"créé avec :\n" +"\n" +" – Un point et un segment de ligne ou normal (révolution autour d'un axe " +"parallèle à la ligne / point normal, par le point)\n" +" – Un segment de ligne (révolution sur le segment de ligne)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "révolution" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "L'opération hélice ne peut être appliquée qu'à des dessins plans" + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mauvaise sélection pour un nouveau groupe d'hélice. Ce groupe peut être créé " +"avec :\n" +"\n" +" – Un point et un segment de ligne ou normal (révolution autour d'un axe " +"parallèle à la ligne / point normal, par le point)\n" +" – Un segment de ligne (révolution sur le segment de ligne)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "hélice" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Mauvaise sélection pour une nouvelle rotation. Ce groupe peut être créé " +"avec :\n" +"\n" +" – Un point, lorsqu'il est verrouillé dans un plan de travail (rotation " +"dans le plan, autour de ce point)\n" +" – Un point et une ligne ou une normale (tourner autour d'un axe par le " +"point et parallèle à la ligne / normale)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "rotation" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "translation" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(sans nom)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "contour non fermé ou tout n'est pas du même style !" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "les points ne sont pas tous coplanaires !" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "le contour s'entrecroise !" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "arête de longueur nulle !" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Les fichiers STL textuels ne sont pas actuellement pas supportés" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Vous devez dessiner dans un plan pour créer un arc tangent." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Pour créer un arc tangent, sélectionnez un point où deux lignes ou cercles " +"(pas de construction) de ce groupe et de ce plan se rejoignent." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Impossible d'arrondir ce coin. Essayez un rayon plus petit, ou essayez de " +"créer la géométrie souhaitée à la main avec des contraintes tangentielles." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" +"Impossible de diviser cette entité ; Lignes, cercles ou cubiques uniquement." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Vous devez dessiner dans un plan de travail pour diviser." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Sélectionnez deux entités qui s'intersectent (par exemple deux lignes/" +"cercles/arcs, ou une ligne/cercle/arc et un point)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Impossible de diviser ; pas d'intersection trouvée." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Appliquer au style" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Pas de style" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Style personnalisé nouvellement créé ..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Info Groupe" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Info Style" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Sélection Chaîne d'arêtes" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Basculer cote maîtresse / cote indicative" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Autre angle supplémentaire" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Accrocher à la grille" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Effacer le point de la Spline" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Ajouter un point à la Spline" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"Impossible d'ajouter le point spline : nombre maximum de points atteints." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Basculer en mode « construction »." + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Effacer la contraint Point-Coïncident" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Couper" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Copier" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Sélectionner tout" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Coller" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Coller transformé..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Effacer" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Désélectionner tout" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Désélectionner survolé" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Zoom pour ajuster" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "cliquez pou le prochain point de ligne or appuyez sur Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Impossible de dessiner un rectangle en 3d ; D'abord, activez un plan de " +"travail avec « Dessin -> Dans le plan de travail »." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "cliquez pour placer un autre coin de rectangle" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "cliquez pour ajuster le rayon" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Ne peut pas dessiner l'arc en 3d ; D'abord, activez un plan de travail avec " +"« Dessin -> Dans le plan de travail »." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "cliquez pour placer un point" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "cliquez le prochain point cubique ou appuyez sur Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Vous dessinez déjà dans un plan de travail ; Sélectionner « Dessiner en 3d » " +"avant de créer un nouveau plan de travail." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Impossible de dessiner du texte en 3d ; D'abord, activer un plan de travail " +"avec « Dessin -> Dans le plan de travail »." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "cliquer pour placer le coin inférieur droit du texte" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Impossible de dessiner l'image en 3d ; D'abord, activez un plan de travail " +"avec « Dessin -> Dans le plan de travail »." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "modèles Solvespace" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "TOUT" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "circuit imprimé IDF" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "maillage de triangles STL" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "image PNG" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "maillage STL" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Mesh Wavefront OBJ" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Mesh compatible avec Three.js, avec visionneuse" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Mesh compatible avec Three.js, mesh seulement" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "Fichier texte VRML" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "fichier STEP" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "fichier PDF" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "PostScript encapsulé" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "image vectorielle SVG" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "fichier DXF (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "fichier HPGL" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "fichiers AutoCAD DXF et DWG" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "CSV (Comma-separated values)" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "sans nom" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Sauver fichier" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Ouvrir Fichier" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Annuler" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Sauver" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Ouvrir" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Sauvegarde automatique existante" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Un fichier de sauvegarder automatique est disponible pour ce dessin" + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Voulez-vous charger la sauvegarde automatique à la place ?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Charger la sauvegarde automatique" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "Ne &pas la charger" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Fichier modifié" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "" +"Voulez-vous sauver les changements que vous avez fait au dessin « %s » ?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "" +"Voulez-vous sauver les changements que vous avez fait au nouveau dessin ?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Vos changements seront perdus si vous ne les sauvez pas." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Sauver" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Ne pas sauver" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(nouveau dessin)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Navigateur de propriété" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Les contraintes sont actuellement affichées, et seront exportées dans le " +"toolpath. Ce n'est probablement pas ce que vous voulez, cachez-le en cliquer " +"le lien en haut de la fenêtre de texte." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Impossible d'identifier le type de fichier à partir de l'extension '%s' ; " +"essayez .dxf ou .dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "" +"La contrainte doit avoir un nom, et ne doit pas référencer une dimension." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" +"Mauvaise sélection pour le pas-à-pas dimension ; sélectionnea une contrainte." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "Cet assemblage n'interfère pas, bien." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Le volume du modèle de solide est :\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Le volume de ce groupe mesh est :\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Les surfaces courbes ont été approximée par des triangles.\n" +"Cela introduit une erreur, d'environ 1% en général." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"La surface des faces sélectionnées est :\n" +"\n" +" %s\n" +"\n" +"Les courbes ont été approximée comme étant linéaires par morceau.\n" +"Cela introduit une erreur, d'environ 1%% en général." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Ce groupe ne contient pas de surface 3d fermée correcte. Elle est ouverte, " +"non coplanaire, ou s'intersecte." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"La surface de la région dessinée dans ce groupe est :\n" +"\n" +" %s\n" +"\n" +"Les courbes ont été approximée comme linéaires par morceau.\n" +"Cela introduit une erreur, d'environ 1%% en général." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"La longueur totale des entités sélectionnées est :\n" +"\n" +" %s\n" +"\n" +"\n" +"Les courbes ont été approximée comme linéaires par morceau.\n" +"Cela introduit une erreur, d'environ 1%% en général." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"Mauvaise sélection pour un périmètre ; sélectionnez des segments de ligne, " +"des arcs, et des coubres." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Mauvaise sélection pour le tracé ; sélectionnez un unique point." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Impossible d'écrire « %s »" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Le mesh s'intersecte (NON valide)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Le mesh ne s'intersecte pas (valide)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Le mesh a des arêtes nues (NON valide)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Le mesh est étanche (valide)." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Le modèle contient %d triangles, répartis sur %d surfaces." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Pas d'arête problématique, bien.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d arêtes problématiques, pas bien.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Ceci est SolveSpace version %s.\n" +"\n" +"Pour plus d'information, visitez http://solvespace.com/\n" +"\n" +"SolveSpace est un logiciel libre : vous êtes libre de le\n" +"modifier et/ou le redistribuer selon les termes de la GNU\n" +"General Public License (GPL) version 3 ou supérieure.\n" +"\n" +"Il n'y a AUCUNE GARANTIE, dans les limites légales.\n" +"Pour plus de détails, visitez http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues et autres auteurs.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Impossible d'attribuer le style à une entité dérivée d'une autre entité ; " +"Essayez d'attribuer un style au parent de cette entité." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Le nom d'un style ne peut pas être vide" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Je ne peux pas répéter moins de 1 fois." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Je ne peux pas répéter plus de 999 fois." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Un nom de groupe ne peut pas être vide" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "L'opacité doit être entre 0 et 1." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Le rayon ne peut pas être zéro ou négatif." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Dessin ligne - polyligne" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Dessin d'un rectangle" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Dessin d'un cercle" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Dessin d'un arc de cercle" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Dessin de courbes depuis un texte en police TrueType" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Dessin d'une image depuis un fichier" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Créer un arc tangent au point sélectionné" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Dessin d'une spline cubique de Bézier" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Dessin d'un point" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Basculer en mode « construction »" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Diviser lignes / courbes où elles se croisent" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Contraindre distance / diamètre / longueur" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Contraindre angle" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Contraindre à être horizontal" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Contraindre à être vertical" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Contraindre à être parallèle ou tangent" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Contraindre à être perpendiculaire" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Contraindre point sur ligne / courbe / plan / point" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Contrainte symétrique" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Contrainte égale longueur / rayon / angle" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Contrainte normales dans la même direction" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Autre angle supplémentaire" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Basculer cote maîtresse / cote indicative" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Nouveau groupe d'extrusion du dessin actif" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Nouveau groupe de révolution du dessin actif (tour complet)" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Nouveau groupe hélice du dessin actif" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Nouveau groupe de révolution partielle du dessin actif" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Nouveau groupe de répétition circulaire" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Nouveau groupe de répétition linéaire" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "" +"Nouveau groupe dans un nouveau plan de travail (Par des entités données)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Nouveau groupe en 3d" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Nouveau groupe lié / assemblage" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Vue isométrique la plus proche" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Aligner la vue sur le plan de travail actif" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Erreur" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Message" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&Ok" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "L'échelle ne peut pas être zéro ou négative." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Mauvais format : Spécifiez x, y, z" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte point / courbe / plan. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ " – Deux points (points coïncidents)\n" +#~ " – Un point et un plan de travail (point dans le plan)\n" +#~ " – Un point et un segment de ligne (point en ligne)\n" +#~ " – Un point et un cercle ou un arc (point sur courbe)\n" +#~ " – Un point et une face plane (point sur une face)\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "Mauvaise sélection pour une contrainte de longueur / rayon égale. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ " – Deux segments de ligne (longueur égale)\n" +#~ " – Deux segments de ligne et deux points (distances point-ligne " +#~ "égales)\n" +#~ " – Un segment de ligne et deux points (distances point-ligne égales)\n" +#~ " – Un segment de ligne ou un segment de ligne et point (distance point-" +#~ "ligne de longueur égale)\n" +#~ " – Quatre segments de ligne ou des normales (angle entre A, B et C, D " +#~ "égaux)\n" +#~ " – Trois segments de ligne ou des normales (angle entre A, B et B, C " +#~ "égaux)\n" +#~ " – Deux cercles ou arcs (rayon égaux)\n" +#~ " – Un segment de ligne et un arc (la longueur de segment de ligne est " +#~ "égale à la longueur d'arc)\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte horizontale / verticale. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ " – deux points\n" +#~ " – Un segment de ligne\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Mauvaise sélection pour une contrainte d'angle. Cette contrainte peut " +#~ "s'appliquer à :\n" +#~ "\n" +#~ " – Deux segments de ligne\n" +#~ " – Un segment de ligne et une normale\n" +#~ " – Deux normales\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte parallèle / tangente. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ " – Deux segments de ligne (parallèles)\n" +#~ " – Un segment de ligne et un parallèle (parallèle)\n" +#~ " – Deux normales (parallèles)\n" +#~ " – Deux segments de ligne, des arcs ou des Béziers, qui partagent une " +#~ "extrémité (tangente)\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Mauvaise sélection pour une contrainte perpendiculaire. Cette contrainte " +#~ "peut s'appliquer à :\n" +#~ "\n" +#~ " – Deux segments de ligne\n" +#~ " – Un segment de ligne et une normale\n" +#~ " – Deux normales\n" + +#~ msgid "A&ngle" +#~ msgstr "A&ngle" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "É&galité Longueur / Rayon / Angle" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte du rapport de longueur. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ "    * Deux segments de ligne\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte de différence de longueur. Cette " +#~ "contrainte peut s'appliquer à :\n" +#~ "\n" +#~ "    * Deux segments de ligne\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "R&apport de Longueur" + +#~ msgid "Length Diff&erence" +#~ msgstr "D&ifférence de Longueur" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Mauvaise sélection pour un nouveau dessin dans le plan de travail. Ce " +#~ "groupe peut être créé avec :\n" +#~ "\n" +#~ "    * Un point (par le point, orthogonal aux axes de coordonnées)\n" +#~ "    * Un point et deux segments de ligne (par le point, parallèle aux " +#~ "lignes)\n" +#~ "    * Un plan de travail (copie du plan de travail)\n" + +#~ msgid "Specify between 0 and 8 digits after the decimal." +#~ msgstr "Spécifiez entre 0 et 8 chiffres après la virgule." + +#~ msgid "Show Degrees of &Freedom" +#~ msgstr "Montrer les Degrés de &Liberté" + +#~ msgid "click to place bottom left of text" +#~ msgstr "cliquez pour placer le bas gauche du texte" + +#~ msgid "Do you want to save the changes you made to the new sketch?" +#~ msgstr "" +#~ "Voulez-vous enregistrer les modifications que vous avez apportées au " +#~ "nouveau dessin ?" + +#~ msgid "Your changes will be lost if you don't save them." +#~ msgstr "Vos modifications seront perdues si vous ne les enregistrez pas." + +#~ msgctxt "button" +#~ msgid "Save" +#~ msgstr "Sauver" + +#~ msgctxt "button" +#~ msgid "Cancel" +#~ msgstr "Annuler" + +#~ msgctxt "button" +#~ msgid "Don't Save" +#~ msgstr "Ne pas sauver" + +#~ msgid "Do you want to load the autosave file instead?" +#~ msgstr "Voulez-vous charger le fichier de sauvegarde à la place ?" + +#~ msgctxt "button" +#~ msgid "Load" +#~ msgstr "Charger" + +#~ msgctxt "button" +#~ msgid "Don't Load" +#~ msgstr "Ne pas charger" + +#~ msgid "" +#~ "Do you want to locate it manually?\n" +#~ "If you select “No”, any geometry that depends on the missing file will be " +#~ "removed." +#~ msgstr "" +#~ "Voulez-vous le localiser manuellement ?\n" +#~ "Si vous sélectionnez « Non », toute géométrie qui dépend du fichier " +#~ "manquant sera supprimée." + +#~ msgctxt "button" +#~ msgid "Yes" +#~ msgstr "Oui" + +#~ msgctxt "button" +#~ msgid "No" +#~ msgstr "Non" + +#~ msgctxt "button" +#~ msgid "OK" +#~ msgstr "Valider" + +#~ msgid "_Cancel" +#~ msgstr "_Annuler" + +#~ msgid "_Open" +#~ msgstr "_Ouvrir" + +#~ msgid "" +#~ "The file has changed since it was last saved.\n" +#~ "\n" +#~ "Do you want to save the changes?" +#~ msgstr "" +#~ "Le fichier a changé depuis sa dernière sauvegarde.\n" +#~ "\n" +#~ "Voulez-vous enregistrer les modifications ?" + +#~ msgctxt "button" +#~ msgid "Do_n't Save" +#~ msgstr "_Ne pas sauver" + +#~ msgctxt "button" +#~ msgid "_Load autosave" +#~ msgstr "_Charger la sauvegarde automatique" + +#~ msgctxt "button" +#~ msgid "Do_n't Load" +#~ msgstr "_Ne pas charger" + +#~ msgctxt "button" +#~ msgid "_Yes" +#~ msgstr "_Oui" + +#~ msgctxt "button" +#~ msgid "_No" +#~ msgstr "_Non" + +#~ msgid "SolveSpace models" +#~ msgstr "Modèles SolveSpace" + +#~ msgid "PNG file" +#~ msgstr "Fichier PNG" + +#~ msgid "STL mesh" +#~ msgstr "Maillage STL" + +#~ msgid "Wavefront OBJ mesh" +#~ msgstr "Maillage Wavefront OBJ" + +#~ msgid "Three.js-compatible mesh, with viewer" +#~ msgstr "Maillage Three-js-compatible, avec visualisateur" + +#~ msgid "Three.js-compatible mesh, mesh only" +#~ msgstr "Maillage Three-js-compatible, maillage seul" + +#~ msgid "STEP file" +#~ msgstr "Fichier STEP" + +#~ msgid "PDF file" +#~ msgstr "Fichier PDF" + +#~ msgid "Encapsulated PostScript" +#~ msgstr "Encapsulated PostScript" + +#~ msgid "Scalable Vector Graphics" +#~ msgstr "Scalable Vector Graphics" + +#~ msgid "DXF file (AutoCAD 2007)" +#~ msgstr "Fichier DXF (AutoCAD 2007)" + +#~ msgid "HPGL file" +#~ msgstr "Fichier HPGL" + +#~ msgid "G Code" +#~ msgstr "G Code" + +#~ msgid "AutoCAD DXF and DWG files" +#~ msgstr "Fichiers AutoCAD DXF et DWG" + +#~ msgid "Comma-separated values" +#~ msgstr "Valeurs CSV séparées par des virgules" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ja_JP.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ja_JP.po new file mode 100644 index 00000000..67e7c2c6 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ja_JP.po @@ -0,0 +1,2328 @@ +# Japanese translations for SolveSpace package. +# Copyright (C) 2022 the Solvespace authors +# This file is distributed under the same license as the SolveSpace package. +# verylowfreq, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2023-01-31 09:44+0900\n" +"Last-Translator: https://github.com/verylowfreq\n" +"Language-Team: \n" +"Language: ja_JP\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"切り取り・貼り付け・コピーは作業平面でのみ利用できます。\n" +"\n" +"作業平面は「スケッチ -> 作業平面上でスケッチする」から指定してください。" + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "クリップボードは空です。貼り付けるものはありません。" + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "貼り付ける個数は1以上でなければなりません。" + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "縮尺は0にできません。" + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "回転の原点を決めるために、点を1つ選択してください。" + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "移動方向を決めるために、点を2つ選択してください。" + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "移動量が 0 です。すべての複製は同一位置にあります。" + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "複製の数が多すぎます。分割してください。" + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "作業平面がアクティブでありません。" + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "書式が誤っています。座標を \"x, y, z\" で指定してください。" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "書式が誤っています。色を \"r, g, b\" で指定してください。" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"透視投影の拡大率は、「表示 -> 透視投影で表示」を有効にするまで反映されませ" +"ん。" + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "小数点以下の桁数は、0 から %d の範囲で指定してください。" + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "エクスポートの比率には0を指定できません。" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "ドリル径は負の値にできません。" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "値が誤っています。オートセーブの間隔は正の値を指定してください。" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "書式が誤っています。間隔は分単位で整数を指定してください。" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"正接する円弧と線分は端点を共有している必要があります。正接拘束をする前に「拘" +"束 -> 一致」で拘束してください。" + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"ベジェ曲線と線分は端点を共有している必要があります。正接拘束をする前に「拘束 " +"-> 一致」で拘束してください。" + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"曲線同士は端点を共有している必要があります。正接拘束をする前に「拘束 -> 一" +"致」で拘束してください。" + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"距離・直径拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2 つの点 (点同士の距離)\n" +" * 1 つの線分 (長さ)\n" +" * 2 つの点と、1 つの線分もしくは法線 (投影された距離)\n" +" * 1 つの作業平面と 1 つの点 (最小の距離)\n" +" * 1 つの線分と 1 つの点 (最小の距離)\n" +" * 1 つの平面フェイスと1つの点 (最小の距離)\n" +" * 1 つの円もしくは円弧 (直径)\n" +"\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"一致拘束ができませんでした。次の要素に適用できます。\n" +"\n" +" * 2 つの点 (点を同一位置に)\n" +" * 1 つの点と 1 つの作業平面 (点を平面上に)\n" +" * 1 つの点と 1 つの線分 (点を直線状に)\n" +" * 1 つの点と、1つの円もしくは円弧 (点を曲線上に)\n" +" * 1 つの点と、1 から3つの平面フェイス (点をフェイス上に)\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"長さ・半径の同値拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2 つ以上の線分 (長さを同じに)\n" +" * 2 つの線分と 2 つの点 (それぞれ直線と点の距離を同じに)\n" +" * 1 つの線分と 2 つの点 (直線とそれぞれの点の距離を同じに)\n" +" * 1 つの線分と、1 つの点と 1 つの線分 (線分の長さと、直線と点の距離を同じ" +"に)\n" +" * 2 つ以上の円もしくは円弧 (半径を同じに)\n" +" * 1 つの線分と 1 つの円弧 (線分の長さと円弧の長さを同じに)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"長さの比率の拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2 つの線分\n" +" * 2 つの円弧\n" +" * 円弧と線分\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"長さの差の拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2 つの線分\n" +" * 2 つの円弧\n" +" * 円弧と線分\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"中点拘束できませんでした。次の要素に適用できます:\n" +"\n" +" * 線分と点 (点を直線の中点に置きます)\n" +" * 線分と作業平面 (直線の中点を作業平面上に置きます)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"対象拘束ができませんでした。次の要素の適用できます:\n" +"\n" +" * 2 つの点、もしくは 1 つの線分 (作業平面の座標軸について対称をとります)\n" +" * 線分と、2 つの点もしくは 1 つの線分 (線分について対称をとります)\n" +" * 作業平面と、2 つの点もしくは 1 つの線分 (作業平面について対称をとりま" +"す)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"明示的に対称平面を指定しない場合は、対象拘束をするには作業平面をアクティブに" +"してください。" + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"垂直拘束や水平拘束をする前に、「スケッチ -> 作業平面上でスケッチする」で作業" +"平面をアクティブにしてください。" + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"垂直・水平拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2つ以上の点\n" +" * 1つ以上の線分\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"同じ方向の拘束ができませんでした。次の要素に適用できます。\n" +"\n" +" * 2 つの法線\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "角度拘束を選択してください。" + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "値を持つ拘束を選択してください。" + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"角度拘束ができませんでした。\n" +"\n" +"次の要素間の角度に適用できます:\n" +" * 2つの線分\n" +" * 1つの線分と1つの法線\n" +" * 2つの法線\n" +"\n" +"次の要素を同じ角度に拘束できます:\n" +" * 4つの線分もしくは法線 (AとB、CとDの角度を同じにする)\n" +" * 3つの線分もしくは法線 (AとB、BとCの角度を同じにする)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "曲線同士の正接は作業平面上で適用できます。" + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"平行・正接拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2つのフェイス\n" +" * 2つ以上の線分 (平行に)\n" +" * 1つ以上の線分と1つ以上の法線 (平行に)\n" +" * 2つ以上の法線 (平行に)\n" +" * 端点の1つが一致する、2つの線分か円弧かベジェ曲線 (正接に)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"垂線拘束ができませんでした。次の要素に適用できます:\n" +"\n" +" * 2つのフェイス\n" +" * 2つの線分\n" +" * 1つの線分と1つの法線\n" +" * 2つの法線\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"点の位置の拘束 (点を他のオブジェクトに連動して動かさない) ができませんでし" +"た。次の要素に適用できます:\n" +"\n" +" * 1 つの点\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "(コメント - ダブルクリックで編集)" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "コメントテキストの中心をクリックで指定" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"ソリッドモデルがありません。押し出しや周回、回転を利用するか、平面への投影視" +"点のエクスポートで直線や曲線をそのまま出力します。" + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"2D断面の出力ができませんでした。次のように選択してください:\n" +"\n" +" * なにも選択せず、作業平面がアクティブである (作業平面を断面とします)\n" +" * フェイス (フェイスを通る断面を用います)\n" +" * 1 つの点と 2 つの線分 (点を通り直線と平行する断面を用います)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "" +"アクティブなグループのメッシュは空です。エクスポートは行なわれませんでした。" + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "フリーハンドの線は実線に置き換えられました。" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "ジグザグ線は実線に置き換えられました。" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"図面のうち一部の側面は、対応するものがDXFにないため、それらは出力されませんで" +"した:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"PDFのページ寸法が 200x200 インチを超えています。多くのPDFリーダーでは正常に読" +"み込めません。" + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "ファイルが空です。ファイルが破損している可能性があります。" + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"ファイルに処理できないデータが含まれています。ファイルが破損しているか、より" +"新しいバージョンで作成されたファイルの可能性があります。" + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "不明ファイル" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "リンクされたファイル \"%s\" が見つかりません。" + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"手動で配置しますか?\n" +"\n" +"キャンセルした場合、不明なファイルに依存しているすべての寸法は削除されます。" + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "はい (&Y)" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "いいえ (&N)" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "キャンセル (&C)" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "ファイル (&F)" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "新規作成 (&N)" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "開く... (&O)" + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "最近使用したファイル (&R)" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "保存 (&S)" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "名前を付けて保存... (&A)" + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "画像をエクスポート... (&I)" + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "平面への投影視点をエクスポート... (&V)" + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "2D断面をエクスポート... (&S)" + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "三次元ワイヤーフレームをエクスポート... (&W)" + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "三角メッシュをエクスポート... (&M)" + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "サーフェスをエクスポート... (&S)" + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "インポート... (&I)" + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "終了 (&E)" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "編集 (&E)" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "取り消し (&U)" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "やり直し (&R)" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "すべて再生成 (&g)" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "選択したオブジェクトをグリッドに合わせる (&G)" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "リンクした部品を90度回転する (&9)" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "切り取り (&t)" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "コピー (&C)" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "貼り付け (&P)" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "複製しながら貼り付け... (&T)" + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "削除 (&D)" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "接続しているエッジを選択" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "すべてを選択 (&A)" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "選択を解除 (&U)" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "線のスタイル... (&L)" + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "カメラの設定... (&V)" + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "設定 (&f)" + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "表示 (&V)" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "拡大 (&I)" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "縮小 (&O)" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "選択オブジェクトの最適表示" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "作業平面に合わせる (&W)" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "近傍の正面図視点へ移動 (&O)" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "近傍の等角図視点へ移動 (&I)" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "点を表示の中心にする" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "グリッドを表示 (&G)" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "アクティブでないソリッドを暗くする" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "透視投影で表示 (&P)" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "分解立体図を表示 (&x)" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "表示単位の選択 (&U)" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "ミリメートル (&M)" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "メートル (&e)" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "インチ (&I)" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "フィート・インチ (&F)" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "ツールバーを表示 (&T)" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "プロパティブラウザを表示 (&w)" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "全画面表示 (&F)" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "グループ (&N)" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "三次元空間内でスケッチを始める (&3)" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "新しい作業平面上でスケッチを始める (&W)" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "直線上にコピー (&T)" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "円上にコピー (&R)" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "押し出し (&x)" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "周回 (&H)" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "螺旋 (&L)" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "回転 (&v)" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "リンク・アセンブル..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "最近使用したファイルとリンク" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "スケッチ (&S)" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "作業平面上でスケッチする (&W)" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "三次元空間内でスケッチする (&3)" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "点 (&P)" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "作業平面 (&W)" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "線分 (&S)" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "補助線の線分 (&o)" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "四角形 (&R)" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "円 (&C)" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "円弧 (&A)" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "ベジェ曲線 (&B)" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "TrueTypeフォントのテキスト (&T)" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "画像 (&I)" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "補助線との切り替え (&g)" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "フィレット" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "交差箇所で分割 (&I)" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "拘束 (&C)" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "距離・直径 (&D)" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "参照寸法 (&f)" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "指定角度 / 角度を等しく (&n)" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "参照角度 (&g)" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "補角 (&u)" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "拘束と参照を切り替え (&e)" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "水平 (&H)" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "垂直 (&V)" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "一致 (&O)" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "長さ・半径を等値にする (&q)" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "長さ・円弧の比率 (&t)" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "長さ・円弧の差 (&e)" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "中点 (&M)" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "対称 (&y)" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "平行・正接 (&l)" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "垂線 (&P)" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "同じ方向 (&a)" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "点を他のオブジェクトに連動して動かさない (&D)" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "コメントを配置" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "解析 (&A)" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "体積を計測 (&V)" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "面積を計測 (&r)" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "外周長を計測 (&P)" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "部品の干渉を強調表示 (&I)" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "浮いたエッジを強調表示 (&N)" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "重心を表示 (&C)" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "拘束されていない点を強調表示 (&U)" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "点の位置の記録を開始 (&T)" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "記録を終了して保存する... (&S)" + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "寸法を段階的に変更... (&D)" + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "ヘルプ (&H)" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "言語 (&L)" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "Webサイト・マニュアル" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "GitHubの該当コミットへ移動 (&G)" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "SolveSpaceについて (&A)" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(履歴なし)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "ファイル '%s' は存在しません。" + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "作業平面がアクティブでないため、グリッドは表示されません。" + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"透視投影の係数が 0 になっているため、表示は常に平行投影になります。\n" +"\n" +"透視投影にするには、係数を configuration から変更してください。値は 0.3 くら" +"いが一般的です。" + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "スクリーンの中央とする点を指定してください。" + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "選択した要素と端点を共有する要素は、これ以上ありません。" + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"このコマンドを利用するには、リンクされた部品の要素や点を選択するか、リンクの" +"グループをアクティブにしてください。" + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"作業平面がアクティブではありません。グリッドの平面を指定するには作業平面をア" +"クティブにしてください (「スケッチ -> 作業平面上でスケッチする」)。" + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"この要素をグリッドに合わせることはできません。点、コメントテキスト、もしくは" +"値のある拘束を選択してください。直線をグリッドに合わせるには、端点を選択して" +"ください。" + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"作業平面がアクティブではありません。現在のグループのデフォルトの作業平面をア" +"クティブにします。" + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"作業平面がアクティブではありません。また、現在のグループにはデフォルトの作業" +"平面がありません。作業平面を選択するか、新しく作業平面グループを作成してくだ" +"さい。" + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"フィェットの作成には無効な選択です。ひとつの点が選択されていればフィレットを" +"作成します。なにも選択されていなければ、フィレット作成時のパラメーターを設定" +"できます。" + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "円弧上の点をクリックで指定 (反時計回りに描きます)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "点の位置をクリックで指定" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "線分の最初の点をクリックで指定" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "補助線の線分の最初の点をクリックで指定" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "ベジェ曲線の最初の点をクリックで指定" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "円の中央をクリックで指定" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "作業平面の原点をクリックで指定" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "四角形の角のひとつをクリックで指定" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "テキストの右上をクリックで指定する" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "画像の右上をクリックで指定する" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"スケッチ要素が選択されていません。拘束と参照を切り替えるには、最初に要素を選" +"択してください。" + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"作業平面にスケッチを作成できませんでした。次のように選択してください。\n" +"\n" +" * 点 (点を通り、座標軸に直交する作業平面を作成します)\n" +" * 点と、2 つの線分 (点を通り、直線に平行する作業平面を作成します)\n" +" * 点と、法線 (点を通り、法線と直交する作業平面を作成します)\n" +" * 作業平面 (あるいは作業平面のコピー)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"押し出しを作成する前に、「スケッチ -> 作業平面上でスケッチする」で作業平面を" +"アクティブにしてください。作業平面の法線方向へ押し出しを作成します。" + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "周回操作は作業平面上にあるスケッチにのみ適用できます。" + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"周回を作成できませんでした。次のように選択してください。\n" +"\n" +" * 点と、線分もしくは法線 (点を通る回転軸を仮定し、直線・法線に平行に回転し" +"ます)\n" +" * 線分 (直線を回転軸とします)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "回転操作は作業平面上にあるスケッチにのみ適用できます。" + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"回転を作成できませんでした。次のように選択してください。\n" +"\n" +" * 点と、線分もしくは法線 (点を通る回転軸を仮定し、直線・法線に平行に回転し" +"ます)\n" +" * 線分 (直線を回転軸とします)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "螺旋操作は作業平面上にあるスケッチにのみ適用できます。" + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"螺旋を作成できませんでした。次のように選択してください。\n" +"\n" +" * 点と、線分もしくは法線 (点を通る回転軸を仮定し、直線・法線に平行に螺旋を" +"作成します)\n" +" * 線分 (直線を回転軸とします)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"円上にコピーを作成できませんでした。次のように選択してください。\n" +"\n" +" * 作業平面上にある点 (作業平面上で、これを原点として周回します)\n" +" * 点と、直線もしくは法線 (点を通る回転軸を仮定し、直線・法線と平行に周回し" +"ます)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(名称未設定)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "" +"閉じた輪郭でない、もしくは、輪郭を構成する要素のスタイルが同一ではありませ" +"ん。" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "点が同一平面上にありません。" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "輪郭線が自己交差しています。" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "長さが 0 のエッジです。" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "テキスト形式のSTLファイルは、いまのところサポートされていません。" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "正接円弧をスケッチするには、作業平面上でスケッチしてください。" + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"正接円弧を作成するには、同じグループかつ同じ作業平面上にある、補助線ではない2" +"つの直線もしくは円が交差している点を選択してください。" + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"この角をフィレットにできませんでした。もっと小さい半径を指定するか、手作業で" +"拘束してください。" + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "この要素は分割できません。分割できるのは直線・円・ベジェ曲線のみです。" + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "分割するには作業平面上でスケッチしてください。" + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "互いに交差している 2 つの要素を選択してください (直線・円・円弧・点)" + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "交差箇所が見つからないため、分割できません。" + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "スタイルを割り当て" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "スタイル指定なし" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "スタイルを作成して割り当て..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "グループ情報" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "スタイル情報" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "接続しているエッジをまとめて選択" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "参照寸法と切り替え" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "補角と切り替え" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "グリッドに沿わせる" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "スプラインの制御点を削除" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "スプラインの制御点を追加" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"スプラインの制御点を追加できませんでした。点の個数の上限に達しています。" + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "補助線との切り替え" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "点の一致拘束を削除する" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "切り取り" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "コピー" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "すべてを選択" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "貼り付け" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "複製しながら貼り付け..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "削除" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "選択を解除" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "カーソルを当てている要素の選択を解除" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "選択オブジェクトの最適表示" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "直線の次の点をクリックで指定、もしくはESCで終了" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"三次元空間内に四角形はスケッチできません。「スケッチ -> 作業平面上でスケッチ" +"する」で作業平面をアクティブにしてください。" + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "四角形のもう一つの角をクリックで指定" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "半径をクリックで指定" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"三次元空間内に円弧はスケッチできません。「スケッチ -> 作業平面上でスケッチす" +"る」で作業平面をアクティブにしてください。" + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "点の位置をクリックで指定" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "ベジェ曲線の次の点をクリックで指定、もしくはESCで終了" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"すでに作業平面上でのスケッチをしています。新しい作業平面を作成する前に、三次" +"元空間内でスケッチしてください。" + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"三次元空間内にテキストはスケッチできません。「スケッチ -> 作業平面上でスケッ" +"チする」で作業平面をアクティブにしてください。" + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "テキストの左下の位置をクリックで指定" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"三次元空間内に画像はスケッチできません。「スケッチ -> 作業平面上でスケッチす" +"る」で作業平面をアクティブにしてください。" + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpaceモデル" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "(すべてのファイル)" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF 電子基板" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL 三角メッシュ" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG 画像" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL メッシュ" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ メッシュ" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js 互換のメッシュ (ビューワー付)" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js 互換のメッシュ (メッシュのみ)" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML テキストファイル" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP ファイル" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF ファイル" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "EPS ファイル (Encapsulated PostScript)" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "SVG ファイル" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF ファイル (AutoDesk 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPG ファイル" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G コード" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AudoCAD DXF/DWG ファイル" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "CSV ファイル (Comma-separated values)" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "名称未設定" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "ファイルを保存" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "ファイルを開く" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "キャンセル (_C)" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "保存 (_S)" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "開く (_O)" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "オートセーブファイルがあります" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "このスケッチにはオートセーブファイルがあります。" + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "代わりにオートセーブファイル読み込みますか?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "オートセーブファイルを読み込む (&L)" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "読み込まない (&n)" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "編集済みファイル" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "スケッチ \"%s\" への変更を保存しますか?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "新規スケッチへの変更を保存しますか?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "保存しなければ変更は失われます。" + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "保存する (&S)" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "保存しない (&n)" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(新規スケッチ)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "プロパティブラウザ" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"表示されている拘束はツールパスとしてエクスポートされます。これはあなたが期待" +"した動作ではないかもしれません。プロパティブラウザの上部にあるボタンで非表示" +"にできます。" + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"拡張子からファイル形式を特定できませんでした ( '%s' )。 \".dxf\" や \".dwg\" " +"を試してください。" + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "参照寸法ではなく、かつ、値のある拘束を選択してください。" + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "寸法の段階的変更には無効な選択です。値のある拘束を選択してください。" + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "部品の干渉はありませんでした。" + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"ソリッドモデルの容積:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"現在のグループのメッシュの容積:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"曲面はトライアングルに近似します。\n" +"これにより通常、約 1% の誤差が発生します。" + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"選択した面のファーフェスの面積:\n" +"\n" +" %s\n" +"\n" +"曲線は区分線形に近似します。\n" +"これにより通常、約 1%% の誤差が発生します。" + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"このグループは正常に構成された二次元の閉じた領域が含まれていません。領域が開" +"いているか、同一平面上にないか、自己交差しています。" + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"このグループ内のスケッチされた領域の面積:\n" +"\n" +" %s\n" +"\n" +"曲線は区分線形に近似します。\n" +"これにより通常、約 1%% の誤差が発生します。" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"選択された要素の合計の長さ:\n" +"\n" +" %s\n" +"\n" +"曲線は区分線形に近似します。\n" +"これにより通常、約 1%% の誤差が発生します。" + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"外周長の計測には無効な選択です。線分、円弧、もしくは曲線を選択してください。" + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "点の位置の記録には無効な選択です。ひとつの点を選択してください。" + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "'%s' へ書き込めませんでした。" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "メッシュが自身と交差しています (警告)" + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "メッシュは自己交差していません (適切)" + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "メッシュには浮いたエッジが含まれています (警告)" + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "メッシュには隙間はありません (適切)" + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"モデルには %d 個のトライアングルがあり、これが %d 個のサーフェスを構成しま" +"す。" + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"問題のあるエッジは見つかりませんでした。%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d 個の問題のあるエッジが見つかりました。%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"他の要素から派生した要素には個別のスタイルを割り当てることはできません。親要" +"素にスタイルを割り当ててください。" + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "スタイル名は空にできません" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "繰り返しは 1 以上の回数を指定してください。" + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "999回を超えて繰り返すことはできません。" + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "グループ名は空にできません" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "透明度は0から1の間で指定してください。" + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "半径は0もしくは負の値にできません。" + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "線分をスケッチ" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "四角形をスケッチ" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "円をスケッチ" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "円弧をスケッチ" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "TrueTypeフォントのテキストからアウトラインをスケッチ" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "ファイルから画像を取り込む" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "選択された点でフィレットを作る" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "ベジェ曲線をスケッチ" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "点をスケッチ" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "補助線と切り替え" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "直線・曲線を交差箇所で分割" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "距離・直径・長さを拘束" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "角度を拘束" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "水平に拘束" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "垂直に拘束" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "平行もしくは正接で拘束" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "垂線で拘束" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "点を線・曲線・面・点の上に拘束" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "対称に拘束" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "長さ・半径・角度を等値に拘束" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "法線を同じ方向に拘束" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "角度の拘束を補角へ移動" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "拘束と参照寸法を切り替え" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "押し出しを作成" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "周回を作成" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "螺旋を作成" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "回転を作成" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "円上にコピーを作成" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "直線上にコピーを作成" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "選択した要素で定義される作業平面でスケッチを開始" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "三次元空間内でスケッチを開始" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "他のファイルをリンクする" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "近傍の等角図視点" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "アクティブな作業平面に視点を合わせる" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "エラー" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "メッセージ" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "OK (&O)" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "縮尺は 0 や負の値にはできません。" + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "書式が誤っています。\"x, y, z\" で指定してください。" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "一致拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの点 (点を同一位置に)\n" +#~ " * 1 つの点と 1 つの作業平面 (点を平面上に)\n" +#~ " * 1 つの点と 1 つの線分 (点を直線状に)\n" +#~ " * 1 つの点と、1つの円もしくは円弧 (点を曲線上に)\n" +#~ " * 1 つの点と 1 つの平面フェイス (点をフェイス上に)\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "長さ・半径・角度の同値拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの線分 (長さを同じに)\n" +#~ " * 2 つの線分と 2 つの点 (それぞれ直線と点の距離を同じに)\n" +#~ " * 1 つの線分と 2 つの点 (直線とそれぞれの点の距離を同じに)\n" +#~ " * 1 つの線分と、1 つの点と 1 つの線分 (線分の長さと、直線と点の距離を同" +#~ "じに)\n" +#~ " * 4つの線分もしくは法線 (直線A,B、直線C,Dそれぞれの交差する角度を同じ" +#~ "に)\n" +#~ " * 3 つの線分もしくは法線 (直線A,B、直線B,Cそれぞれの交差する角度を同じ" +#~ "に)\n" +#~ " * 2 つの円もしくは円弧 (半径を同じに)\n" +#~ " * 1 つの線分と 1 つの円弧 (線分の長さと円弧の長さを同じに)\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "垂直・水平拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの点\n" +#~ " * 1 つの線分\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "角度拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの線分\n" +#~ " * 線分と法線\n" +#~ " * 2 つの法線\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "平行・正接拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの線分 (平行)\n" +#~ " * 1 つの線分と 1 つの法線 (平行)\n" +#~ " * 2 つの法線 (平行)\n" +#~ " * 片方の端点を共有する 2 つの線分、円弧、もしくはベジェ曲線 (正接)\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "垂線拘束ができませんでした。次の要素に適用できます:\n" +#~ "\n" +#~ " * 2 つの線分\n" +#~ " * 1 つの線分と 1 つの法線\n" +#~ " * 2 つの法線\n" + +#~ msgid "A&ngle" +#~ msgstr "角度 (&n)" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "長さ・半径・角度を等値にする (&q)" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ru_RU.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ru_RU.po new file mode 100644 index 00000000..83c1b4fa --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/ru_RU.po @@ -0,0 +1,2579 @@ +# Russian translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# EvilSpirit , 2017. +# Olesya Gerasimenko , 2021. +# Alexandre Prokoudine , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2023-04-04 22:39+0200\n" +"Last-Translator: Alexandre Prokoudine \n" +"Language-Team: Russian \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: Gtranslator 41.0\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Копировать, вставить или вырезать можно\n" +"только находясь в рабочей плоскости.\n" +"Активируйте ее через Эскиз->В рабочей плоскости" + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Буфер обмена пуст; нечего вставлять." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Масштабный коэффициент не может быть нулевым." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Выберите одну точку в качестве центра вращения." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Выберите две точки, чтобы задать вектор смещения." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"Трансформация не задана. Все копии будут расположены в одном и том же месте." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Слишком много элементов для вставки; разбейте на несколько частей." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Рабочая плоскость не активна" + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Неверный формат: введите координаты как x, y, z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Неверный формат: введите цвет как r, g, b" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-" +">Перспективная Проекция." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Введите число от 0 до %d." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Масштабный коэффициент не может быть нулевым!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Радиус режущего инструмента не может быть отрицательным!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "" +"Неверное значение: интервал автосохранения должен быть положительным числом" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "" +"Неверный формат: введите целое число, чтобы задать интервал автосохранения" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "тчк-тчк-совпадение" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "тчк-тчк-расстояние" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "тчк-линия-расстояние" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "тчк-плоск-расстояние" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "тчк-грань-расстояние" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "проекц-тчк-тчк-расст" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "тчк-на-плоск" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "тчк-на-линии" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "тчк-на-грани" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "равенство-длин" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "равен-длины-и-тчк-лин-расст" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "равен-тчк-линия-расстояний" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "отношение-длин" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "отношение-длин-дуга-дуга" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "отношение-длин-дуга-отрезок" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "разность-длин" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "разность-длин-дуга-дуга" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "разность-длин-дуга-отрезок" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "симметричность" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "симметричность-гориз" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "симметричность-верт" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "симметричность-по-оси" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "на-середине" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "горизонтальность" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "вертикальность" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "диаметр" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "тчк-на-окружности" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "идентичная-ориентация" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "угол" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "параллельность" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "кас-дуга-линия" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "кас-сплайн-линия" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "кас-кривых" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "перпендикулярность" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "равенство-радиусов" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "равенство-углов" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "равен-длины-линии-длины-дуги" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "фиксация" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "комментарий" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Дуга и отрезок должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на примитиве' перед тем, как применять ограничения " +"касательности." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Сплайн и отрезок должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " +"касательности." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Кривые должны быть соединены. Соедините их крайние точки с помощью " +"'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " +"касательности." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Неправильное выделение для ограничения расстояния / диаметра.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две точки (расстояние между точками)\n" +" * отрезок (длина отрезка)\n" +" * две точки и отрезок / нормаль (расстояние между точками, " +"спроецированное на линию / нормаль)\n" +" * рабочую плоскость и точку (расстояние от точки до плоскости)\n" +" * отрезок и точку (расстояние от точки до линии)\n" +" * грань и точку (расстояние от точки до плоскости грани)\n" +" * окружность или дугу (диаметр / радиус)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Неправильное выделение для ограничения 'точка на примитиве'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две или более точек (совпадение точек)\n" +" * точку и рабочую плоскость (точка в плоскости)\n" +" * точку и отрезок (точка на линии)\n" +" * точку и окружность / дугу / сплайн (точка на кривой)\n" +" * точку и от одной до трех граней (точка на грани)\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Неправильное выделение для ограничения 'равенство примитивов'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два или более отрезка (равенство длин отрезков)\n" +" * два отрезка и две точки (равенство расстояний от точек до линий)\n" +" * отрезок и две точки (равенство расстояний от точек до линии)\n" +" * отрезок, точку и отрезок (равенство длины отрезка расстоянию от точки " +"до линии)\n" +" * две или более окружностей / дуги (равенство радиусов)\n" +" * отрезок и дугу (равенство длины отрезка и длины дуги)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Неправильное выделение для ограничения 'отношение длин'. Ограничение может " +"принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два отрезка\n" +" * две дуги\n" +" * дугу и отрезок\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Неправильное выделение для ограничения 'разность длин'. Ограничение может " +"принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два отрезка\n" +" * две дуги\n" +" * дугу и отрезок\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Неправильное выделение для ограничения 'на середине'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * точку и отрезок (точка на середине отрезка)\n" +" * отрезок и рабочую плоскость (середина отрезка на плоскости)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Неправильное выделение для ограничения 'симметрия'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две точки / отрезок (симметричность точек по горизонтали/вертикали в " +"зависимости от вида)\n" +" * отрезок, две точки / отрезок (симметричность точек по оси отрезка)\n" +" * рабочую плоскость и две точки / отрезок (симметричность относительно " +"рабочей плоскости\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Рабочая плоскость должна быть активна для того, чтобы создать\n" +"ограничение симметричности без явного указания плоскости симметрии." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Рабочая плоскость должна быть активирована (Эскиз -> В рабочей плоскости)\n" +"перед тем, как накладывать ограничения горизонтальности / вертикальности." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Неправильное выделение для ограничения 'горизонтальность / вертикальность'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две или более точек\n" +" * один или более отрезков\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Неправильное выделение для ограничения 'идентичная ориентация'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два координатных базиса('нормали')\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "" +"Переключатся между смежными углами можно только выбрав ограничение угла." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "" +"Переключать режим 'размера для справок' возможно только для ограничений, " +"имеющих размерное значение." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Неправильное выделение для ограничения углов.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +"Угол между:\n" +" * два отрезка\n" +" * отрезок и координатный базис (нормаль)\n" +" * два координатных базиса (нормали)\n" +"\n" +"Равные углы:\n" +" * четыре отрезка или нормали (равенство углов A,B и C,D)\n" +" * три отрезка или нормали (равенство углов A,B and B,C)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "" +"Ограничение касательности может быть наложено только в рабочей плоскости." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Неправильное выделение для ограничения параллельности / касательности.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две граней\n" +" * два или более отрезка (параллельность)\n" +" * два или более отрезка и одинь или более координатных базисов (нормали) " +"(параллельность)\n" +" * два или более координатных базиса (нормали) (параллельность)\n" +" * два отрезка, две дуги или два сплайна, соединенных крайними точками " +"(касательность)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Неправильное выделение для ограничения перпендикулярности.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * две граней\n" +" * два отрезка\n" +" * отрезок и координатный базис (нормаль)\n" +" * два координатных базиса (нормали)\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Неправильное выделение для ограничения 'фиксация'.\n" +"Ограничение может принимать в качестве выделения следующие примитивы:\n" +"\n" +" * точку\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "КОММЕНТАРИЙ -- ДВОЙНОЙ ЩЕЛЧОК ДЛЯ РЕДАКТИРОВАНИЯ" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "кликните мышью там, где будет расположен текстовый комментарий" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Тела не найдены; создайте их или используйте экспорт двумерных объектов." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Неправильное выделение для экспорта сечения. Необходимо выделить:\n" +"\n" +" * Ничего, но с активированной рабочей плоскостью (рабочая плоскость " +"будет плоскостью сечения)\n" +" * грань (сечение через грань)\n" +" * точку и два отрезка (сечение плоскостью, заданной двумя отрезками, " +"построенной через указанную точку)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Активная группа не содержит тел; нечего экспортировать." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "Стили линии 'от руки' были заменены сплошными линиями" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "Стили линии 'зиг-заг' были заменены сплошными линиями" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Некоторые элементы чертежа не имеют аналогов в DXF-представлении и не были " +"экспортированы:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"Размер страницы PDF превышает 200x200 дюймов; некоторые программы просмотра " +"не смогут прочитать такой файл." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "эскиз-в-плоскости" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "система-координат" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Файл пуст. Возможно он поврежден." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Некоторые данные из этого файла не распознаны. Возможно, файл поврежден или " +"создан в более новой версии программы" + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Файл Отсутствует" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "Связанный файл “%s” отсутствует." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Хотите найти их вручную?\n" +"Если вы ответите \"Нет\", то вся геометрия, которая зависит от " +"отсутствующего файла будет удалена." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "Да" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "Нет" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "Отменить" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Файл" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "Соз&дать" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Открыть..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Открыть н&едавние файлы" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Сохранить" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Сохранить &Как…" + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Экспортировать и&зображение…" + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Экспортировать &2d-вид…" + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Экспортировать 2d-се&чение…" + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Экспортировать &3d-каркас…" + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Экспортировать &полигональную сетку…" + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Экспортировать повер&хности…" + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "&Импортировать..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "&Выход" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Правка" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Отменить" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Вернуть" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "&Перегенерировать все" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Привязать выделение к &сетке" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Повернуть импортированное на &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Вы&резать" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Копировать" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "В&ставить" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Вставить с &трансформацией…" + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Удалить" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Вы&делить последовательность ребер" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "В&ыделить всё" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "С&бросить выделение" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "Стили линий…" + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Проекция вида..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Настройки..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Вид" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "&Приблизить" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "От&далить" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Показать &всё / выделенное" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Выровнять вид по &рабочей плоскости" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Ближайший &ортогональный вид" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Ближайший &изометрический вид" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Центрировать вид на точке" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Показать &сетку" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Затемнять неактивные тела" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Перспективная прое&кция" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Показать &развернутый вид" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Единицы &измерения" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Размеры в ми&ллиметрах" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Размеры в метрах" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Размеры в дю&ймах" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Размеры в &футах и дюймах" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Показывать па&нель инструментов" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Показывать брау&зер" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "Полно&экранный режим" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&Новая группа" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Создать эскиз в &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Создать эскиз в новой &рабочей плоскости" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "&Линейный массив" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "&Круговой массив" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "Тело &выдавливания" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "Тело в&интовое" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "Тело в&ращения" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Тело в&ращения на угол" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "&Импортировать деталь/сборку…" + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Импортировать недавний файл" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Эскиз" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "В &рабочей плоскости" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Режим &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Опорная &точка" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "Рабочая &плоскость" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "&Отрезок" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "&Вспомогательный отрезок" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "Прямоу&гольник" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "О&кружность" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "Д&уга окружности" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "Кубический &сплайн Безье" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "Т&екст TrueType" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "И&зображение" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Переключить режим вс&помогательных построений" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Кас&ательная в точке" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Ра&збить кривые пересечением" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Ограничение" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Расстояние / Диаметр" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Справочный ра&змер" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "&Угол / Равенство углов" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Справочный &угол" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Переключить сме&жный угол" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Переключить &режим справочного размера" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Горизонтальность" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Вертикальность" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&Точка на примитиве" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "&Равенство длин / радиусов" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "&Отношение длин (дуга)" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Р&азность длин (дуга)" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "&На середине" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "С&имметричность" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Пара&ллельность / Касательность" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "Перпендикул&ярность" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Идентичная &ориентация" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "За&фиксировать" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Комментарий" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Анализ" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Измерить &объем" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Измерить п&лощадь" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Измерить п&ериметр" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Показать пе&ресекающиеся детали" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Показать про&блемные ребра" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Показать &центр массы" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Показать c&вободные точки" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "Включить &трассировку точки" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "Остановить тра&ссировку..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Плавное из&менение размера…" + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Справка" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Язык" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "Вебсайт / &Справка" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "Пере&йти к коммиту на GitHub" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "О &Программе" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(пусто)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "Файл '%s' не существует." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "Сетку не будет видно, пока рабочая плоскость не активирована." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Коэффициент перспективы установлен в ноль, что соответствует ортогональной " +"проекции.\n" +"Чтобы получить перспективную проекцию, отредактируйте значение коэффициента " +"перспективы на конфигурационной странице браузера.\n" +"Значение по умолчанию 0.3." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "Выделите точку. Вид будет отцентрован по этой точке." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Чтобы использовать эту команду, выделите точку или другой примитив, " +"принадлежащий импортированной детали, или активируйте группу импортированной " +"детали." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей " +"Плоскости чтобы определить плоскость для сетки." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Невозможно привязать выбранные примитивы к сетке. Необходимо выбирать точки, " +"текстовые комментарии или ограничения с размерными значениями. Чтобы " +"привязать отрезок или другой примитив, выбирайте его точки." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию " +"для данной группы." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Рабочая плоскость не выбрана и активная группа не содержит рабочей плоскости " +"по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с " +"помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Неправильное выделение для создания скругления в точке. Выделите либо одну " +"точку, либо запустите команду без выделения, чтобы перейти к окну настроек " +"этой команды." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "" +"кликните мышью там, где хотите создать дугу окружности (дуга будет " +"нарисована против часовой стрелки)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "кликните мышью там, где хотите создать опорную точку" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "кликните мышью там, где хотите создать первую точку отрезка" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "" +"кликните мышью там, где хотите создать первую точку вспомогательного отрезка" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "" +"кликните мышью там, где хотите создать первую точку кубического сплайна Безье" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "кликните мышью там, где будет находиться центр окружности" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "" +"кликните мышью там, где будет находиться точка, через которую будет " +"построена рабочая плоскость" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "кликните мышью там, где будет находиться один из углов прямоугольника" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "кликните мышью там, где хотите создать текст" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "" +"кликните мышью там, где будет расположен левый верхний угол изображения" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Не выбран ни один примитив. Выберите примитивы перед тем, как переключать их " +"режим дополнительных построений." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "эскиз-в-3d" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может " +"быть создана, используя в качестве выделения следующие примитивы:\n" +"\n" +" * точку (через точку, ортогонально осям координат)\n" +" * точку и два отрезка (через точку, параллельно отрезкам)\n" +" * точку и нормаль (через точку, ортогонально нормали)\n" +" * рабочую плоскость (копию рабочей плоскости)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Выберите рабочую плоскость (Эскиз -> В Рабочей Плоскости) перед созданием " +"группы выдавливания. Эскиз будет выдавлен по нормали к рабочей плоскости." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "тело-выдавливания" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "" +"Операция создания тела вращения может быть применена только к плоским " +"эскизам." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Неправильное выделение для создания группы тела вращения. \n" +"Группа может быть создана, используя в качестве выделения следующие " +"примитивы:\n" +"\n" +" * точку и отрезок / координатный базис (нормаль) (вращение вокруг оси, " +"проходящей через точку и параллельной отрезку / нормали)\n" +" * отрезок (вращение вокруг оси, проходящей через отрезок)\n" +"\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "тело-вращения" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "" +"Операция создания тела вращения на угол может быть применена только к " +"плоским эскизам." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Неправильное выделение для создания группы тела вращения на угол. \n" +"Группа может быть создана, используя в качестве выделения следующие " +"примитивы:\n" +"\n" +" * точку и отрезок / координатный базис (нормаль) (вращение вокруг оси, " +"проходящей через точку и параллельной отрезку / нормали)\n" +" * отрезок (вращение вокруг оси, проходящей через отрезок)\n" +"\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "тело-вращения-на-угол" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "" +"Операция создания винтового тела может быть применена только к плоским " +"эскизам." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Неправильное выделение для создания винтового тела.\n" +"Группа может быть создана, используя в качестве выделения следующие " +"примитивы:\n" +"\n" +" * точку и отрезок или координатный базис (нормаль) (вращение вокруг " +"направления, параллельного линии / нормали, построенное через выбранную " +"точку)\n" +" * отрезок (вращение вокруг отрезка)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "тело-винтовое" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Неправильное выделение для создания группы кругового массива. \n" +"Группа может быть создана, используя в качестве выделения следующие " +"примитивы:\n" +"\n" +" * точку при активной рабочей плоскости (вращение в плоскости вокруг " +"выбранной точки)\n" +" * точку и отрезок / координатный базис (нормаль) (вращение вокруг оси, " +"проходящей через точку и параллельной отрезку / нормали)\n" +"\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "круговой-массив" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "линейный-массив" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(без имени)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "незамкнутый контур или несовпадение стилей!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "не все точки лежат в одной плоскости!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "контур имеет самопересечения!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "ребро нулевой длины!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Текстовые файлы STL пока не поддерживаются" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "" +"Скругления эскиза можно создавать только когда рабочая плоскость " +"активирована." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Чтобы создать скругление эскиза, выберите точку, где соединяются два " +"примитива, не принадлежащих к вспомогательной геометрии." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Невозможно скруглить угол. Попробуйте радиус поменьше или создайте требуемую " +"геометрию с помощью Ограничения -> Параллельность / Касательность." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" +"Невозможно разделить такие примитивы. Выберите линии, окружности или " +"кубические сплайны." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "" +"Пересечение примитивов работает только когда рабочая плоскость активна." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Выберите два пересекающихся примитива (два отрезка/окружности/дуги или " +"отрезок/окружность/дугу и точку)" + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Невозможно разделить пересекаемые примитивы: пересечений нет." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Назначить стилю" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Без стиля" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Создать новый стиль…" + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Настройки группы" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Настройки стиля" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Выделить последовательность ребер" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Переключить справочный размер" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Переключить смежный угол" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Привязать к сетке" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Удалить точку сплайна" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Добавить точку сплайна" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"Невозможно добавить точку сплайна: достигнуто ограничение максимального " +"количества точек для сплайна." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Переключить режим «Дополнительные построения»" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Удалить ограничение совпадения точек" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Вырезать" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Копировать" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Выделить всё" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Вставить" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Вставить с трансформацией…" + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Удалить" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Сбросить выделение" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Снять выделение с выбранного" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Показать всё" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "кликните мышью там, где хотите расположить следующую точку" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Невозможно начертить прямоугольник, когда рабочая плоскость не активна." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "кликните мышью там, где хотите расположить другой угол прямоугольника" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "кликните, чтобы задать радиус" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "Невозможно создать дугу, когда нет активной рабочей плоскости." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "кликните мышью там, где хотите создать точку" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "" +"кликните мышью там, где хотите создать следующую точку сплайна или нажмите " +"Esc для завершения операции." + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Рабочая плоскость уже активна. Перейдите в режим 3d перед созданием новой " +"рабочей плоскости." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "Невозможно создать текст, когда нет активной рабочей плоскости." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "кликните, чтобы расположить правый нижний угол текста" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "Невозможно создать изображение. Активируйте рабочую плоскость." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "Проекты SolveSpace" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "ВСЕ" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF печатная плата" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL треугольная сетка" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG изображение" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL полигональная сетка" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ полигональная сетка" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-совместимая полигональная сетка с просмотрщиком" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-совместимая полигональная сетка" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML файл" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP файл" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF документ" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulated PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "SVG изображение" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF файл (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL файл" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF и DWG файлы" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "CSV файлы (значения, разделенные запятой)" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "без имени" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Сохранить файл" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Открыть файл" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "О_тменить" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Сохранить" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Открыть" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Доступно автосохранение" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Автоматически сохраненный файл доступен для данного проекта." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Хотите загрузить автосохраненный файл вместо исходного?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Загрузить автосохранение" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Не загружать" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Измененный файл" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Сохранить изменения, сделанные в файле “%s”?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Сохранить изменения, сделанные в новом проекте?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Изменения будут утеряны, если их не сохранить." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Сохранить" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Не сохранять" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(новый проект)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Браузер" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Ограничения отображаются, и будут экспортированы в файл. Предположительно, " +"это не то, что требуется, если так, необходимо спрятать их, нажав ссылку " +"вверху окна Браузера." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Неподдерживаемый тип файла '%s'. Поддерживаются файлы с расширением .dxf и ." +"dwg." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "У ограничения должно быть значение и оно не должно быть справочным." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" +"Неправильное выделение для операции изменения значения с заданным шагом; " +"необходимо выбрать ограничение со значением." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "Сборка не содержит пересечения деталей - это хорошо." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Объем тел:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Объем тел текущей группы:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Кривые аппроксимированы кусочно-линейными функциями.\n" +"Это приводит к ошибке в расчетах, обычно в пределах 1%." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Площадь поверхности выбранных граней:\n" +"\n" +" %s\n" +"\n" +"Кривые аппроксимированы кусочно-линейными функциями.\n" +"Это приводит к ошибке в расчетах, обычно в пределах 1%%." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Эта группа не содержит замкнутых областей. В ней нет замкнутых контуров, " +"примитивы не лежат в одной плоскости или самопересекаются." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Площадь замкнутой области текущей группы:\n" +"\n" +" %s\n" +"\n" +"Кривые аппроксимированы кусочно-линейными функциями.\n" +"Это приводит к ошибке в расчетах, обычно в пределах 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Длина выбранных примитивов:\n" +"\n" +" %s\n" +"\n" +"Кривые аппроксимированы кусочно-линейными функциями.\n" +"Это приводит к ошибке в расчетах, обычно в пределах 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"Неправильное выделение для расчета периметра; необходимо выбирать только " +"отрезки, дуги и кривые в качестве исходных данных" + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Неправильное выделение для трассировки; необходимо выбрать одну точку." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Невозможно записать в '%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Полигональная сетка содержит самопересечения (это плохо)" + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Полигональная сетка не содержит самопересечений (это хорошо)" + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Полигональная сетка содержит \"оголенные\" ребра (это плохо)" + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Полигональная сетка герметична (это хорошо)" + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Модель содержит %d треугольников, содержащихся в %d поверхностях." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Нет проблемных ребер - это хорошо.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d найдены проблемные ребра - это плохо.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Это SolveSpace версии %s.\n" +"\n" +"Для дополнительной информации посетите сайт: http://solvespace.com/\n" +"\n" +"SolveSpace — свободное программное обеспечение: поощряется изменение, " +"улучшение\n" +"распространение программы по условиям лицензии GNU\n" +"General Public License (GPL) версии 3 или новее.\n" +"\n" +"НИКАКИХ ГАРАНТИЙ за пределами прав, \n" +"предусмотренных законом. Дополнительная информация на сайте: http://gnu.org/" +"licenses/\n" +"\n" +"© 2008-%d Джонатан Уэстхьюс и другие авторы.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Невозможно применить стиль к примитиву, который произошел от другого " +"примитива. Попробуйте применить стиль к исходному примитиву." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Имя стиля не может быть пустым." + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Невозможно сделать повторение меньше, чем 1 раз." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Невозможно сделать повтор больше, чем 999 раз." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Имя группы не может быть пустым." + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Прозрачность должна быть числом от нуля до единицы." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Радиус не может быть нулевым или отрицательным." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Начертить отрезок прямой" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Начертить прямоугольник" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Начертить окружность" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Начертить дугу окружности" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Начертить текст TrueType" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Импортировать изображение из файла" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Создать скругление в выбранной точке" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Начертить кубический сплайн Безье" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Начертить опорную точку" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Переключить вспомогательную геометрию" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Разбить кривые по пересечению" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Ограничение расстояния / диаметра / длины" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Ограничение угла" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Ограничение горизонтальности" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Ограничение вертикальности" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Ограничение параллельности / касательности" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Ограничение перпендикулярности" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Ограничение точка на точке / линии / окружности / дуге / плоскости" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Симметричность" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Ограничение равенства длин / радиусов / углов" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Ограничение идентичности ориентации координатных базисов" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Переключить смежный угол" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Переключить режим размера для справок" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Создать группу выдавливания текущего эскиза" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Создать группу тела вращения текущего эскиза" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Создать группу тела выдавливания по винтовой линии из текущего эскиза" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Создать группу тела вращения на угол из текущего эскиза" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Создать группу кругового массива" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Создать группу линейного массива" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "Создать группу в новой рабочей плоскости (через выбранные примитивы)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Новая группа в 3d" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Новая группа импорта детали / сборки" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Ближайший изометрический вид" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Выровнять вид по рабочей плоскости" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Ошибка" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Сообщение" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&OK" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Масштабный коэффициент не может быть нулевым или отрицательным." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Неверный формат: введите данные как x, y, z" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'точка на примитиве'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * две точки (совпадение точек)\n" +#~ " * точку и рабочую плоскость (точка в плоскости)\n" +#~ " * точку и отрезок (точка на линии)\n" +#~ " * точку и окружность / дугу / сплайн (точка на кривой)\n" +#~ " * точку и грань (точка на грани)\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'равенство примитивов'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка (равенство длин отрезков)\n" +#~ " * два отрезка и две точки (равенство расстояний от точек до линий)\n" +#~ " * отрезок и две точки (равенство расстояний от точек до линии)\n" +#~ " * отрезок, точку и отрезок (равенство длины отрезка расстоянию от " +#~ "точки до линии)\n" +#~ " * четыре отрезка или нормали (равенство углов A,B и C,D)\n" +#~ " * три отрезка или нормали (равенство углов A,B and B,C)\n" +#~ " * две окружности / дуги (равенство радиусов)\n" +#~ " * отрезок и дугу (равенство длины отрезка и длины дуги)\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'горизонтальность / " +#~ "вертикальность'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * две точки\n" +#~ " * отрезок\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения углового размера.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" +#~ " * отрезок и координатный базис (нормаль)\n" +#~ " * два координатных базиса (нормали)\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения параллельности / касательности.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка (параллельность)\n" +#~ " * отрезок и координатный базис (нормаль) (параллельность)\n" +#~ " * два координатных базиса (нормали) (параллельность)\n" +#~ " * два отрезка, две дуги или два сплайна, соединенных крайними точками " +#~ "(касательность)\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения перпендикулярности.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" +#~ " * отрезок и координатный базис (нормаль)\n" +#~ " * два координатных базиса (нормали)\n" + +#~ msgid "A&ngle" +#~ msgstr "&Угол" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "&Равенство Длин / Радиусов / Углов" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'отношение длин'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'разница длин'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Отно&шение Длин" + +#~ msgid "Length Diff&erence" +#~ msgstr "Ра&зница Длин" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Неправильное выделение для создания эскиза.\n" +#~ "Группа может быть создана, используя в качестве выделения следующие " +#~ "примитивы:\n" +#~ "\n" +#~ " * точку (рабочая плоскость, ориентированная к ближайшему виду, " +#~ "проходящая через точку)\n" +#~ " * точку и два отрезка (рабочая плоскость, проходящая через точку и " +#~ "параллельная отрезкам)\n" +#~ " * рабочую плоскость (копия рабочей плоскости)\n" + +#~ msgid "Specify between 0 and 8 digits after the decimal." +#~ msgstr "Введите число от 0 до 8." + +#~ msgid "Show Degrees of &Freedom" +#~ msgstr "Показать Степени С&вободы" + +#~ msgid "click to place bottom left of text" +#~ msgstr "кликните мышью, чтобы расположить текст" + +#~ msgid "Do you want to save the changes you made to the new sketch?" +#~ msgstr "Хотите сохранить ваши изменения?" + +#~ msgid "Your changes will be lost if you don't save them." +#~ msgstr "Ваши изменения будут утеряны, если вы их не сохраните." + +#~ msgctxt "button" +#~ msgid "Save" +#~ msgstr "Сохранить" + +#~ msgctxt "button" +#~ msgid "Cancel" +#~ msgstr "Отменить" + +#~ msgctxt "button" +#~ msgid "Don't Save" +#~ msgstr "Не Сохранять" + +#~ msgid "An autosave file is available for this project." +#~ msgstr "Файлы автосохранения доступны для данного проекта." + +#~ msgid "Do you want to load the autosave file instead?" +#~ msgstr "Хотите загрузить их вместо открываемого файла?" + +#~ msgctxt "button" +#~ msgid "Load" +#~ msgstr "Загрузить Автосохранение" + +#~ msgctxt "button" +#~ msgid "Don't Load" +#~ msgstr "Просто Открыть Файл" + +#~ msgid "" +#~ "Do you want to locate it manually?\n" +#~ "If you select “No”, any geometry that depends on the missing file will be " +#~ "removed." +#~ msgstr "" +#~ "Хотите найти их вручную?\n" +#~ "Если вы ответите \"Нет\", то вся геометрия, которая зависит от " +#~ "отсутствующего файла будет удалена." + +#~ msgctxt "button" +#~ msgid "Yes" +#~ msgstr "Да" + +#~ msgctxt "button" +#~ msgid "No" +#~ msgstr "Нет" + +#~ msgctxt "button" +#~ msgid "OK" +#~ msgstr "ХОРОШО" + +#~ msgid "_Cancel" +#~ msgstr "Отменить" + +#~ msgid "_Open" +#~ msgstr "Открыть" + +#~ msgid "" +#~ "The file has changed since it was last saved.\n" +#~ "\n" +#~ "Do you want to save the changes?" +#~ msgstr "" +#~ "Файл имеет несохраненные изменения.\n" +#~ "\n" +#~ "Хотите сохранить их?" + +#~ msgctxt "button" +#~ msgid "Do_n't Save" +#~ msgstr "Не Сохранять" + +#~ msgid "" +#~ "An autosave file is available for this project.\n" +#~ "\n" +#~ "Do you want to load the autosave file instead?" +#~ msgstr "" +#~ "Файлы автосохранения доступны для данного проекта.\n" +#~ "\n" +#~ "Хотите загрузить их вместо открываемого файла?" + +#~ msgctxt "button" +#~ msgid "_Load autosave" +#~ msgstr "Загрузить Автосохранение" + +#~ msgctxt "button" +#~ msgid "Do_n't Load" +#~ msgstr "Не Загружать" + +#~ msgctxt "button" +#~ msgid "_Yes" +#~ msgstr "Да" + +#~ msgctxt "button" +#~ msgid "_No" +#~ msgstr "Нет" + +#~ msgid "" +#~ "Select two entities that intersect each other (e.g. two lines or two " +#~ "circles or a circle and a line)." +#~ msgstr "" +#~ "Выберите два пересекающихся примитива. Например, две линии или две " +#~ "окружности или линию и окружность." + +#~ msgid "Show Menu &Bar" +#~ msgstr "Показывать Мен&ю" + +#~ msgctxt "group-name" +#~ msgid "link" +#~ msgstr "ссылка-на-деталь" + +#~ msgid "Scale must not be zero or negative!" +#~ msgstr "" +#~ "Коэффициент масштабирования не может быть нулевым или отрицательным!" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/tr_TR.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/tr_TR.po new file mode 100644 index 00000000..dd31efb0 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/tr_TR.po @@ -0,0 +1,2264 @@ +# Turkish translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Mustafa Halil GÖRENTAŞ , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.1\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-25 19:35+030020 16:45+0200\n" +"PO-Revision-Date: 2023-01-25 20:31+0300\n" +"Last-Translator: Mustafa Halil GÖRENTAŞ \n" +"Language-Team: none\n" +"Language: tr_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: Poedit 3.1.1\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Çalışmayı yalnızca bir çalışma düzleminde kesin, yapıştırın ve kopyalayın.\n" +"\n" +"Çizim -> Çalışma Düzleminde menüsü ile bir düzlemi etkinleştirin." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Pano boş; yapıştırılacak bir şey yok." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Yapıştırılacak kopya sayısı en az bir olmalıdır." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Ölçek sıfır olamaz." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Çevirme merkezini tanımlamak için bir nokta seçin." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Doğrusal kopyalama vektörünü tanımlamak için iki nokta seçin." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "Dönüşüm özdeştir. Yani tüm kopyalar tam olarak üst üste gelecek." + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "" +"Yapıştırılamayacak kadar çok öğe; bunu daha küçük yapıştıma şeklinde bölün." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Etkin çalışma düzlemi yok." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Hatalı biçim: koordinatları x, y, z olarak belirtin" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Hatalı biçim: rengi r, g, b olarak belirtin" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Görünüm -> Perspektif Projeksiyonu Kullan'ı etkinleştirene kadar perspektif " +"katsayısının hiçbir etkisi olmayacaktır." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Ondalık basamak sonrası 0 ile %d arasında rakam belirtin." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Dışa aktarma ölçeği sıfır olmamalıdır!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Kesici yarıçap ofseti negatif olmamalıdır!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "Hatalı değer: otomatik kaydetme süresi pozitif olmalıdır" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "Hatalı biçim: süre aralığını dakika cinsinden belirtin" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "çakışık-nktlar" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "nkt-nkt-mesafe" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "nkt-çizgi-mesafesi" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "nkt-düzlem-mesafesi" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "nkt-yüzey-mesafesi" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-nkt-nkt-mesafesi" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "düzlemde-nkt" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "çizgide-nkt" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "yüzeyde-nkt" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "eşit-uzunluk" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "eşit-uzunluk-ve-çzg-nkt-mesafesi" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "eşit-nkt-çizgi-mesafesi" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "uzunluk-oranı" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "yay-yay-uzunluk-oranı" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "yay-çizgi-uzunluk-oranı" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "uzunluk-farkı" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "yay-yay-uzunluk-farkı" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "yay-çizgi-uzunluk-farkı" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "simetrik" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "simetrik-y" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "simetrik-d" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "simetrik-çizgi" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "orta noktada" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "yatay" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "dikey" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "çap" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "çemberde-nkt" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "aynı-yön" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "açı" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "paralel" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "yay-çizgi-teğet" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "k.eğri-çizgi-teğet" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "eğri-eğri-teğet" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "dik" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "eşit-yarıçap" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "eşit-açı" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "eşit-çizgi-uzn-yay-uzn" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "sürüklendiği-yerde-kilitli" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "yorum" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Teğet için yay ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğet " +"kısıtlamasından önce bunları Kısıtla -> Noktada ile kısıtlayın." + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Teğet için eğri ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğet " +"kısıtlamasından önce onları Kısıtla -> Noktada ile kısıtlayın." + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Eğriler bir uç noktayı paylaşmalıdır. Teğet kısıtlamasından önce onları " +"Kısıtla -> Noktada ile kısıtlayın." + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Mesafe / çap kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta (noktalar arası mesafe)\n" +" * bir çizgi parçası (uzunluk)\n" +" * iki nokta ve bir çizgi parçası veya normal (izdüşüm mesafesi)\n" +" * bir çalışma düzlemi ve bir nokta (minimum mesafe)\n" +" * bir çizgi parçası ve bir nokta (minimum mesafe)\n" +" * bir düzlem yüzeyi ve bir nokta (minimum mesafe)\n" +" * bir daire veya yay (çap)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"Noktada / Eğride / Düzlemde kısıtlaması oluşturmak için hatalı seçim. Bu " +"kısıtlama şunlara uygulanabilir:\n" +"\n" +" * iki nokta (çakışan noktalar)\n" +" * bir nokta ve bir çalışma düzlemi (nokta ile düzlem çakışır)\n" +" * bir nokta ve bir çizgi parçası (nokta ile çizgi çakışır)\n" +" * bir nokta ve bir daire veya yay (nokta ile eğri çakışır)\n" +" * bir nokta ve bir düzlem yüzeyi (nokta ile yüzey çakışır)\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Eşit uzunluk / yarıçap kısıtlaması oluşturmak için hatalı seçim. Bu " +"kısıtlama şunlara uygulanabilir:\n" +"\n" +" * iki veya daha fazla çizgi parçası (eşit uzunlukta)\n" +" * iki çizgi parçası ve iki nokta (eşit nokta-çizgi mesafeleri)\n" +" * bir çizgi parçası ve iki nokta (eşit nokta-çizgi mesafeleri)\n" +" * bir çizgi parçası ile bir nokta ve çizgi parçası (nokta-çizgi mesafesi " +"uzunluğu eşit)\n" +" * iki veya daha fazla daire veya yay (eşit yarıçap)\n" +" * bir çizgi parçası ve bir yay (çizgi parçası uzunluğu yay uzunluğuna " +"eşittir)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Uzunluk oranı kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama " +"aşağıdakiler için geçerli olabilir:\n" +"\n" +" * iki çizgi parçası\n" +" * iki yay\n" +" * bir yay ve bir çizgi parçası\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"Uzunluk farkı kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama " +"aşağıdakiler için geçerli olabilir:\n" +"\n" +" * iki çizgi parçası\n" +" * iki yay\n" +" * bir yay ve bir çizgi parçası\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Orta nokta kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * bir çizgi parçası ve bir nokta (nokta çizgi ortasında)\n" +" * bir çizgi parçası ve bir çalışma düzlemi (çizgi düzlemin ortasına " +"taşınır )\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Simetri kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta veya bir çizgi parçası (çalışma düzleminin koordinat " +"eksenine göre simetrik)\n" +" * çizgi parçası ve iki nokta veya bir çizgi parçası (çizgi parçası " +"etrafında simetrik)\n" +" * çalışma düzlemi ve iki nokta veya bir çizgi parçası (çalışma düzlemine " +"göre simetrik)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Simetri kısıtlamasında simetri düzlemini olarak kullanılacak bir çalışma " +"düzlemi etkin olmalıdır." + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Yatay veya dikey bir kısıtlama uygulamadan önce bir çalışma düzlemini (Çizim " +"-> Çalışma Düzleminde menüsü ile) etkinleştirin." + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"Yatay / Dikey kısıtlama oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta\n" +" * bir çizgi parçası\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Aynı yön kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * iki normal\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "Bir açı kısıtlaması seçilmelidir." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "İlgili etikete sahip bir kısıtlama seçilmelidir." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"Açı kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +"Şunların arasındaki açı:\n" +" * iki çizgi parçası\n" +" * bir çizgi parçası ve bir normal\n" +" * iki normal\n" +"\n" +"Eşit açılar:\n" +" * dört çizgi parçası veya normal (A,B ve C,D arasında eşit açı)\n" +" * üç çizgi parçası veya normal (A,B ve B,C arasında eşit açı)\n" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "Eğri-eğri teğetliği çalışma düzlemine uygulanmalıdır." + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Paralel / Teğet kısıtlaması oluşturmak için hatalı seçim. Bu kısıtlama " +"şunlara uygulanabilir:\n" +"\n" +" * iki yüzey\n" +" * iki veya daha fazla doğru parçası (paralel)\n" +" * bir veya daha fazla çizgi parçası ve bir veya daha fazla normal " +"(paralel)\n" +" * iki veya daha fazla normal (paralel)\n" +" * bir uç noktayı (teğet) paylaşan iki çizgi parçası, yay veya bezier " +"eğriler\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Dikey kısıtlama oluşturmak için hatalı seçim. Bu kısıtlama şunlara " +"uygulanabilir:\n" +"\n" +" * iki yüzey\n" +" * iki çizgi parçası\n" +" * bir çizgi parçası ve bir normal\n" +" * iki normal\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Sürüklendiği yerde noktayı kısıtlamak için hatalı seçim. Bu kısıtlama " +"şunlara uygulanabilir:\n" +"\n" +" * bir nokta\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "YENI YORUM -- DÜZENLEMEK ICIN CIFT-TIKLAYIN" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "yorum metninin ortasını tıklatın" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Katı model yok; katılama ve döndürme komutları ile bir model çizin veya açık " +"çizgileri ve eğrileri dışa vermek için Görüntüyü 2d olarak Dışa Aktar'ı " +"kullanın." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Kesiti Dışa Aktarmak için hatalı seçim. Lütfen şunlardan birini seçin:\n" +"\n" +" * aktif bir çalışma düzleminde iken hiçbir şey seçmeyin (çalışma " +"düzlemi, kesit düzlemidir)\n" +" * bir yüzey (yüzeyden kesit düzlemi)\n" +" * bir nokta ve iki çizgi parçası (nokta ve paralel çizgiler boyunca " +"düzlem)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Etkin grup ağı boş; dışa aktarılacak bir şey yok." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "serbest çizgiler, sürekli çizgilerle değiştirildi" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "zikzak çizgiler sürekli çizgilerle değiştirildi" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "Çizimin bazı yönlerinin DXF eşdeğeri yoktur ve dışa aktarılmamıştır:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"PDF sayfa boyutu 200 x 200 inç'i aşıyor; birçok görüntüleyici bu dosyayı " +"reddedebilir." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "düzlemde çizim" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#referanslar" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Dosya boş. Bozuk olabilir." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Dosyada veriler tanınmadı. Bu dosya bozuk veya programın daha yeni bir " +"sürümü ile oluşturulmuş olabilir." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Kayıp Dosya" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "\"%s\" bağlantılı dosya yok." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Konumu El ile bulmak istiyor musunuz?\n" +"\n" +"Reddederseniz, eksik dosyaya bağlı olan geometri kalıcı olarak " +"kaldırılacaktır." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Evet" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Hayır" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&İptal" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Dosya" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Yeni" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Aç..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "&Son Erişilenden Aç" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Kaydet" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "&Farklı kaydet..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "&Resim olarak dışa aktar..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "&Görüntüyü 2d olarak dışa aktar..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "&Kesiti 2d olarak dışa aktar..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "3d &TelKafes olarak dışa aktar..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "&Üçgensel Ağ olarak dışa aktar..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Y&üzeyleri dışa aktar..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "&İçe Aktar..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "&Çıkış" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "D&üzen" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Geri al" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Yinele" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Tümünü Yeniden &Oluştur" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Seçimi &Izgaraya Tuttur" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "İçe Aktarılanları &90° Döndür" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "&Kes" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "K&opyala" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "Y&apıştır" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "&Dönüştürerek Yapıştır..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Sil" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Kenar &Zincirini Seç" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "&Tümünü Seç" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "Tüm Seçimi &Kaldır" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Çizgi Biçimi..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Projeksiyonu Görüntüle..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Y&apılandır..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Görünüm" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "&Yakınlaş" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "&Uzaklaş" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "&Sığacak Şekilde Yakınlaş" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Görünümü &Çalışma Düzlemine Hizala" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "En Yakın &Dik Görünüm" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "En Yakın &İzometrik Görünüm" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Noktayı Merkezde Görüntüle" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Yakalama &Izgarasını Göster" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Aktif Olmayan Katıları &Koyulaştır" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "&Perspektif Projeksiyonu Kullan" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Pat&latılmış Görünümü Göster" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Ölçü &Birimleri" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "&Milimetre cinsinden ölçü" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "M&etre cinsinden ölçü" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "&İnç cinsinden ölçü" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "&Fit ve İnç cinsinden ölçü" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "&Araç Çubuğunu Göster" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "&Özellik Penceresini Göster" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Tam Ekran" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "Yeni &Grup" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "&3d'de Çizim Yap" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "&Yeni Çalışma Düzleminde Çizim Yap" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "&Doğrusal Kopya" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "D&airesel Kopya" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "&Uzatarak Katıla" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Helis" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Tam döndürerek katıla" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "&Kısmen döndürerek katıla" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Bağla / Montajla..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Son Erişilenden Bağla" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Çizim" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "Ç&alışma Düzleminde" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "&3d'de Herhangi Bir Yerde" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Referasn &Noktası" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "Ça&lışma Düzlemi" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Ç&izgi" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "&Yardımcı Çizgi" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Dikdörtgen" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "D&aire" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "Çember &Yayı" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "Bezier Kübik &Eğri" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "TrueType Yazı Tipinde &Metin" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Resim / Görüntü" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Yap&ıyı Değiştir" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "&Yuvarlat (Radyus)" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Eğrileri Kesişim Yerinden &Böl" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Kısıtla" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Mesafe / Çap" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "&Referans Ölçü" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "&Açı / Eşit Açı" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Referans A&çı" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Diğer &Bütünler Açı" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Ölçüyü Re&ferans Yap / Yapma" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Yatay" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Dikey" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&Noktada / Eğride / Düzlemde" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "&Eşit Uzunluk / Yarıçap" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "&Uzunluk / Yay Oranı" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Uzunluk / Yay &Farkı" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "&Orta Noktada" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "&Simetrik" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "&Paralel / Teğet" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "D&ik" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Aynı &Yön" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Sürüklendiği Yerde Noktayı &Kilitle" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Y&orum" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analiz" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "&Hacmi Hesapla" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "&Alanı Hesapla" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "&Çevre Uzunluğunu Hesapla" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "&Engelleyici Parçaları Göster" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "A&çık Kenarları Göster" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "&Kütle Merkezini Göster" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Kı&sıtlanmamış Noktaları Göster" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&İzlenecek Nokta" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&İzlemeyi Durdur..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Adım &Ölçüsünü Ayarla..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Yardım" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Dil" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Web sitesi / Kılavuz" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "GitHub Commitlere git" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&Hakkında" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(son dosyalar yok)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "'%s' dosyası mevcut değil." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "Etkin çalışma düzlemi yok, bu nedenle ızgara görünmeyecektir." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Perspektif katsayısı sıfıra ayarlanmıştır, bu nedenle görünüm her zaman " +"paralel bir projeksiyon olacaktır.\n" +"\n" +"Perspektif bir projeksiyon için, yapılandırma ekranındaki perspektif " +"katsayısını değiştirin. 0.3 civarında bir değer normaldir." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "Bir nokta seçin; bu nokta ekrandaki görüntünün merkezi olacaktır." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "Hiçbir ek öğe, seçili öğeler ile uç noktaları paylaşmıyor." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Bu komutu kullanmak için, bağlantılı bir parçadan bir nokta veya başka bir " +"öğe seçin veya bir bağlantı grubunu etkin grup haline getirin." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Hiçbir çalışma düzlemi etkin değil. Izgaranın yakalanacağı düzlemini " +"tanımlamak için bir çalışma düzlemini (Çizim -> Çalışma Düzleminde ile) " +"etkinleştirin." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Bu öğeler ızgaraya tutturulamıyor; etiketli noktaları, metin yorumlarını " +"veya kısıtlamaları seçin. Bir çizgiyi tutturmak için uç noktalarını seçin." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Çalışma düzlemi seçilmedi. Bu grup için varsayılan çalışma düzlemi " +"etkinleştiriliyor." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Hiçbir çalışma düzlemi seçilmedi ve aktif grubun varsayılan bir çalışma " +"düzlemi yok. Bir çalışma düzlemi seçmeyi veya bir yeni çalışma düzleminde " +"çizim grubunu etkinleştirmeyi deneyin." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Noktada teğet yay (radyus) oluşturmak için hatalı seçim. Tek bir nokta seçin " +"veya yay parametrelerini ayarlamak için hiçbir şey seçmeyin." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "yayın ilk noktası için tıklayın (saat yönünün tersine çizilir)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "referans noktayı yerleştirmek için tıklayın" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "çizgi parçasının ilk noktası için tıklayın" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "yardımcı çizginin ilk noktası için tıklayın" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "kübik eğri parçanın ilk noktası için tıklayın" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "dairenin merkez konumu için tıklayın" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "çalışma düzleminin merkez konumu için tıklayın" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "dikdörtgenin bir köşe noktası için tıklayın" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "metnin sol üst köşe konumu için tıklayın" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "görüntünün sol üst köşe konumu için tıklayın" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Hiçbir öğe seçilmedi. Yapı durumlarını değiştirmeye çalışmadan önce öğeleri " +"seçin." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "3d-de-çizim" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Çalışma düzleminde yeni çizim oluşturmak için hatalı seçim. Bu grup " +"aşağıdakilerle oluşturulabilir:\n" +"\n" +" * bir nokta (noktadan geçen, koordinat eksenine dik)\n" +" * bir nokta ve iki doğru parçası (noktadan geçen, doğrulara paralel)\n" +" * bir nokta ve bir normal (noktadan normale dik)\n" +" * bir çalışma düzlemi (çalışma düzleminin kopyası)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Katılama işleminden önce bir çalışma düzlemini etkinleştirin. Çizim, " +"çalışma düzlemine dik olarak katılanacaktır." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "doğrusal katıla" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "" +"Tam tur döndürerek katılama işlemi, yalnızca düzlemsel çizimlere " +"uygulanabilir." + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Tamamen döndürerek yeni katılama grubu oluşturmak için hatalı seçim. Bu grup " +"şu şekilde oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel " +"bir eksen etrafında, nokta boyunca döndürülür )\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "tamamen döndürerek katıla" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "" +"Kısmen döndürerek katılama işlemi, yalnızca düzlemsel çizimlere " +"uygulanabilir." + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Kısmen döndürerek yeni katılama grubu oluşturmak için hatalı seçim. Bu grup " +"şu şekilde oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel, " +"noktadan geçen bir eksen etrafında döndürülür)\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "kısmen döndürerek katıla" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Helis işlemi yalnızca düzlemsel çizimlere uygulanabilir." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Yeni helis grubu oluşturmak için hatalı seçim. Bu grup şunlarla " +"oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel, " +"noktadan geçen bir eksen etrafında döndürülür)\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "helis" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Yeni dairesel kopyalama/çoğaltma oluşturmak için hatalı seçim. Bu grup " +"şunlarla oluşturulabilir:\n" +"\n" +" * bir nokta, çalışma düzleminde kilitli olduğu sürece (düzlemde o nokta " +"etrafında çevirin)\n" +" * bir nokta ve bir çizgi veya bir normal ( çizgiye / normale paralel ve " +"noktadan geçen bir eksen etrafında çevirin)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "dairesel kopya" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "doğrusal kopya" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(isimsiz)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "kapali olmayan kontur veya tümü ayni bicimde degil!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "noktaların hepsi aynı düzlemde değil!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "kontur kendisiyle kesisiyor!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "sıfır-uzunluklu kenar!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "Metin-biçimli STL dosyaları şu anda desteklenmiyor" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Teğet yay oluşturmak için çalışma düzleminde çizim yapılmalıdır." + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Bir teğet yay oluşturmak için, bu gruptaki iki (yardımcı) referans-olmayan " +"çizginin veya dairenin ve çalışma düzleminin birleştiği bir nokta seçin." + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Bu köşe yuvarlatılamadı. Daha küçük bir yarıçap deneyin veya teğet " +"kısıtlamaları ile istenen geometriyi elle oluşturmayı deneyin." + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" +"Bu öğe bölünemedi; yalnızca çizgiler, daireler veya kübik eğriler " +"bölünebilir." + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "Bölmek için çalışma düzleminde çizim yapılıyor olmalı." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Birbiriyle kesişen iki öğe seçin (örneğin iki çizgi / daire / yay veya bir " +"çizgi / daire / yay ve bir nokta)." + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Bölünemez; kesişim bulunamadı." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Biçim Ata" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Biçim Yok" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Yeni Oluşturulan Özel Biçim ..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Grup Bilgisi" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Biçim Bİlgisi" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Kenar Zinciri Seç" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Referans Ölçüyü Değiştir" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Diğer Bütünler Açı" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Izgaraya Tuttur" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Eğri Noktasını Sil" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Eğri Noktası Ekle" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "Eğri noktası eklenemiyor: en fazla nokta sayısına ulaşıldı." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Yapıyı değiştir" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Çakışık-Nokta Kısıtlamasını Sil" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Kes" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Kopyala" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Tümünü Seç" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Yapıştır" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Dönüştürerek Yapıştır..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Sil" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Tüm Seçimi Kaldır" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Üzerine Gelinen Seçimi Kaldır" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Sığdırmak için Yakınlaştır" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "çizginin sonraki noktası için tıklayın veya Esc tuşuna basın" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de dikdörtgen çizilemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir " +"çalışma düzlemini etkinleştirin." + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "dikdörtgenin diğer köşesini belirtmek için tıklayın" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "yarıçapı ayarlamak için tıklayın" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de yay çizemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir çalışma " +"düzlemini etkinleştirin." + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "noktayı yerleştirmek için tıklayın" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "sonraki kübik eğri noktasını tıklayın veya Esc tuşuna basın" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Zaten bir çalışma düzleminde çizim yapılıyor; 3d'de çizim yapmadan önce yeni " +"çalışma düzlemi oluşturun." + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de metin yazılamaz; önce Çizim -> Çalışma Düzleminde menüsü ile bir " +"çalışma düzlemini etkinleştirin." + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "metnin sağ alt konumunu belirtmek için tıklayın" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de görüntü/resim eklenemez; önce Çizim -> Çalışma Düzleminde menüsü ile " +"bir çalışma düzlemini etkinleştirin." + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace Modelleri" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "TÜMÜ" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF devre kartı" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL üçgensel mesh (ağ/kafes)" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG Görüntüsü" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL mesh (ağ/kafes)" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ mesh (ağ/kafes)" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Görüntüleyicili, Three.js-uyumlu mesh (ağ/kafes)" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-uyumlu mesh, sadece mesh (ağ/kafes)" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML metin dosyası" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP dosyası" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF dosyası" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulated PostScript (EPS)" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Ölçeklenebilir Vektör Grafikleri (SVG)" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF dosyası (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL dosyası" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Kodu" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF ve DWG dosyaları" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Virgülle ayrılmış değerler (CSV)" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "isimsiz" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Dosyayı Kaydet" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Dosyayı Aç" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_İptal" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Kaydet" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Aç" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Otomatik Kaydetme Kullanılabilir" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Bu çizim için otomatik kaydetme dosyası kullanılabilir." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Bunun yerine otomatik kaydetme dosyasını yüklemek istiyor musunuz?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Otomatik kaydı yükle" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Yükleme" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Değiştirilen Dosya" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "\"%s\" çiziminde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Yeni çizimde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Bunları kaydetmezseniz değişiklikleriniz kaybolur." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Kaydet" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "K&aydetme" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(yeni çizim)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Özellik Penceresi" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Kısıtlamalar şu anda gösterilmektedir ve takım yolunda dışa aktarılacaktır. " +"Muhtemelen istediğiniz bu değil; Özellik Penceresinin üst kısmındaki " +"bağlantıya tıklayarak bunları gizleyin." + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"'%s' dosya adının dosya uzantısından dosya türü belirlenemiyor; .dxf veya ." +"dwg'yi deneyin." + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Kısıtlamanın bir etiketi olmalı ve bir referans ölçüsü olmamalıdır." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Adım ölçüsü ayarlamak için hatalı seçim; bir kısıtlama seçin." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "Montajda engel oluşturan parça yok, iyi." + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Katı modelin hacmi:\n" +"\n" +" % s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Mevcut ağ (kafes) grubunun hacmi:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Kavisli (Eğri) yüzeyler üçgenler olarak yaklaştırılmıştır.\n" +"Bu, genel olarak yaklaşık 1% hataya neden olur." + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Seçili yüzlerin yüzey alanı:\n" +"\n" +" %s\n" +"\n" +"Eğriler, doğrusal parçalı olarak yaklaştırılmıştır.\n" +"Bu, genel olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Bu grup, doğru biçimlendirilmiş 2d kapalı alan içermiyor. Açık, eş-düzlemli " +"değil veya kendisiyle kesişiyor." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Bu grupta çizilen bölgenin alanı:\n" +"\n" +" %s\n" +"\n" +"Eğriler, doğrusal parçalı olarak yaklaştırılmıştır.\n" +"Bu, genel olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Seçilen öğelerin toplam uzunluğu:\n" +"\n" +" %s\n" +"\n" +"Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" +"Bu, genel olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"Çevre uzunluğunu hesabı için hatalı seçim; çizgi parçalarını, yayları ve " +"eğrileri seçin." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Nokta izleme işlemi için hatalı seçim; tek bir nokta seçin." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "\"%s\" öğesine yazılamadı" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Ağ (Kafes) kendisiyle kesişiyor (İyi DEĞİL, geçersiz)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Ağ (Kafes) kendisi ile kesişmiyor (iyi, geçerli)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Ağın (Kafesin) açık kenarları var (iyi DEĞİL, geçersiz)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Ağ (Kafes) çok sıkı (iyi, geçerli)" + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Model, %d yüzeyden %d üçgen içeriyor." + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Sıfır sorunlu kenar, iyi.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d sorunlu kenar, kötü.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Bu SolveSpace'in %s sürümüdür.\n" +"\n" +"Daha fazla bilgi için bkz., http://solvespace.com/\n" +"\n" +"SolveSpace ücretsiz bir yazılımdır: GNU Genel Kamu \n" +"Lisansı (GPL) sürüm 3 veya daha sonraki hükümleri altında \n" +"onu değiştirmekte ve / veya yeniden dağıtmakta özgürsünüz.\n" +"\n" +"Lisans kuralları haricinde GARANTİ YOKTUR.\n" +"Ayrıntılar için http://gnu.org/licenses/ adresini ziyaret edin.\n" +"\n" +"© 2008-% d Jonathan Westhues ve diğer yazarlar.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Başka bir öğeden türetilen bir öğeye biçim atayamazsınız; bu öğenin üst " +"öğesine bir biçim atamayı deneyin." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Biçim adı boş olamaz" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "1 defadan az tekrarlanamaz." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "999 defadan fazla tekrarlanamaz." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Grup adı boş olamaz" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Şeffaflık değeri sıfır ile bir arasında olmalıdır." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Yarıçap sıfır veya negatif değer olamaz." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Çizgi parçası çiz" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Dikdörtgen çiz" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Daire çiz" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Bir çember yayı çiz" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "TrueType yazı tipindeki metinden eğriler çiz" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Bir dosyadan görüntü (resim) ekle" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Seçilen noktada radyus (teğet yay) oluştur" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Kübik Bezier Eğri Çiz" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Referans Nokta Ekle" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Yapıyı değiştir" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Çizgileri / eğrileri kesiştikleri yerden böl" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Mesafeyi / çapı / uzunluğu kısıtla" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Açıyı kısıtla" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Yatay olarak kısıtla" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Dikey olarak kısıtla" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Paralel veya teğet olarak kısıtla" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Dik olarak kısıtla" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Noktayı çizgi / eğri / düzlem / nokta ile çakıştırarak kısıtla" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Simetrik olarak kısıtla" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Eşit uzunluk / yarıçap / açı olarak kısıtla" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Normalleri aynı yönde kısıtla" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Diğer bütünler açı" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Ölçüyü Referans Yap / Yapma" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Etkin çizimi uzatıp katılayarak yeni grup oluştur" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Etkin çizimi tam döndürerek yeni grup oluştur" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Etkin çizimden sarmal yeni grup oluştur" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Etkin çizimi kısmen döndürerek yeni grup oluştur" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Adım ve tekrar değeri belirterek dairesel kopya grubu oluştur" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Adım ve tekrar değeri belirterek yeni doğrusal kopyalama grup oluştur" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "" +"Yeni çalışma düzleminde yeni grup oluştur (verilen öğeler aracılığıyla)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "3d'de yeni grup oluştur" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Bağlantı / Montaj dosyası ile yeni grup oluştur" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "En yakın izometrik görünüm" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Görünümü etkin çalışma düzlemine hizala" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Hata" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Mesaj" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&Tamam" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Ölçek sıfır veya negatif olamaz." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Kötü biçim: x, y, z'yi belirtin" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/uk_UA.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/uk_UA.po new file mode 100644 index 00000000..6be80f2a --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/uk_UA.po @@ -0,0 +1,2074 @@ +# Ukrainian translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# app4soft , 2021. +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2021-04-14 01:42+0300\n" +"Last-Translator: https://github.com/Symbian9\n" +"Language-Team: app4soft\n" +"Language: uk_UA\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: Poedit 2.4.2\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Вирізання, вставка та копіювання працює лише у площині.\n" +"\n" +"Активуйте одну через Креслення -> У площині." + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "Буфер обміну порожній; немає чого вставляти." + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "Кількість копій для вставки має бути не менше одної." + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "Масштаб не може бути нульовим." + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "Оберіть одну точку для визначення центру обертання." + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "Оберіть дві точки для визначення вектору розміщення." + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" + +#: clipboard.cpp:457 +#, fuzzy +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Забагато об'єктів для вставки; рзділіть копіювання на кілька етапів." + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "Немає активної площини." + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Некоректний формат: визначте координати X, Y, Z" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "Некоректний формат: визначте колір як R, G, B" + +#: confscreen.cpp:417 +#, fuzzy +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Значення перспективи не матиме ефекту допоки не ввімкнено Вигляд -> " +"Використовувати Перспективну проєкцію." + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Визначте кількість десяткових знаків від 0 до %d." + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "Масштаб експорту не може бути нульовим!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "Радіус відступу різання не може бути від'ємним!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "Некоректне значення: інтервал автозбереження має бути додатнім" + +#: confscreen.cpp:531 +#, fuzzy +msgid "Bad format: specify interval in integral minutes" +msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "співпадіння-тчк" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "відстань-тчк-тчк" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "відстань-тчк-лінія" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "відстань-тчк-площина" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "відстань-тчк-грань" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "проєційна-відстань-тчк-тчк" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "тчк-у-площині" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "тчк-на-лінії" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "тчк-на-грані" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "рівні-довжини" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "рівні-довжина-відстань-тчк-лінія" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "рівна-відстань-тчк-лінія" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "пропорція-довжин" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "різниця-довжин" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "симетрія" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "симетрія-вертикально" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "симетрія-горизонтально" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "симетрія-відносно-лінії" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "на-середині" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "горизонталь" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "вертикаль" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "діаметр" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "тчк-на-колі" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "співнаправленість" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "кут" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "паралель" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "дотичні-дуга-лінія" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "дотичні-сплайн-лінія" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "дотичні-крива-крива" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "перпендикуляр" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "рівнозначні-радіуси" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "рівнозначні-кути" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "рівнозначні-лінія-дуга" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "фіксоване-положення" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "коментар" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:685 +#, fuzzy +msgid "Must select an angle constraint." +msgstr "Необхідно обрати кут." + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "Необхідно обрати обмежувач з відповідною міткою." + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\n" +"Equal angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "" + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "КОМЕНТАР -- ДВІЧІ КЛІКНІТЬ ДЛЯ РЕДАГУВАННЯ" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "клікніть в місце де буде центр коментаря" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Вісутня об'ємна модель; створіть одну з допомогою екструдування та " +"виточування або скористайтеся функцією \"Експортувати 2D Вигляд\" для " +"еспорту лише ліній та кривих." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "Активна група не містить меш; немає чого експортувати." + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Деякі аспекти креслення на мають відповідників у форматі DXF і не будуть " +"експортовані:\n" + +#: exportvector.cpp:838 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"Розмір аркуша у PDF перевищує 200×200 дюймів; багато переглядачів можуть не " +"підтримувати цей файл." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "креслення-в-площині" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#базові-площини" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "Файл порожній. Він може бути пошкодженим." + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Нерозпізнані дані у файлі. Цей файл може бути пошкодженим або збереженим " +"новою версією програми." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Втрачений Файл" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "Приєднаний файл “%s” відсутній." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Так" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Ні" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "&Відмінити" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Файл" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Новий" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Відкрити..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Відкрити &Недавні" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Зберегти" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Зберегти &Як..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Експортувати &Зображення..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Експортувати 2D &Вигляд..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Експортувати 2D &Секцію..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Експортувати 3D &Скелет..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Експортувати Тригранний &Каркас..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Експортувати &Поверхні..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Ім&портувати..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "В&ихід" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Редагувати" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Відмінити" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Повторити" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Ре&генерувати Все" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Прикріпити Виділене до &Сітки" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Обернути Імпортоване на &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Ви&різати" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Копіювати" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Вставити" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Вставити &Трансфмованим..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Видалити" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Виділити Ланцуг &Ребер" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Виділити &Усе" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Зняти Виділення з Усього" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "Стилі &Ліній..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Проекція Відображення..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "&Налаштування..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Відображення" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "На&близити" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Від&далити" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Умістити на &Екрані" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Вирівняти Вигляд до Робочої &Площини" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Найближчий &Ортогональний Вигляд" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Найближчий &Ізометричний Вигляд" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Центрувати Вигляд на Точці" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Показати &Сітку Прикріплення" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Затінювати Неактивні Тіла" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Використовувати &Перспективну Проекцію" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Розмірні &Одиниці" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Розміри у &Міліметрах" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Розміри у &Метрах" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Розміри у &Дюймах" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Показати Панель &Інструментів" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Показати Вікно Власти&востей" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Повний Екран" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&Нова Група" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Креслення у &3D" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Креслення у Новій &Площині" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Покрокове &Переміщення" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Покрокове &Обертання" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "Ви&давити" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Спіраль" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Виточити" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "&Обертати" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Приєднати / Зібрати..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Приєднати Нещодавні" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Креслення" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "У Робочій &Площині" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Будь-де в &3D" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Опорна &Точка" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "Робоча &Площина" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "&Відрізок Прямої" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "Контсрук&ційний Відрізок Прямої" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Прямокутник" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Коло" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Дуга Кола" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "Кубічний Сплайн &Без'є" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Текст із TrueType Шрифтом" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Зображення" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "Пере&мкнути Конструктивність" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Дотична &Дуга на Точці" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Розрізати Криві на &Перетині" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Обмежити" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Відстань / Діаметр" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Від&носний Розмір" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Відносний К&ут" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Інший Су&міжний Кут" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Перемкнути Від&носність Розмірів" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Горизонтально" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Вертикально" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&На точці / Кривій / Площині" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "До &Середини" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "Си&метрично" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Пара&лельно / Дотична" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Препендикулярно" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Однакова Орієн&тація" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Фіксувати Точку Після &Переміщення" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Коментар" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Аналізувати" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Обрахувати &Об'єм" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Обрахувати Пл&ощу" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Обрахувати &Периметр" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Показати &Дотичні Частини" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Показати &Приховані Ребра" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Показати &Центр Масс" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Показати &Надмірно Обмежені Точки" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Трасувати Точку" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Зупити Трасування..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Прорахувати &Розмір..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Довідка" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Мова" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Вебсайт / Посібник" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&Про програму" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(нємає нещодавніх файлів)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "Файл '%s' відсутній." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "Відсутня активна площина - сітка не відображатиметься." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "клікніть для встановлення вихідної точки" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "клікніть першу точку прямої лінії" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "клікніть першу точку конструктивної прямої лінії" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "клікніть першу точку кривої" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "клікніть в місце де буде центр коментаря" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "клікніть в центр відліку площини" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "клікніть для встановлення першого кута прямокутника" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "клікніть для встановлення верхньої лівої межі тексту" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "клікніть для встановлення верхньої лівої межі зображення" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "ескіз-в-3D" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Активуйте робочу площину ( Ескіз -> У Площині) перед екструдуванням. Ескіз " +"буде екструдовано перпендикулярно до робочої площини." + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "видавлювання" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "" + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "проточування" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "" + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "прокручування" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Спіраль може бути створена лише на основі площинного ескізу." + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "спіраль" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "крутіння" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "перекладання" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(безіменне)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "не замкнений контур або не все в єдиному стилі!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "контур самоперетинається!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "ребро нульової довжини!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "" + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" + +#: modify.cpp:622 +#, fuzzy +msgid "Must be sketching in workplane to split." +msgstr "Має бути накреслений у робочій площині для розділеня." + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "Неможливо розділити; відсутній перетин." + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "Встановити Стиль" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "Без Стилю" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "Створити Користувацький Стиль..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "Параметри Групи" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "Параметри Стилю" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "Виділити Ланцюг Ребер" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "Перемкнути Відносність Розміру" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "Інший Суміжний Кут" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "Прикріпити до Сітки" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "Видалити Точку Сплайну" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "Додати Точку Сплайну" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" +"Неможливо додати точку сплайна: перевищено максимальну кількість точок." + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "Пермкнути Конструктивність" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "Роз'єднати З'єднання Точок" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "Вирізати" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "Копіювати" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "Виділити Усе" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "Вставити" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "Вставити Трансформованим..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "Видалити" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "Зняти Виділення з Усього" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "Зняти Виділення з Наведеного" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "Умістити на Екрані" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "клікніть наступну точку лінії або натисніть Esc" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "клікніть для встановлення іншого кута прямокутника" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "клікніть для визначення радіусу" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "клікніть для встановлення точки" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "клікніть наступну точку кривої або натисніть Esc" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "клікніть для встановлення нижньої правої межі тексту" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace модель" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF друкована плата" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG зображення" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL меш" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ меш" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-сумісний меш, з переглядачем" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-сумісний меш, лише меш" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML меш, текстовий формат" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP файл" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF файл" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulated PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Scalable Vector Graphics, векторний формат" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF файл (AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL файл" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF та DWG файли" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Comma-separated values" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "без імені" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "Зберегти Файл" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "Відкрити Файл" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "_Скасувати" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "_Зберегти" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "_Відкрити" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "Наявні автозбереження" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Наявні автозбереження для цього креслення." + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Завантажити файл автозбереження?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Завантажити автозбереження" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Не Завантажувати" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "Файл Змінено" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Ваші зміни буде втрачено якщо ви не збережете їх." + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "&Зберегти" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "&Не Зберігати" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(нове креслення)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "Браузер Властивостей" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Обмежувач має містити мітку і бути не відносним розміром." + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач." + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "" + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Об'єм твердого тіла становить:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Об'єм поточної групи мешу становить:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Ця група не місить коректно сформованого замкненої 2D площини. Вона " +"відкрита, не компланарна, або ж самоперетинається." + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Площа заповнення ескізу у цій групі становить:\n" +"\n" +" %s\n" +"\n" +"Криві наближено до ламаних ліній.\n" +"Це вносить похибку, зазвичай близько 1%%." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Загальна довжина обраних елементів становить:\n" +"\n" +" %s\n" +"\n" +"Криві наближено до ламаних ліній.\n" +"Це вносить похибку, зазвичай близько 1%%." + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві." + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "Поганий вибір для вістежування шляху; оберіть одну точку." + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "Неможливо записати у '%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Меш самоперетинається (НЕ добре, недійсний)." + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Меш самоперетинається (добре, дійсний)." + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Меш містить оголені ребра (НЕ добре, недійсний)." + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "Меш водонепроникний (добре, дійсний)." + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Відсутні проблемні ребра, добре.%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d проблемних ребер, погано.%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Це SolveSpace версії %s.\n" +"\n" +"Більше інформації на сайті http://solvespace.com/\n" +"\n" +"SolveSpace є вільною програмою: ви можете модифікувати\n" +"та/або розповсюджувати її відповідно до ліцензії GNU\n" +"General Public License (GPL) версії 3 чи новішої.\n" +"\n" +"ВІЧСУТНІ БУДЬ-ЯКІ ГАРАНТІЇ, в межах, доволених\n" +"законом. Деталі на сайті http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues та інші автори.\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Неможливо призначити стиль елементу який походить від іншого елемента; " +"спробуйте призначити стиль батьківському елементу." + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "Стиль не може містити порожнє ім'я" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "Не можливо повторити менше 1 разу." + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "Не можливо повторити понад 999 разів." + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "Група не може містити порожнє ім'я" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "Непрозорість має бути між 0 та 1." + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "Радіус не може бути нульовим чи від'ємним." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Накреслети відрізок прямої" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Накреслити прямокутник" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Накреслити коло" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Накреслити дугу кола" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Накреслити криві з тексту на TrueType шрифті" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Вставити зображення з файлу" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Створити дотичну дугу у вибраній точці" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Накреслити кубічний сплайн Без'є" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Накреслити опорну точку" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Перемкнути конструктивність" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Розрізати лініх / криві в місцях перетину" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Визначити відстань / діаметр / довжину" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Визначити кут" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Встановити горизонтально" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Встановити перпендикулярно" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Встановити паралельно або дотично" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Встановити перпендикулярно" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Прив'язати точку до лінії / кривої / площини / точки" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Встановити симетрично" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Встановити однаковими відстань / радіус / кут" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Спрямувати нормалі в одному напрямку" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Інший суміжний кут" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Перемкнути відносність розміру" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Нова група екструдування активного ескізу" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Нова група обертання актиного ескізу" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Нова група спіралі з активного ескізу" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Нова група обертання активного ескізу" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Нова група крокування і повторення обертання" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Нова група крокування і повторення зміщення" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "Нова група в новій площині (через обрані об'екти)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Нова група в 3D" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Нова група приєднання / монтування файлу" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Найближчий ізометричний вигляд" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Вирівняти вигляд до активної робочої площини" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Помилка" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Повідомлення" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&OK" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "Масштаб не може бути нульовим чи від'ємним." + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "Некоректний формат: визначте X, Y, Z" + +#~ msgid "A&ngle" +#~ msgstr "К&ут" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "Рі&вні Довжина / Радіус / Кут" + +#~ msgid "Length Ra&tio" +#~ msgstr "Про&порція Довжин" + +#~ msgid "Length Diff&erence" +#~ msgstr "Рі&зниця Довжин" + +#~ msgid "Show Degrees of &Freedom" +#~ msgstr "Показати Степені &Свободи" + +#~ msgid "Show Menu &Bar" +#~ msgstr "Показати Панель &Меню" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/zh_CN.po b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/zh_CN.po new file mode 100644 index 00000000..840131a2 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/locales/zh_CN.po @@ -0,0 +1,2310 @@ +# Chinese translations for SolveSpace package. +# Copyright (C) 2020 the PACKAGE authors +# This file is distributed under the same license as the SolveSpace package. +# , 2020. +# , 2023. +# +# 译词一致性 +# mesh网格 grid格线 +# text文本 comment备注 +# vertical竖直 perpendicular垂直 +# Rotate旋转 Lathe转圈 Revolve扫略 +# solid实心体 object对象 entity物件 +# plane点线面/平面 face/surface表面 plane_faces平表面 +# +# 约束的选择错误。此约束可用于:A与(B和C) +# 一点/工作面 一条线段 一个表面 一个以上 +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: phkahler@gmail.com\n" +"POT-Creation-Date: 2023-01-20 16:45+0200\n" +"PO-Revision-Date: 2023-04-30 15:58+0800\n" +"Last-Translator: liuxilu@live.com\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: clipboard.cpp:309 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"剪切、粘贴、复制在工作面内才可用。\n" +"\n" +"用\"绘图 -> 在工作面内\"来激活一个。" + +#: clipboard.cpp:326 +msgid "Clipboard is empty; nothing to paste." +msgstr "剪贴板为空;没有能粘贴的。" + +#: clipboard.cpp:373 +msgid "Number of copies to paste must be at least one." +msgstr "至少要粘贴 1 个副本。" + +#: clipboard.cpp:389 textscreens.cpp:832 +msgid "Scale cannot be zero." +msgstr "缩放不能为零。" + +#: clipboard.cpp:431 +msgid "Select one point to define origin of rotation." +msgstr "选择一个点来定义旋转中心。" + +#: clipboard.cpp:443 +msgid "Select two points to define translation vector." +msgstr "选择两个点来定义平移向量。" + +#: clipboard.cpp:453 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "输入的变换是不动,因此所有副本将互相重叠。" + +#: clipboard.cpp:457 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "要粘贴的项目太多; 请把他们拆分。" + +#: clipboard.cpp:462 +msgid "No workplane active." +msgstr "无活动工作面。" + +#: confscreen.cpp:381 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "格式错误:请用 x,y,z 指定坐标" + +#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863 +msgid "Bad format: specify color as r, g, b" +msgstr "格式错误:请用 r,g,b 指定颜色" + +#: confscreen.cpp:417 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "若不启用\"查看 -> 使用透视投影\",透视因数将不起作用。" + +#: confscreen.cpp:435 confscreen.cpp:445 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "请指定小数点后 0 到 %d 位。" + +#: confscreen.cpp:457 +msgid "Export scale must not be zero!" +msgstr "导出比例不能为零!" + +#: confscreen.cpp:469 +msgid "Cutter radius offset must not be negative!" +msgstr "刀具半径偏移不能为负!" + +#: confscreen.cpp:528 +msgid "Bad value: autosave interval should be positive" +msgstr "值错误:自动保存间隔应为正" + +#: confscreen.cpp:531 +msgid "Bad format: specify interval in integral minutes" +msgstr "格式错误:间隔应为整分钟" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "点点重合" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "点点距离" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "点线距离" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "点面距离" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "点面距离" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "点点投影距离" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "点在面上" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "点在直线上" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "点在表面上" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "线长相等" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "线长与点线距离相等" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "点线距离相等" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "线长比例" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "弧长比例" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "弧长与线长比例" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "length-difference" +msgstr "线长之差" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "弧长之差" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "弧长与线长之差" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "symmetric" +msgstr "对称" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "水平对称" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "竖直对称" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "关于直线对称" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "中点" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "horizontal" +msgstr "水平" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "vertical" +msgstr "竖直" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "diameter" +msgstr "直径" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "点在圆上" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "同向" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "angle" +msgstr "角度" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "parallel" +msgstr "平行" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "弧和线相切" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "三次曲线和直线相切" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "曲线相切" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "垂直" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "半径相等" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "角度相等" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "线长和弧长相等" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "定位后锁定" + +#: constraint.cpp:50 +msgctxt "constr-name" +msgid "comment" +msgstr "备注" + +#: constraint.cpp:144 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "要相切的弧和线段必须有共同端点。约束相切之前,用\"约束 -> 在点上\"来约束它们。" + +#: constraint.cpp:163 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "要相切的三次曲线段和线段必须有共同端点。约束相切之前,使用\"约束 -> 在点上\"来约束它们。" + +#: constraint.cpp:189 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "要约束的曲线必须有共同端点。约束相切之前,使用\"约束 -> 在点上\"来约束它们。" + +#: constraint.cpp:240 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"距离/直径约束的选择错误。此约束可用于:\n" +"\n" +" * 两点(点距)\n" +" * 线段(长度)\n" +" * 两点与一条线段或法线(投影距离)\n" +" * 一点与一工作面(最小距离)\n" +" * 一点与一条线段(最小距离)\n" +" * 一点与一平表面(最小距离)\n" +" * 一个圆或一条弧(直径)\n" + +#: constraint.cpp:303 +msgid "" +"Bad selection for on point / curve / plane constraint. " +"This constraint can apply to:\n" +"\n" +" * two or more points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and one to three plane faces (point on face(s))\n" +msgstr "" +"在点/线/面上约束的选择错误。此约束可用于:\n" +"\n" +" * 两个以上的点(点点重合)\n" +" * 一点与一平面(点在面上)\n" +" * 一点与一条线段(点在直线上)\n" +" * 一点与一个圆或弧(点在曲线上)\n" +" * 一点与一到三个平表面(点在表面上)\n" + +#: constraint.cpp:364 +msgid "" +"Bad selection for equal length / radius constraint. " +"This constraint can apply to:\n" +"\n" +" * two or more line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance equals length)\n" +" * two or more circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"长度/半径相等约束的选择错误。此约束可用于:\n" +"\n" +" * 两条以上线段(长度相等)\n" +" * 两条线段与两点(点线距离相等)\n" +" * 一条线段与两点(点线距离相等)\n" +" * 一条线段与一点和线段(点线距离等于长度)\n" +" * 一条线段和一条弧(线长等于弧长)\n" +" * 两个以上圆或弧(半径相等)\n" + +#: constraint.cpp:417 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"长度比例约束的选择错误。此约束可用于:\n" +"\n" +" * 两条线段\n" +" * 两条弧线\n" +" * 一条弧线与一条线段\n" + +#: constraint.cpp:452 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" +msgstr "" +"长度差约束选择错误。此约束可用于:\n" +"\n" +" * 两条线段\n" +" * 两条弧线\n" +" * 一条弧线与一条线段\n" + +#: constraint.cpp:487 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"中点约束的选择错误。此约束可用于:\n" +"\n" +" * 一条线段和一点(点在线段中点上)\n" +" * 一条线段和一工作面(线段中点在平面上)\n" + +#: constraint.cpp:545 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"对称约束的选择错误。此约束可用于:\n" +"\n" +" * 两点或一条线段(关于工作面坐标轴对称)\n" +" * 一条线段与两点或一条线段(关于直线对称)\n" +" * 一工作面和两点或一条线段(关于工作面对称)\n" + +#: constraint.cpp:560 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "没有明显的对称面时,约束对称必须有活动工作面。" + +#: constraint.cpp:600 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "使用水平或竖直约束之前应激活工作面(用\"绘图 -> 在工作面内\")。" + +#: constraint.cpp:616 +msgid "" +"Bad selection for horizontal / vertical constraint. " +"This constraint can apply to:\n\n" +" * two or more points\n" +" * one or more line segments\n" +msgstr "" +"水平/竖直约束的选择错误。此约束可用于:\n" +"\n" +" * 两个以上的点\n" +" * 一条以上的线段\n" + +#: constraint.cpp:634 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"同向约束的选择错误。此约束可用于:\n" +"\n" +" * 两条法线\n" + +#: constraint.cpp:685 +msgid "Must select an angle constraint." +msgstr "必须选择角度约束。" + +#: constraint.cpp:698 +msgid "Must select a constraint with associated label." +msgstr "必须选择有尺寸的约束。" + +#: constraint.cpp:721 +msgid "" +"Bad selection for angle constraint. This constraint " +"can apply to:\n\n" +"Angle between:\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +"\nEqual angles:\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +msgstr "" +"角度约束的选择错误。此约束可用于:\n" +"\n" +" * 两条线段\n" +" * 两条法线\n" +" * 一条线段和一条法线\n" +"之间的角度\n" +" * 四条线段或法线(AB之间与CD之间角度相等)\n" +" * 三条线段或法线(AB之间与BC之间角度相等)\n" +"之间的角度相等" + +#: constraint.cpp:805 +msgid "Curve-curve tangency must apply in workplane." +msgstr "曲线相切必须在工作面内应用。" + +#: constraint.cpp:818 +msgid "" +"Bad selection for parallel / tangent constraint. This " +"constraint can apply to:\n\n" +" * two faces\n" +" * two or more line segments (parallel)\n" +" * one or more line segments and one or more normals (parallel)\n" +" * two or more normals (parallel)\n" +" * two line segments, arcs, or beziers, that share " +"an endpoint (tangent)\n" +msgstr "" +"平行/相切约束的选择错误。此约束可用于:\n" +"\n" +" * 两个表面\n" +" * 两条以上线段(平行)\n" +" * 两条以上法线(平行)\n" +" * 一条以上线段与一条以上法线(平行)\n" +" * 有共同端点的两条弧/线段/贝塞尔曲线(相切)\n" + +#: constraint.cpp:843 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two faces\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"垂直约束的选择错误。此约束可用于:\n" +"\n" +" * 两个表面\n" +" * 两条线段\n" +" * 两条法线\n" +" * 一条线段与一条法线\n" + +#: constraint.cpp:860 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"定位后锁定点约束的选择错误。此约束可用于:\n" +"\n" +" * 一点\n" + +#: constraint.cpp:875 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "新备注——双击编辑" + +#: constraint.cpp:881 +msgid "click center of comment text" +msgstr "单击备注文本的中心" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"不存在实心体模型;用拉伸和扫略来绘制,或使用\"导出2D视图\"导出光杆直线和曲线。" + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"导出截面的选择错误。请选择:\n" +"\n" +" * 空,有活动工作面时(工作面为截面)\n" +" * 一个表面(截面穿过表面)\n" +" * 一点与两条线段(截面穿过点并与线平行)\n" + +#: export.cpp:818 +msgid "Active group mesh is empty; nothing to export." +msgstr "活动组网格为空;没有能导出的。" + +#: exportvector.cpp:336 +msgid "freehand lines were replaced with continuous lines" +msgstr "手绘样式的线已替换为连续线" + +#: exportvector.cpp:338 +msgid "zigzag lines were replaced with continuous lines" +msgstr "锯齿样式的线已替换为连续线" + +#: exportvector.cpp:592 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "图纸的某些方面没有DXF等效项,并且未导出:\n" + +#: exportvector.cpp:838 +msgid "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "PDF页面大小超过200x200英寸;许多查看器可能会拒绝此文件。" + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "平面草图" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#参考" + +#: file.cpp:550 +msgid "The file is empty. It may be corrupt." +msgstr "文件为空,可能已损坏。" + +#: file.cpp:555 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "文件内数据无法识别。该文件可能损坏,或来自新版本程序。" + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "文件丢失" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "不存在连接的文件\"%s\"。" + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "您是否想手动查找?如果拒绝,基于丢失文件的所有几何图形将被永久删除。" + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "是(&Y)" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "否(&N)" + +#: file.cpp:877 solvespace.cpp:634 +msgctxt "button" +msgid "&Cancel" +msgstr "取消(&C)" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "文件(&F)" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "新建(&N)" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "打开...(&O)" + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "打开最近文件(&R)" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "保存(&S)" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "另存为...(&A)" + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "导出图片...(&I)" + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "导出2D视图...(&V)" + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "导出2D截面...(&S)" + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "导出3D线框...(&W)" + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "导出三角网格...(&M)" + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "导出表面...(&S)" + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "导入...(&P)" + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "退出(&E)" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "编辑(&E)" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "撤销(&U)" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "重做(&R)" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "全部重新生成(&G)" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "吸附所选到格线(&G)" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "导入的模型旋转90°(&9)" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "剪切(&T)" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "复制(&C)" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "粘贴(&P)" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "粘贴并变换...(&T)" + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "删除(&D)" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "选择相连边(&E)" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "全选(&A)" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "全不选(&U)" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "线的样式...(&L)" + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "投影视图...(&V)" + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "配置...(&F)" + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "查看(&V)" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "放大(&I)" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "缩小(&O)" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "适合窗口(&F)" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "视图对齐至工作面(&W)" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "最接近的正交视图(&O)" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "最接近的等轴视图(&I)" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "视图中心置于点(&C)" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "显示吸附格线(&G)" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "非活动实心体变暗" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "使用透视投影(&P)" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "显示爆炸视图(&E)" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "尺寸单位(&U)" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "毫米(&M)" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "米(&E)" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "英寸(&I)" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "英尺和英寸(&F)" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "显示工具栏(&T)" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "显示属性浏览器(&W)" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "全屏(&F)" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "新建组(&N)" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "在三维空间绘制(&3)" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "在新工作面绘制(&W)" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "步进平移(&T)" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "步进旋转(&R)" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "挤出(&E)" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "螺旋(&H)" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "转圈(&L)" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "扫略(&V)" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "连接/装配..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "连接最近文件" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "绘图(&S)" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "在工作面内(&W)" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "在三维空间(&3)" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "基准点(&P)" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "工作面(&W)" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "线段(&S)" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "构造线线段(&C)" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "矩形(&R)" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "圆(&C)" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "圆弧(&A)" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "三次贝塞尔样条(&B)" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "TrueType字体文本(&T)" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "图片(&I)" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "切换构造线(&G)" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "点处创建内切弧(&A)" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "交点处拆分曲线(&I)" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "约束(&C)" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "距离/直径(&D)" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "参考尺寸(&F)" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "角度(&N)" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "参考角度(&G)" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "补角(&U)" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "切换参考尺寸(&E)" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "水平(&H)" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "竖直(&V)" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "在点/线/面上(&O)" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "长度/半径/角度相等(&Q)" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "(弧)长比例(&T)" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "(弧)长之差(&E)" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "中点(&M)" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "对称(&Y)" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "平行/相切(&L)" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "垂直(&P)" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "同向(&A)" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "定位后锁定点(&D)" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "备注" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "分析(&A)" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "测量体积(&V)" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "测量面积(&R)" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "测量周长(&P)" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "显示干涉部件(&I)" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "显示裸露边(&N)" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "显示质心(&C)" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "显示欠约束的点(&U)" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "跟踪点(&T)" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "停止跟踪...(&S)" + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "尺寸步进...(&D)" + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "帮助(&H)" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "语言(&L)" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "网站/手册(&W)" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "转到Github commit(&G)" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "关于(&A)" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(无最近文件)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "不存在文件\"%s\"。" + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "没有活动工作面,因此无法显示格线。" + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"透视因数已设为零,因此视图将始终为平行投影。\n" +"\n" +"要使用透视投影,请在配置界面中修改透视因数。典型值大概是0.3。" + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "选择一点; 此点将成为屏幕上视图的中心。" + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "所选物件不与其他物件有共同端点。" + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"使用此命令时,选择连接来的部件上一点或其他成分,或将一个连接组设为活动组。" + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "无活动工作面。激活一个工作面(用\"绘图 -> 在工作面内\")以定义吸附格线所在的平面。" + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"不能吸附这些项目到格线;选择点、文本备注、有尺寸的约束。要吸附线请选择其端点。" + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "未选择工作面。将激活该组的默认工作面。" + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"未选择工作面,且活动组没有默认工作面。请选择一个工作面,或激活一个\"平面草图\"组。" + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "\"点处创建内切弧\"的选择错误。选择单个点,或什么都不选来设置参数。" + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "点击弧上的点(逆时针绘制)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "点击放置基准点" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "点击线段的起点" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "点击构造线的起点" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "点击三次曲线段的起点" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "点击圆心" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "点击工作面原点" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "点击矩形的一个角" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "点击文本左上角" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "点击图片左上角" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "未选中物件,切换构造状态前请先选中物件。" + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "三维草图" + +#: group.cpp:154 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"\"在新工作面绘制\"的选择错误。该组可创建以:\n" +"\n" +" * 一点(穿过该点,与坐标轴正交)\n" +" * 一点与两条线段(穿过点,平行于线)\n" +" * 一点和一条法线(穿过点,正交于法线)\n" +" * 工作面(副本)\n" + +#: group.cpp:170 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "挤出前先激活工作面(绘图 -> 在工作面内),草图将沿工作面法线挤出。" + +#: group.cpp:179 +msgctxt "group-name" +msgid "extrude" +msgstr "挤出" + +#: group.cpp:184 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "转圈操作只能用于平面草图。" + +#: group.cpp:195 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"新建转圈组的选择错误,该组可创建以:\n" +"\n" +" * 一点与一条线段或法线(围绕通过点且平行于线的轴)\n" +" * 一条线段(围绕线段)\n" + +#: group.cpp:205 +msgctxt "group-name" +msgid "lathe" +msgstr "转圈" + +#: group.cpp:210 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "扫略操作只能用于平面草图。" + +#: group.cpp:221 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"新建扫略组的选择错误。该组可创建以:\n" +"\n" +" * 一点与线段/法线(围绕通过点且平行于线的轴旋转)\n" +" * 一条线段(围绕线段旋转)\n" + +#: group.cpp:233 +msgctxt "group-name" +msgid "revolve" +msgstr "扫略" + +#: group.cpp:238 +msgid "Helix operation can only be applied to planar sketches." +msgstr "螺旋操作只能用于平面草图。" + +#: group.cpp:249 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"新建螺旋组的选择错误。该组可创建以:\n" +"\n" +" * 一点与一条线段或法线(围绕通过点且平行于线的轴旋转)\n" +" * 线段(围绕线段旋转)\n" + +#: group.cpp:261 +msgctxt "group-name" +msgid "helix" +msgstr "螺旋" + +#: group.cpp:274 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"新建旋转组的选择错误。该组可创建以:\n" +"\n" +" * 一点,在工作面内新建时(在平面内围绕该点旋转)\n" +" * 一点与一条线段或法线(围绕通过点且平行于线的轴旋转)\n" + +#: group.cpp:287 +msgctxt "group-name" +msgid "rotate" +msgstr "旋转" + +#: group.cpp:298 +msgctxt "group-name" +msgid "translate" +msgstr "平移" + +#: group.cpp:420 +msgid "(unnamed)" +msgstr "(未命名)" + +#: groupmesh.cpp:710 +msgid "not closed contour, or not all same style!" +msgstr "轮廓未闭合,或样式不一致!" + +#: groupmesh.cpp:723 +msgid "points not all coplanar!" +msgstr "并非所有点都共面!" + +#: groupmesh.cpp:725 +msgid "contour is self-intersecting!" +msgstr "轮廓自相交!" + +#: groupmesh.cpp:727 +msgid "zero-length edge!" +msgstr "边长度为零!" + +#: importmesh.cpp:136 +msgid "Text-formated STL files are not currently supported" +msgstr "目前不支持文本格式的STL文件" + +#: modify.cpp:252 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "必须在工作面内创建内切弧。" + +#: modify.cpp:299 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "要创建内切弧,请选择活动组和工作面中,两个非构造线或圆连接处。" + +#: modify.cpp:386 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "无法倒圆这个角。尝试更小的半径,或用切线约束手动创建。" + +#: modify.cpp:595 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "不能拆分此物件;仅限直线、圆、三次曲线。" + +#: modify.cpp:622 +msgid "Must be sketching in workplane to split." +msgstr "必须在工作面内拆分。" + +#: modify.cpp:629 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "选择两个相交的物件(例如两条线/圆/弧,或一条线/圆/弧与一点)。" + +#: modify.cpp:734 +msgid "Can't split; no intersection found." +msgstr "无法拆分;未发现交点。" + +#: mouse.cpp:557 +msgid "Assign to Style" +msgstr "指定样式" + +#: mouse.cpp:573 +msgid "No Style" +msgstr "无样式" + +#: mouse.cpp:576 +msgid "Newly Created Custom Style..." +msgstr "新建自定义样式..." + +#: mouse.cpp:583 +msgid "Group Info" +msgstr "组信息" + +#: mouse.cpp:603 +msgid "Style Info" +msgstr "样式信息" + +#: mouse.cpp:623 +msgid "Select Edge Chain" +msgstr "选择相连边" + +#: mouse.cpp:629 +msgid "Toggle Reference Dimension" +msgstr "切换参考尺寸" + +#: mouse.cpp:635 +msgid "Other Supplementary Angle" +msgstr "补角" + +#: mouse.cpp:640 +msgid "Snap to Grid" +msgstr "吸附至格线" + +#: mouse.cpp:649 +msgid "Remove Spline Point" +msgstr "删除样条点" + +#: mouse.cpp:684 +msgid "Add Spline Point" +msgstr "增加样条点" + +#: mouse.cpp:688 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "无法增加样条点:超过点数限制。" + +#: mouse.cpp:713 +msgid "Toggle Construction" +msgstr "切换构造线" + +#: mouse.cpp:729 +msgid "Delete Point-Coincident Constraint" +msgstr "删除点点重合约束" + +#: mouse.cpp:747 +msgid "Cut" +msgstr "剪切" + +#: mouse.cpp:749 +msgid "Copy" +msgstr "复制" + +#: mouse.cpp:753 +msgid "Select All" +msgstr "全选" + +#: mouse.cpp:758 +msgid "Paste" +msgstr "粘贴" + +#: mouse.cpp:760 +msgid "Paste Transformed..." +msgstr "粘贴并变换..." + +#: mouse.cpp:765 +msgid "Delete" +msgstr "删除" + +#: mouse.cpp:768 +msgid "Unselect All" +msgstr "全不选" + +#: mouse.cpp:775 +msgid "Unselect Hovered" +msgstr "光标下的不选" + +#: mouse.cpp:784 +msgid "Zoom to Fit" +msgstr "适合窗口" + +#: mouse.cpp:986 mouse.cpp:1274 +msgid "click next point of line, or press Esc" +msgstr "点击下一个点,或按Esc取消" + +#: mouse.cpp:992 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "无法在三维空间绘制矩形;请先激活工作面(用\"绘图 -> 在工作面内\")。" + +#: mouse.cpp:1026 +msgid "click to place other corner of rectangle" +msgstr "点击放置矩形的另一个角" + +#: mouse.cpp:1047 +msgid "click to set radius" +msgstr "点击设置半径" + +#: mouse.cpp:1052 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "无法在三维空间绘制弧线,请激活工作面(用\"绘图 -> 在工作面内\")" + +#: mouse.cpp:1071 +msgid "click to place point" +msgstr "点击放置点" + +#: mouse.cpp:1087 +msgid "click next point of cubic, or press Esc" +msgstr "点击下一个点,或按Esc取消" + +#: mouse.cpp:1092 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "已在工作面内绘制;新建工作面之前先\"在三维空间绘制\"。" + +#: mouse.cpp:1108 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "无法在三维空间绘制文本,请激活工作面(用\"绘图 -> 在工作面内\")" + +#: mouse.cpp:1125 +msgid "click to place bottom right of text" +msgstr "点击放置文本的右下角" + +#: mouse.cpp:1131 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "无法在三维空间绘制图片,请激活工作面(用\"绘图 -> 在工作面内\")" + +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace模型" + +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "全部" + +#: platform/gui.cpp:91 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF电路图" + +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL三角网格" + +#: platform/gui.cpp:96 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG图片" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL网格" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront obj网格" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js兼容网格,带视图" + +#: platform/gui.cpp:103 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js兼容网格,仅网格" + +#: platform/gui.cpp:104 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML文本文件" + +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP文件" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF文件" + +#: platform/gui.cpp:113 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "封装的PostScript" + +#: platform/gui.cpp:114 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "SVG矢量图" + +#: platform/gui.cpp:116 platform/gui.cpp:123 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF文件(AutoCAD 2007)" + +#: platform/gui.cpp:117 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL文件" + +#: platform/gui.cpp:118 +msgctxt "file-type" +msgid "G Code" +msgstr "G代码" + +#: platform/gui.cpp:127 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF/DWG文件" + +#: platform/gui.cpp:131 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "逗号分隔数据" + +#: platform/guigtk.cpp:1382 platform/guimac.mm:1513 platform/guiwin.cpp:1641 +msgid "untitled" +msgstr "无标题" + +#: platform/guigtk.cpp:1393 platform/guigtk.cpp:1426 platform/guimac.mm:1471 +#: platform/guiwin.cpp:1639 +msgctxt "title" +msgid "Save File" +msgstr "保存文件" + +#: platform/guigtk.cpp:1394 platform/guigtk.cpp:1427 platform/guimac.mm:1454 +#: platform/guiwin.cpp:1645 +msgctxt "title" +msgid "Open File" +msgstr "打开文件" + +#: platform/guigtk.cpp:1397 platform/guigtk.cpp:1433 +msgctxt "button" +msgid "_Cancel" +msgstr "取消(_C)" + +#: platform/guigtk.cpp:1398 platform/guigtk.cpp:1431 +msgctxt "button" +msgid "_Save" +msgstr "保存(_S)" + +#: platform/guigtk.cpp:1399 platform/guigtk.cpp:1432 +msgctxt "button" +msgid "_Open" +msgstr "打开(_O)" + +#: solvespace.cpp:167 +msgctxt "title" +msgid "Autosave Available" +msgstr "自动保存可用" + +#: solvespace.cpp:168 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "该草图有自动保存文件可用。" + +#: solvespace.cpp:169 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "是否加载自动保存文件?" + +#: solvespace.cpp:170 +msgctxt "button" +msgid "&Load autosave" +msgstr "加载(&L)" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "Do&n't Load" +msgstr "不加载(&N)" + +#: solvespace.cpp:622 +msgctxt "title" +msgid "Modified File" +msgstr "文件已修改" + +#: solvespace.cpp:624 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "是否保存您对草图\n“%s”\n的修改?" + +#: solvespace.cpp:627 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "是否保存您对新草图的修改?" + +#: solvespace.cpp:630 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "如果不保存,您的修改将会丢失。" + +#: solvespace.cpp:631 +msgctxt "button" +msgid "&Save" +msgstr "保存(&S)" + +#: solvespace.cpp:633 +msgctxt "button" +msgid "Do&n't Save" +msgstr "不保存(&N)" + +#: solvespace.cpp:654 +msgctxt "title" +msgid "(new sketch)" +msgstr "(新草图)" + +#: solvespace.cpp:661 +msgctxt "title" +msgid "Property Browser" +msgstr "属性浏览器" + +#: solvespace.cpp:724 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"当前显示约束,并将导出至刀具路径。这可能不是你想要的;点击文本窗口顶部的按钮来隐藏它们。" + +#: solvespace.cpp:812 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "无法从'%s'的文件扩展名识别文件类型,请尝试.dxf或.dwg。" + +#: solvespace.cpp:864 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "约束必须有尺寸,且不能是参考尺寸。" + +#: solvespace.cpp:868 +msgid "Bad selection for step dimension; select a constraint." +msgstr "尺寸步进选择错误,请选择约束。" + +#: solvespace.cpp:892 +msgid "The assembly does not interfere, good." +msgstr "装配无干涉,好。" + +#: solvespace.cpp:908 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"实心体模型的体积是:\n" +"\n" +" %s" + +#: solvespace.cpp:917 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"当前组的网格体积是:\n" +"\n" +" %s" + +#: solvespace.cpp:922 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"曲面已近似为三角形。这会引入误差,通常约为1%。" + +#: solvespace.cpp:937 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"所选表面的表面积为:\n" +"\n" +" %s\n" +"\n" +"曲线已近似为线性分段。这会引入误差,通常约为1%%。" + +#: solvespace.cpp:946 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "此组不包含正确形式的二维封闭区域。它可能是开放的,或不共面,或自相交。" + +#: solvespace.cpp:958 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"该组中所画区域的面积为:\n" +"\n" +" %s\n" +"\n" +"曲线已近似为线性分段。这会引入误差,通常约为1%%。" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"所选物件的总长度为:\n" +"\n" +" %s\n" +"\n" +"曲线已近似为线性分段。这会引入误差,通常约为1%%。" + +#: solvespace.cpp:984 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "周长选择错误;请选择线段、弧线、曲线。" + +#: solvespace.cpp:1000 +msgid "Bad selection for trace; select a single point." +msgstr "跟踪选择不当;请选择单个点。" + +#: solvespace.cpp:1027 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "无法写入'%s'" + +#: solvespace.cpp:1057 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "网格是自相交的(不行,无效)" + +#: solvespace.cpp:1058 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "网格不是自相交的(行,有效)" + +#: solvespace.cpp:1060 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "网格有裸露边(不行,无效)" + +#: solvespace.cpp:1061 +msgid "The mesh is watertight (okay, valid)." +msgstr "网格是水密的(行,有效)" + +#: solvespace.cpp:1064 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"该模型包含%d个表面上的%d个三角形。" + +#: solvespace.cpp:1068 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"没有问题边,好。%s" + +#: solvespace.cpp:1071 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d条边有问题,不好。%s" + +#: solvespace.cpp:1084 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"当前SolveSpace版本 %s\n" +"\n" +"更多信息请见 https://solvespace.com/\n" +"\n" +"SolveSpace是自由软件:您可以自由修改或\n" +"重新发行,但需遵循GNU通用公共许可协议\n" +"(GNU General Public License, GPL) 第3版\n" +"或后续版本。\n" +"\n" +"在法律允许范围内不包含质保,详见\n" +"https://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues等作者\n" + +#: style.cpp:185 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "无法将样式分配给派生自其他物件的物件;尝试将样式分配给此物件的父级。" + +#: style.cpp:735 +msgid "Style name cannot be empty" +msgstr "样式名称不能为空" + +#: textscreens.cpp:790 +msgid "Can't repeat fewer than 1 time." +msgstr "不能重复 1 次以下。" + +#: textscreens.cpp:794 +msgid "Can't repeat more than 999 times." +msgstr "不能重复 999 次以上。" + +#: textscreens.cpp:819 +msgid "Group name cannot be empty" +msgstr "组名不能为空" + +#: textscreens.cpp:871 +msgid "Opacity must be between zero and one." +msgstr "不透明度必须在 0 到 1 之间。" + +#: textscreens.cpp:906 +msgid "Radius cannot be zero or negative." +msgstr "半径偏移不能为负数。" + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "绘制线段" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "绘制矩形" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "绘制圆" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "绘制圆弧" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "绘制TrueType字体文本曲线" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "绘制图像文件" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "选定点处创建内切弧" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "绘制三次贝塞尔样条" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "绘制基准点" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "切换构造线" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "交点处拆分(曲)线" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "约束距离/直径/长度" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "约束角度" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "约束为水平" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "约束为竖直" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "约束为平行或相切" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "约束为垂直" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "约束点在直线/曲线/面/点上" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "约束为对称" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "约束长度/半径/角度相等" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "约束法线同向" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "补角" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "切换参考尺寸" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "新组:活动草图挤出" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "新组:活动草图旋转" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "新组:活动草图螺旋" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "新组:活动草图扫略" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "新组:步进旋转" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "新组:步进平移" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "新组:在新工作面绘制(由给定物件指定)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "新组:在三维空间绘制" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "新组:连接/装配文件" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "最接近的等轴视图" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "视图对齐至工作面" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "错误" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "消息" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "好(&O)" + +#: view.cpp:127 +msgid "Scale cannot be zero or negative." +msgstr "缩放不能为零。" + +#: view.cpp:139 view.cpp:148 +msgid "Bad format: specify x, y, z" +msgstr "格式错误:请指定 x,y,z" + +#~ msgid "" +#~ "Bad selection for on point / curve / plane constraint. This constraint " +#~ "can apply to:\n" +#~ "\n" +#~ " * two points (points coincident)\n" +#~ " * a point and a workplane (point in plane)\n" +#~ " * a point and a line segment (point on line)\n" +#~ " * a point and a circle or arc (point on curve)\n" +#~ " * a point and a plane face (point on face)\n" +#~ msgstr "" +#~ "点 / 曲线 / 平面约束的选定方法错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两点(点重合)\n" +#~ " * 一个点和一个工作面(平面中点)\n" +#~ " * 点和线段(点在线)\n" +#~ " * 一个点和一个圆或圆(曲线上的点)\n" +#~ " * 点和平面面(点在脸上)\n" + +#~ msgid "" +#~ "Bad selection for equal length / radius constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (equal length)\n" +#~ " * two line segments and two points (equal point-line distances)\n" +#~ " * a line segment and two points (equal point-line distances)\n" +#~ " * a line segment, and a point and line segment (point-line distance " +#~ "equals length)\n" +#~ " * four line segments or normals (equal angle between A,B and C,D)\n" +#~ " * three line segments or normals (equal angle between A,B and B,C)\n" +#~ " * two circles or arcs (equal radius)\n" +#~ " * a line segment and an arc (line segment length equals arc length)\n" +#~ msgstr "" +#~ "等长度/半径约束的选定方法错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段(相等长度)\n" +#~ " * 两个线段和两个点(相等的点线距离)\n" +#~ " * 线段和两个点(相等的点线距离)\n" +#~ " * 线段和点段和线段(点线距离等于长度)\n" +#~ " * 四条线段或法线(A、B 和 C、D 之间的等角)\n" +#~ " * 三条线段或法线(A、B 和 B、C 之间的等角)\n" +#~ " * 两个圆或圆(相等半径)\n" +#~ " * 线段和圆弧(线段长度等于弧长)\n" + +#~ msgid "" +#~ "Bad selection for horizontal / vertical constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two points\n" +#~ " * a line segment\n" +#~ msgstr "" +#~ "水平/竖直约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ " * 两点\n" +#~ " * 线段\n" + +#~ msgid "" +#~ "Bad selection for angle constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "角度约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" +#~ " * 线段和法线\n" +#~ " * 两个法线\n" + +#~ msgid "" +#~ "Bad selection for parallel / tangent constraint. This constraint can " +#~ "apply to:\n" +#~ "\n" +#~ " * two line segments (parallel)\n" +#~ " * a line segment and a normal (parallel)\n" +#~ " * two normals (parallel)\n" +#~ " * two line segments, arcs, or beziers, that share an endpoint " +#~ "(tangent)\n" +#~ msgstr "" +#~ "平行/切线约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两条线段(平行)\n" +#~ " * 线段和法线(平行)\n" +#~ " * 两个法线(平行)\n" +#~ " * 有共同端点的两条线段、弧线或贝塞尔(切线)\n" + +#~ msgid "" +#~ "Bad selection for perpendicular constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ " * a line segment and a normal\n" +#~ " * two normals\n" +#~ msgstr "" +#~ "垂直约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" +#~ " * 线段和法线\n" +#~ " * 两个法线\n" + +#~ msgid "A&ngle" +#~ msgstr "角度(&A)" + +#~ msgid "E&qual Length / Radius / Angle" +#~ msgstr "等于/长度/半径/角度(&Q)" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "长度比例约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "长度差异约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "长度比例(&T)" + +#~ msgid "Length Diff&erence" +#~ msgstr "长度偏差(&E)" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "在新工作面内绘图选择失败,该组可以使用:\n" +#~ "\n" +#~ " * 一个点(通过该点,正交至坐标轴)\n" +#~ " * 一个点和二个线段(通过点,绘制平行线至线段)\n" +#~ " * 一个工作面(复制工作面)\n" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D对象文件" diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.frag new file mode 100644 index 00000000..2d2e8aca --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.frag @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Edge rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +const float feather = 0.5; + +uniform vec4 color; +uniform float pixel; +uniform float width; +uniform float patternLen; +uniform float patternScale; +uniform sampler2D pattern; + +varying vec3 fragLoc; + +void main() { + // lookup distance texture + vec4 v = texture2D(pattern, vec2(fragLoc.z / patternScale, 0.0)); + + // decode distance value + float val = dot(v, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 160581375.0)); + + // calculate cap + float dist = length(vec2(val * patternScale / (patternLen * width) + abs(fragLoc.x), fragLoc.y)); + + // perform antialiasing + float k = smoothstep(1.0 - 2.0 * feather * pixel / (width + feather * pixel), 1.0, abs(dist)); + + // perform alpha-test + if(k == 1.0) discard; + + // write resulting color + gl_FragColor = vec4(color.rgb, color.a * (1.0 - k)); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.vert new file mode 100644 index 00000000..3c5af3b2 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/edge.vert @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Edge rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +const float feather = 0.5; + +attribute vec3 pos; +attribute vec3 loc; +attribute vec3 tgt; + +uniform mat4 modelview; +uniform mat4 projection; +uniform float width; +uniform float pixel; + +varying vec3 fragLoc; + +void main() { + // get camera direction from modelview matrix + vec3 dir = vec3(modelview[0].z, modelview[1].z, modelview[2].z); + + // calculate line contour extension basis for constant width and caps + vec3 norm = normalize(cross(tgt, dir)); + norm = normalize(norm - dir * dot(dir, norm)); + vec3 perp = normalize(cross(dir, norm)); + + // calculate line extension width considering antialiasing + float ext = width + feather * pixel; + + // extend line contour + vec3 vertex = pos; + vertex += ext * loc.x * normalize(perp); + vertex += ext * loc.y * normalize(norm); + + // write fragment location for calculating caps and antialiasing + fragLoc = loc; + + // transform resulting vertex with modelview and projection matrices + gl_Position = projection * modelview * vec4(vertex, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.frag new file mode 100644 index 00000000..1e7a74b7 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.frag @@ -0,0 +1,12 @@ +//----------------------------------------------------------------------------- +// Indexed Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +uniform vec4 color; +uniform sampler2D texture_; + +void main() { + if(texture2D(texture_, gl_FragCoord.xy / 32.0).a < 0.5) discard; + gl_FragColor = color; +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.vert new file mode 100644 index 00000000..5e3e59aa --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh.vert @@ -0,0 +1,13 @@ +//----------------------------------------------------------------------------- +// Indexed Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +attribute vec3 pos; + +uniform mat4 modelview; +uniform mat4 projection; + +void main() { + gl_Position = projection * modelview * vec4(pos, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.frag new file mode 100644 index 00000000..db165e16 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.frag @@ -0,0 +1,15 @@ +//----------------------------------------------------------------------------- +// Point rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +const float feather = 0.5; + +uniform vec4 color; +uniform float pixel; +uniform float width; + +void main() { + // Rectangular points + gl_FragColor = color; +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.vert new file mode 100644 index 00000000..07aff1b1 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_point.vert @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Point rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +const float feather = 0.5; + +attribute vec3 pos; +attribute vec2 loc; + +uniform mat4 modelview; +uniform mat4 projection; +uniform float width; +uniform float pixel; + +void main() { + // get camera vectors from modelview matrix + vec3 u = vec3(modelview[0].x, modelview[1].x, modelview[2].x); + vec3 v = vec3(modelview[0].y, modelview[1].y, modelview[2].y); + + // calculate point contour extension basis for constant width and caps + + // calculate point extension width considering antialiasing + float ext = width + feather * pixel; + + // extend point contour + vec3 vertex = pos; + vertex += ext * loc.x * normalize(u); + vertex += ext * loc.y * normalize(v); + + // transform resulting vertex with modelview and projection matrices + gl_Position = projection * modelview * vec4(vertex, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.frag new file mode 100644 index 00000000..d3b32355 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.frag @@ -0,0 +1,15 @@ +//----------------------------------------------------------------------------- +// Indexed Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +uniform vec4 color; +uniform sampler2D texture_; + +varying vec2 fragTex; + +void main() { + vec4 texColor = texture2D(texture_, fragTex); + if(texColor.a == 0.0) discard; + gl_FragColor = texColor * color; +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.vert new file mode 100644 index 00000000..e048759d --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_tex.vert @@ -0,0 +1,17 @@ +//----------------------------------------------------------------------------- +// Indexed Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +attribute vec3 pos; +attribute vec2 tex; + +uniform mat4 modelview; +uniform mat4 projection; + +varying vec2 fragTex; + +void main() { + fragTex = tex; + gl_Position = projection * modelview * vec4(pos, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_texa.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_texa.frag new file mode 100644 index 00000000..89a124c4 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/imesh_texa.frag @@ -0,0 +1,13 @@ +//----------------------------------------------------------------------------- +// Indexed Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +uniform vec4 color; +uniform sampler2D texture_; + +varying vec2 fragTex; + +void main() { + gl_FragColor = vec4(color.rgb, color.a * texture2D(texture_, fragTex).TEX_ALPHA); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.frag new file mode 100644 index 00000000..8cb32c23 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.frag @@ -0,0 +1,26 @@ +//----------------------------------------------------------------------------- +// Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +uniform vec3 lightDir0; +uniform vec3 lightDir1; +uniform float lightInt0; +uniform float lightInt1; +uniform float ambient; + +varying vec3 fragNormal; +varying vec4 fragColor; + +void main() { + vec3 result = fragColor.xyz * ambient; + vec3 normal = normalize(fragNormal); + + float light0 = clamp(dot(lightDir0, normal), 0.0, 1.0) * lightInt0 * (1.0 - ambient); + result += fragColor.rgb * light0; + + float light1 = clamp(dot(lightDir1, normal), 0.0, 1.0) * lightInt1 * (1.0 - ambient); + result += fragColor.rgb * light1; + + gl_FragColor = vec4(result, fragColor.a); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.vert new file mode 100644 index 00000000..c310ffc1 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh.vert @@ -0,0 +1,21 @@ +//----------------------------------------------------------------------------- +// Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +attribute vec3 pos; +attribute vec3 nor; +attribute vec4 col; + +uniform mat4 modelview; +uniform mat4 projection; + +varying vec3 fragNormal; +varying vec4 fragColor; + +void main() { + fragNormal = vec3(modelview * vec4(nor, 0.0)); + fragColor = col; + + gl_Position = projection * modelview * vec4(pos, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.frag b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.frag new file mode 100644 index 00000000..c8b3d37b --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.frag @@ -0,0 +1,12 @@ +//----------------------------------------------------------------------------- +// Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +uniform vec4 color; +uniform sampler2D texture_; + +void main() { + if(texture2D(texture_, gl_FragCoord.xy / 32.0).TEX_ALPHA < 0.5) discard; + gl_FragColor = color; +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.vert new file mode 100644 index 00000000..935efa64 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/mesh_fill.vert @@ -0,0 +1,13 @@ +//----------------------------------------------------------------------------- +// Mesh rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +attribute vec3 pos; + +uniform mat4 modelview; +uniform mat4 projection; + +void main() { + gl_Position = projection * modelview * vec4(pos, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/outline.vert b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/outline.vert new file mode 100644 index 00000000..7683a140 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/shaders/outline.vert @@ -0,0 +1,60 @@ +//----------------------------------------------------------------------------- +// Outline rendering shader +// +// Copyright 2016 Aleksey Egorov +//----------------------------------------------------------------------------- +const int EMPHASIZED_AND_CONTOUR = 0; +const int EMPHASIZED_WITHOUT_CONTOUR = 1; +const int CONTOUR_ONLY = 2; + +const float feather = 0.5; + +attribute vec3 pos; +attribute vec4 loc; +attribute vec3 tgt; +attribute vec3 nol; +attribute vec3 nor; + +uniform mat4 modelview; +uniform mat4 projection; +uniform float width; +uniform float pixel; +uniform int mode; + +varying vec3 fragLoc; + +void main() { + // get camera direction from modelview matrix + vec3 dir = vec3(modelview[0].z, modelview[1].z, modelview[2].z); + + // perform outline visibility test + float ldot = dot(nol, dir); + float rdot = dot(nor, dir); + + bool isOutline = (ldot > -1e-6) == (rdot < 1e-6) || + (rdot > -1e-6) == (ldot < 1e-6); + bool isTagged = loc.w > 0.5; + + float visible = float((mode == CONTOUR_ONLY && isOutline) || + (mode == EMPHASIZED_AND_CONTOUR && (isOutline || isTagged)) || + (mode == EMPHASIZED_WITHOUT_CONTOUR && isTagged && !isOutline)); + + // calculate line contour extension basis for constant width and caps + vec3 norm = normalize(cross(tgt, dir)); + norm = normalize(norm - dir * dot(dir, norm)); + vec3 perp = normalize(cross(dir, norm)); + + // calculate line extension width considering antialiasing + float ext = (width + feather * pixel) * visible; + + // extend line contour + vec3 vertex = pos; + vertex += ext * loc.x * normalize(perp); + vertex += ext * loc.y * normalize(norm); + + // write fragment location for calculating caps and antialiasing + fragLoc = vec3(loc); + + // transform resulting vertex with modelview and projection matrices + gl_Position = projection * modelview * vec4(vertex, 1.0); +} diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/SolveSpaceControls.js b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/SolveSpaceControls.js new file mode 100644 index 00000000..ca74fd52 --- /dev/null +++ b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/SolveSpaceControls.js @@ -0,0 +1,536 @@ +window.devicePixelRatio = window.devicePixelRatio || 1; + +SolvespaceCamera = function(renderWidth, renderHeight, scale, up, right, offset) { + THREE.Camera.call(this); + + this.type = 'SolvespaceCamera'; + + this.renderWidth = renderWidth; + this.renderHeight = renderHeight; + this.zoomScale = scale; /* Avoid namespace collision w/ THREE.Object.scale */ + this.up = up; + this.right = right; + this.offset = offset; + this.depthBias = 0; + + this.updateProjectionMatrix(); +}; + +SolvespaceCamera.prototype = Object.create(THREE.Camera.prototype); +SolvespaceCamera.prototype.constructor = SolvespaceCamera; +SolvespaceCamera.prototype.updateProjectionMatrix = function() { + var temp = new THREE.Matrix4(); + var offset = new THREE.Matrix4().makeTranslation(this.offset.x, this.offset.y, this.offset.z); + // Convert to right handed- do up cross right instead. + var n = new THREE.Vector3().crossVectors(this.up, this.right); + var rotate = new THREE.Matrix4().makeBasis(this.right, this.up, n); + rotate.transpose(); + /* Transpose of rotation matrix == inverse. Rotating the camera by a + basis is equivalent to rotating an object by the inverse of the + basis. To mimic Solvespace's behavior, we pan relative to the camera. + So we need to be rotated to where the camera is pointing before panning. + See: https://en.wikipedia.org/wiki/Change_of_basis#Two_dimensions */ + + /* TODO: If we want perspective, we need an additional matrix + here which will modify w for perspective divide. */ + var scale = new THREE.Matrix4().makeScale(2 * this.zoomScale / this.renderWidth, + 2 * this.zoomScale / this.renderHeight, this.zoomScale / 30000.0); + + temp.multiply(scale); + temp.multiply(rotate); + temp.multiply(offset); + + this.projectionMatrix.copy(temp); +}; + +SolvespaceCamera.prototype.NormalizeProjectionVectors = function() { + /* After rotating, up and right may no longer be orthogonal. + However, their cross product will produce the correct + rotated plane, and we can recover an orthogonal basis. */ + var n = new THREE.Vector3().crossVectors(this.right, this.up); + this.up = new THREE.Vector3().crossVectors(n, this.right); + this.right.normalize(); + this.up.normalize(); +}; + +SolvespaceCamera.prototype.rotate = function(right, up) { + var oldRight = new THREE.Vector3().copy(this.right).normalize(); + var oldUp = new THREE.Vector3().copy(this.up).normalize(); + this.up.applyAxisAngle(oldRight, up); + this.right.applyAxisAngle(oldUp, right); + this.NormalizeProjectionVectors(); +}; + +SolvespaceCamera.prototype.offsetProj = function(right, up) { + var shift = new THREE.Vector3(right * this.right.x + up * this.up.x, + right * this.right.y + up * this.up.y, + right * this.right.z + up * this.up.z); + this.offset.add(shift); +}; + +/* Calculate the offset in terms of up and right projection vectors +that will preserve the world coordinates of the current mouse position after +the zoom. */ +SolvespaceCamera.prototype.zoomTo = function(x, y, delta) { + // Get offset components in world coordinates, in terms of up/right. + var projOffsetX = this.offset.dot(this.right); + var projOffsetY = this.offset.dot(this.up); + + /* Remove offset before scaling so, that mouse position changes + proportionally to the model and independent of current offset. */ + var centerRightI = x/this.zoomScale - projOffsetX; + var centerUpI = y/this.zoomScale - projOffsetY; + var zoomFactor; + + /* Zoom 20% every 100 delta. */ + if(delta < 0) { + zoomFactor = (-delta * 0.002 + 1); + } + else if(delta > 0) { + zoomFactor = (delta * (-1.0/600.0) + 1); + } + else { + return; + } + + this.zoomScale = this.zoomScale * zoomFactor; + var centerRightF = x/this.zoomScale - projOffsetX; + var centerUpF = y/this.zoomScale - projOffsetY; + + this.offset.addScaledVector(this.right, centerRightF - centerRightI); + this.offset.addScaledVector(this.up, centerUpF - centerUpI); +}; + +SolvespaceControls = function(object, domElement) { + var _this = this; + this.object = object; + this.domElement = ( domElement !== undefined ) ? domElement : document; + + var threePan = new Hammer.Pan({event : 'threepan', pointers : 3, enable : false}); + var panAfterTap = new Hammer.Pan({event : 'panaftertap', enable : false}); + + this.touchControls = new Hammer.Manager(domElement, { + recognizers: [ + [Hammer.Pinch, { enable: true }], + [Hammer.Pan], + [Hammer.Tap], + ] + }); + + this.touchControls.add(threePan); + this.touchControls.add(panAfterTap); + + var changeEvent = { + type: 'change' + }; + var startEvent = { + type: 'start' + }; + var endEvent = { + type: 'end' + }; + + var _changed = false; + var _offsetPrev = new THREE.Vector2(0, 0); + var _offsetCur = new THREE.Vector2(0, 0); + var _rotatePrev = new THREE.Vector2(0, 0); + var _rotateCur = new THREE.Vector2(0, 0); + + // Used during touch events. + var _rotateOrig = new THREE.Vector2(0, 0); + var _offsetOrig = new THREE.Vector2(0, 0); + var _prevScale = 1.0; + + this.handleEvent = function(event) { + if (typeof this[event.type] == 'function') { + this[event.type](event); + } + } + + function mousedown(event) { + event.preventDefault(); + event.stopPropagation(); + + switch (event.button) { + case 0: + _rotateCur.set(event.screenX, + event.screenY); + _rotatePrev.copy(_rotateCur); + document.addEventListener('mousemove', mousemove_rotate, false); + document.addEventListener('mouseup', mouseup, false); + break; + case 2: + _offsetCur.set(event.screenX / window.devicePixelRatio, + event.screenY / window.devicePixelRatio); + _offsetPrev.copy(_offsetCur); + document.addEventListener('mousemove', mousemove_pan, false); + document.addEventListener('mouseup', mouseup, false); + break; + default: + break; + } + } + + function wheel( event ) { + event.preventDefault(); + /* FIXME: Width and height might not be supported universally, but + can be calculated? */ + var box = _this.domElement.getBoundingClientRect(); + object.zoomTo(event.clientX - box.width/2 - box.left, + -(event.clientY - box.height/2 - box.top), event.deltaY); + _changed = true; + } + + function mousemove_rotate(event) { + _rotateCur.set(event.screenX, + event.screenY); + var diff = new THREE.Vector2().subVectors(_rotateCur, _rotatePrev) + .multiplyScalar(1 / object.zoomScale); + object.rotate(-0.3 * Math.PI / 180 * diff.x * object.zoomScale, + -0.3 * Math.PI / 180 * diff.y * object.zoomScale); + _changed = true; + _rotatePrev.copy(_rotateCur); + } + + function mousemove_pan(event) { + _offsetCur.set(event.screenX / window.devicePixelRatio, + event.screenY / window.devicePixelRatio); + var diff = new THREE.Vector2().subVectors(_offsetCur, _offsetPrev) + .multiplyScalar(window.devicePixelRatio / object.zoomScale); + object.offsetProj(diff.x, -diff.y); + _changed = true; + _offsetPrev.copy(_offsetCur); + } + + function mouseup(event) { + /* TODO: Opera mouse gestures will intercept this event, making it + possible to have multiple mousedown events consecutively without + a corresponding mouseup (so multiple viewports can be rotated/panned + simultaneously). Disable mouse gestures for now. */ + event.preventDefault(); + event.stopPropagation(); + + switch (event.button) { + case 0: + document.removeEventListener('mousemove', mousemove_rotate); + document.removeEventListener('mouseup', mouseup); + break; + case 2: + document.removeEventListener('mousemove', mousemove_pan); + document.removeEventListener('mouseup', mouseup); + break; + } + + _this.dispatchEvent(endEvent); + } + + function pan(event) { + /* neWcur - prev does not necessarily equal (cur + diff) - prev. + Floating point is not associative. */ + var touchDiff = new THREE.Vector2(event.deltaX, event.deltaY); + _rotateCur.addVectors(_rotateOrig, touchDiff); + var incDiff = new THREE.Vector2().subVectors(_rotateCur, _rotatePrev) + .multiplyScalar(1 / object.zoomScale); + object.rotate(-0.3 * Math.PI / 180 * incDiff.x * object.zoomScale, + -0.3 * Math.PI / 180 * incDiff.y * object.zoomScale); + _changed = true; + _rotatePrev.copy(_rotateCur); + } + + function panstart(event) { + /* TODO: Dynamically enable pan function? */ + _rotateOrig.copy(_rotateCur); + } + + function pinchstart(event) { + _prevScale = event.scale; + } + + function pinch(event) { + /* FIXME: Width and height might not be supported universally, but + can be calculated? */ + var box = _this.domElement.getBoundingClientRect(); + + /* 16.6... pixels chosen heuristically... matches my touchpad. */ + if (event.scale < _prevScale) { + object.zoomTo(event.center.x - box.width/2 - box.left, + -(event.center.y - box.height/2 - box.top), 100/6.0); + _changed = true; + } else if (event.scale > _prevScale) { + object.zoomTo(event.center.x - box.width/2 - box.left, + -(event.center.y - box.height/2 - box.top), -100/6.0); + _changed = true; + } + + _prevScale = event.scale; + } + + /* A tap will enable panning/disable rotate. */ + function tap(event) { + panAfterTap.set({enable : true}); + _this.touchControls.get('pan').set({enable : false}); + } + + function panaftertap(event) { + var touchDiff = new THREE.Vector2(event.deltaX, event.deltaY); + _offsetCur.addVectors(_offsetOrig, touchDiff); + var incDiff = new THREE.Vector2().subVectors(_offsetCur, _offsetPrev) + .multiplyScalar(1 / object.zoomScale); + object.offsetProj(incDiff.x, -incDiff.y); + _changed = true; + _offsetPrev.copy(_offsetCur); + } + + function panaftertapstart(event) { + _offsetOrig.copy(_offsetCur); + } + + function panaftertapend(event) { + panAfterTap.set({enable : false}); + _this.touchControls.get('pan').set({enable : true}); + } + + function contextmenu(event) { + event.preventDefault(); + } + + this.update = function() { + if (_changed) { + _this.dispatchEvent(changeEvent); + _changed = false; + } + }; + + this.domElement.addEventListener('mousedown', mousedown, false); + this.domElement.addEventListener('wheel', wheel, false); + this.domElement.addEventListener('contextmenu', contextmenu, false); + + /* Hammer.on wraps addEventListener */ + // Rotate + this.touchControls.on('pan', pan); + this.touchControls.on('panstart', panstart); + + // Zoom + this.touchControls.on('pinch', pinch); + this.touchControls.on('pinchstart', pinchstart); + + //Pan + this.touchControls.on('tap', tap); + this.touchControls.on('panaftertapstart', panaftertapstart); + this.touchControls.on('panaftertap', panaftertap); + this.touchControls.on('panaftertapend', panaftertapend); +}; + +SolvespaceControls.prototype = Object.create(THREE.EventDispatcher.prototype); +SolvespaceControls.prototype.constructor = SolvespaceControls; + + +solvespace = function(obj, params) { + var scene, edgeScene, camera, edgeCamera, renderer; + var geometry, controls, material, mesh, edges; + var width, height, scale, offset, projRight, projUp; + var directionalLightArray = []; + var inheritedWidth = false, inheritedHeight = false; + + if (typeof params === "undefined" || !("width" in params)) { + width = window.innerWidth; + inheritedWidth = true; + } else { + width = params.width; + } + + if (typeof params === "undefined" || !("height" in params)) { + height = window.innerHeight; + inheritedHeight = true; + } else { + height = params.height; + } + + if (typeof params === "undefined" || !("scale" in params)) { + scale = 5; + } else { + scale = params.scale; + } + + if (typeof params === "undefined" || !("offset" in params)) { + offset = new THREE.Vector3(0, 0, 0); + } else { + offset = params.offset; + } + + if (typeof params === "undefined" || !("projUp" in params)) { + projUp = new THREE.Vector3(0, 1, -1); + } else { + projUp = params.projUp; + } + + if (typeof params === "undefined" || !("projRight" in params)) { + projRight = new THREE.Vector3(1, 0, -1); + } else { + projRight = params.projRight; + } + + var domElement = init(); + lightUpdate(); + render(); + return domElement; + + function init() { + scene = new THREE.Scene(); + edgeScene = new THREE.Scene(); + + camera = new SolvespaceCamera(width, height, scale, projUp, projRight, offset); + camera.NormalizeProjectionVectors(); + + mesh = createMesh(obj); + scene.add(mesh); + edges = createEdges(obj); + edgeScene.add(edges); + + for (var i = 0; i < obj.lights.d.length; i++) { + var lightColor = new THREE.Color(obj.lights.d[i].intensity, + obj.lights.d[i].intensity, obj.lights.d[i].intensity); + var directionalLight = new THREE.DirectionalLight(lightColor, 1); + directionalLight.position.set(obj.lights.d[i].direction[0], + obj.lights.d[i].direction[1], obj.lights.d[i].direction[2]); + directionalLightArray.push(directionalLight); + scene.add(directionalLight); + } + + var lightColor = new THREE.Color(obj.lights.a, obj.lights.a, obj.lights.a); + var ambientLight = new THREE.AmbientLight(lightColor.getHex()); + scene.add(ambientLight); + + renderer = new THREE.WebGLRenderer({ antialias: true}); + renderer.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio); + renderer.autoClear = false; + renderer.domElement.style = + "width: " + width + "px;" + + "height: " + height + "px;"; + + controls = new SolvespaceControls(camera, renderer.domElement); + controls.addEventListener("change", render); + controls.addEventListener("change", lightUpdate); + + if(inheritedWidth || inheritedHeight) { + window.addEventListener("resize", resize); + } + + animate(); + return renderer.domElement; + } + + function resize() { + scale = camera.zoomScale; + if(inheritedWidth) { + scale *= window.innerWidth / width; + width = window.innerWidth; + } + if(inheritedHeight) { + scale *= window.innerHeight / height; + height = window.innerHeight; + } + + camera.renderWidth = width; + camera.renderHeight = height; + camera.zoomScale = scale; + + renderer.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio); + renderer.domElement.style = + "width: " + width + "px;" + + "height: " + height + "px;"; + + render(); + } + + function animate() { + requestAnimationFrame(animate); + controls.update(); + } + + function render() { + var context = renderer.getContext(); + camera.updateProjectionMatrix(); + renderer.clear(); + + context.depthRange(0.1, 1); + renderer.render(scene, camera); + + context.depthRange(0.1-(2/60000.0), 1-(2/60000.0)); + renderer.render(edgeScene, camera); + } + + function lightUpdate() { + var changeBasis = new THREE.Matrix4(); + + // The original light positions were in camera space. + // Project them into standard space using camera's basis + // vectors (up, target, and their cross product). + var n = new THREE.Vector3().crossVectors(camera.up, camera.right); + changeBasis.makeBasis(camera.right, camera.up, n); + + for (var i = 0; i < 2; i++) { + var newLightPos = new THREE.Vector3(obj.lights.d[i].direction[0], + obj.lights.d[i].direction[1], + obj.lights.d[i].direction[2]).applyMatrix4(changeBasis); + directionalLightArray[i].position.set(newLightPos[0], + newLightPos[1], newLightPos[2]); + } + } + + function createMesh(meshObj) { + var geometry = new THREE.Geometry(); + var materialIndex = 0; + var materialList = []; + var opacitiesSeen = {}; + + for (var i = 0; i < meshObj.points.length; i++) { + geometry.vertices.push(new THREE.Vector3(meshObj.points[i][0], + meshObj.points[i][1], meshObj.points[i][2])); + } + + for (var i = 0; i < meshObj.faces.length; i++) { + var currOpacity = ((meshObj.colors[i] & 0xFF000000) >>> 24) / 255.0; + if (opacitiesSeen[currOpacity] === undefined) { + opacitiesSeen[currOpacity] = materialIndex; + materialIndex++; + materialList.push(new THREE.MeshLambertMaterial({ + vertexColors: THREE.FaceColors, + opacity: currOpacity, + transparent: true, + side: THREE.DoubleSide + })); + } + + geometry.faces.push(new THREE.Face3(meshObj.faces[i][0], + meshObj.faces[i][1], meshObj.faces[i][2], + [new THREE.Vector3(meshObj.normals[i][0][0], + meshObj.normals[i][0][1], meshObj.normals[i][0][2]), + new THREE.Vector3(meshObj.normals[i][1][0], + meshObj.normals[i][1][1], meshObj.normals[i][1][2]), + new THREE.Vector3(meshObj.normals[i][2][0], + meshObj.normals[i][2][1], meshObj.normals[i][2][2])], + new THREE.Color(meshObj.colors[i] & 0x00FFFFFF), + opacitiesSeen[currOpacity])); + } + + geometry.computeBoundingSphere(); + return new THREE.Mesh(geometry, materialList); + } + + function createEdges(meshObj) { + var geometry = new THREE.Geometry(); + var material = new THREE.LineBasicMaterial(); + + for (var i = 0; i < meshObj.edges.length; i++) { + geometry.vertices.push(new THREE.Vector3(meshObj.edges[i][0][0], + meshObj.edges[i][0][1], meshObj.edges[i][0][2]), + new THREE.Vector3(meshObj.edges[i][1][0], + meshObj.edges[i][1][1], meshObj.edges[i][1][2])); + } + + geometry.computeBoundingSphere(); + return new THREE.LineSegments(geometry, material); + } +}; + diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/hammer-2.0.8.js.gz b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/hammer-2.0.8.js.gz new file mode 100644 index 00000000..764a580f Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/hammer-2.0.8.js.gz differ diff --git a/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/three-r111.min.js.gz b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/three-r111.min.js.gz new file mode 100644 index 00000000..7e6f57f1 Binary files /dev/null and b/ToolTime_mac/bin/SolveSpace.app/Contents/Resources/threejs/three-r111.min.js.gz differ diff --git a/ToolTime_win/bin/CDemo.exe b/ToolTime_win/bin/CDemo.exe index cb081d1a..e15cf780 100755 --- a/ToolTime_win/bin/CDemo.exe +++ b/ToolTime_win/bin/CDemo.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b27779018d7f4beef9ed48bbdf844a01e593c5fa122da419e2d4030cbf8bdfcf +oid sha256:de5afcd32c3acb301f40d90cfbfd97df0d59c4c157f98f2d205719febae7c12a size 254870 diff --git a/ToolTime_win/bin/libslvs.dll b/ToolTime_win/bin/libslvs.dll index b2dcdff6..f7320c07 100755 --- a/ToolTime_win/bin/libslvs.dll +++ b/ToolTime_win/bin/libslvs.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12ea202a6973129e60347609a1394d7097c3d7e19ff8756bb1d8ca54c6c5870a -size 1251660 +oid sha256:fbb434aa139e33dd86d0440756735e606d86033339b08cc462ac195a907d0ef0 +size 1251183 diff --git a/ToolTime_win/bin/libz.dll b/ToolTime_win/bin/libz.dll index b09c196f..a5be96b0 100755 --- a/ToolTime_win/bin/libz.dll +++ b/ToolTime_win/bin/libz.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e015974a1628e33ef3a8696525741a82b157aad129e5f2a4efb99f66b53e05f +oid sha256:9fe42246a6f798c1d76d284f0f9588ec74ea74a0d4b0069e4f76e108011573d4 size 329844 diff --git a/ToolTime_win/bin/solvespace-benchmark.exe b/ToolTime_win/bin/solvespace-benchmark.exe index 84d53eb0..af4dcf49 100755 --- a/ToolTime_win/bin/solvespace-benchmark.exe +++ b/ToolTime_win/bin/solvespace-benchmark.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eda8ae4559ed5aa2c21c9f3e32d5509c04d291d8b9d6ae619e9768f29c2c28e0 -size 12056800 +oid sha256:4cba0660cad2f05de1428d8c4803669becfd91c969902135967fcc5434b5e608 +size 12024678 diff --git a/ToolTime_win/bin/solvespace-cli.exe b/ToolTime_win/bin/solvespace-cli.exe index 148f4ad6..2feeb87a 100755 --- a/ToolTime_win/bin/solvespace-cli.exe +++ b/ToolTime_win/bin/solvespace-cli.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac07e00ec9ab2fce2a17d94ced1e25933cb00baf683309aa5696a2d5b339d795 -size 12078896 +oid sha256:1ec1c9de5162eefe3dc08d7e1572790eecec0b88953fd58c556fdb1aad189bb5 +size 12046774 diff --git a/ToolTime_win/bin/solvespace-debugtool.exe b/ToolTime_win/bin/solvespace-debugtool.exe index 703d5da3..d971a1df 100755 --- a/ToolTime_win/bin/solvespace-debugtool.exe +++ b/ToolTime_win/bin/solvespace-debugtool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d54f03b2d7dfcbde153888d4686a1e81c353452c7ca79b6320cbbfcadea2dda1 -size 12065216 +oid sha256:cb8d5081821ac214b421dbf0a92ac5d8c31c61134b189c2e762f418ade5ac205 +size 12033094 diff --git a/ToolTime_win/bin/solvespace-testsuite.exe b/ToolTime_win/bin/solvespace-testsuite.exe index af8325aa..3a2cafe0 100755 --- a/ToolTime_win/bin/solvespace-testsuite.exe +++ b/ToolTime_win/bin/solvespace-testsuite.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83dca3a8332e0305264f7270bb279efabda8e107d54b586d3c4115841911eb6b -size 12364469 +oid sha256:190f35b3b6e84cdd1f988c3396e07d9460fd90ecffacac5dec683d6b6a5e0b9f +size 12332347 diff --git a/ToolTime_win/bin/solvespace.exe b/ToolTime_win/bin/solvespace.exe index 0d0dde95..eef0a62f 100755 --- a/ToolTime_win/bin/solvespace.exe +++ b/ToolTime_win/bin/solvespace.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1abfc77ab324f232c96f1d41fa3c41fc26487166a852f1e7accfb581061ce4e8 -size 15721867 +oid sha256:860fe7db58bc75c3cc432e83cbf3f208b16998649d249cca12b7312de3c43b8e +size 15689745 diff --git a/ToolTime_win/bin/solvespace_test_tooltime.exe b/ToolTime_win/bin/solvespace_test_tooltime.exe deleted file mode 100755 index 96b2588e..00000000 --- a/ToolTime_win/bin/solvespace_test_tooltime.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c59e78be341ba44fe230d1fcd5c8fa74bf45e80563ad54d0ff42d3a31c1d6e25 -size 15532790 diff --git a/asyn0c/,test,tooltime,macos b/asyn0c/,test,tooltime,macos index 841fb306..7920f5a3 100755 --- a/asyn0c/,test,tooltime,macos +++ b/asyn0c/,test,tooltime,macos @@ -25,7 +25,7 @@ elif [ "$2" = "x86_64" ]; then cd ToolTime_mac_amd64 else mkdir ToolTime_mac_int64 || true - cd ToolTine_mac_int64 + cd ToolTime_mac_int64 fi if [ "$3" = "xcode" ]; then diff --git a/asyn0c/,test,tooltime,windows b/asyn0c/,test,tooltime,windows index 597b9328..51d565c8 100755 --- a/asyn0c/,test,tooltime,windows +++ b/asyn0c/,test,tooltime,windows @@ -1,7 +1,29 @@ #!/bin/sh -xe -mkdir ToolTime_win -cd ToolTime_win +REPO_ROOT=$(CDPATH= cd -- "$(dirname "$0")/../.." && pwd) +ANGLE_DIR="$REPO_ROOT/extlib/angle" + +ensure_angle_submodule() { + if [ -f "$ANGLE_DIR/CMakeLists.txt" ]; then + return + fi + + if [ -d "$REPO_ROOT/.git" ] && command -v git >/dev/null 2>&1; then + echo "Initializing pinned ANGLE submodule for Windows build..." + git -C "$REPO_ROOT" submodule update --init extlib/angle + fi + + if [ ! -f "$ANGLE_DIR/CMakeLists.txt" ]; then + echo "Windows build requires extlib/angle at the pinned submodule revision." >&2 + echo "Run: git submodule update --init extlib/angle" >&2 + exit 1 + fi +} + +ensure_angle_submodule + +mkdir ToolTime_win_msvc +cd ToolTime_win_msvc if [ "$1" = "release" ]; then if [ "$2" = "openmp" ]; then diff --git a/asyn0c/,test,tooltime,x,ubuntu,all b/asyn0c/,test,tooltime,x,ubuntu,all new file mode 100755 index 00000000..33b12704 --- /dev/null +++ b/asyn0c/,test,tooltime,x,ubuntu,all @@ -0,0 +1,8 @@ +#!/usr/bin/env sh +set -eu + +script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" + +"${script_dir}/,test,tooltime,ubuntu" +"${script_dir}/,test,tooltime,x,ubuntu,mac" +"${script_dir}/,test,tooltime,x,ubuntu,win" diff --git a/asyn0c/,test,tooltime,x,ubuntu,mac b/asyn0c/,test,tooltime,x,ubuntu,mac old mode 100644 new mode 100755 index db7bbddc..6febf02f --- a/asyn0c/,test,tooltime,x,ubuntu,mac +++ b/asyn0c/,test,tooltime,x,ubuntu,mac @@ -8,12 +8,14 @@ set -euo pipefail # MAC_ARCH=arm64 ./asyn0c/,test,tooltime,x,ubuntu,mac # MAC_ARCH=x86_64 MACOSX_DEPLOYMENT_TARGET=11.0 ./asyn0c/,test,tooltime,x,ubuntu,mac -build_dir="ToolTine_mac" +build_dir="ToolTime_mac" build_type="Release" -repo_root="$(cd "$(dirname "$0")/../.." && pwd)" +repo_root="$(cd "$(dirname "$0")/.." && pwd)" +RSYNC_SOURCE="${RSYNC_SOURCE:-${repo_root}/}" +RSYNC_DEST="${RSYNC_DEST:-cccc@LittlePaul.z.aSyn0c.net:~/ToolTime/}" MAC_ARCH="${MAC_ARCH:-x86_64}" # x86_64 or arm64 -DARWIN_MAJOR="${DARWIN_MAJOR:-24}" # macOS 15 ~= Darwin 24 +DARWIN_VERSION="${DARWIN_VERSION:-${DARWIN_MAJOR:-24.5}}" # macOS 15 on this host => Darwin 24.5 MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET:-12.0}" OSXCROSS_ROOT="${OSXCROSS_ROOT:-}" @@ -25,10 +27,10 @@ fi case "${MAC_ARCH}" in x86_64) - TARGET_PREFIX="x86_64-apple-darwin${DARWIN_MAJOR}" + TARGET_PREFIX="x86_64-apple-darwin${DARWIN_VERSION}" ;; arm64) - TARGET_PREFIX="aarch64-apple-darwin${DARWIN_MAJOR}" + TARGET_PREFIX="aarch64-apple-darwin${DARWIN_VERSION}" ;; *) echo "Unsupported MAC_ARCH='${MAC_ARCH}'. Use x86_64 or arm64." >&2 @@ -38,11 +40,13 @@ esac CC="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-clang" CXX="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-clang++" +LD="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-ld" AR="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-ar" RANLIB="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-ranlib" STRIP="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-strip" +INSTALL_NAME_TOOL="${OSXCROSS_ROOT}/target/bin/${TARGET_PREFIX}-install_name_tool" -for tool in "${CC}" "${CXX}" "${AR}" "${RANLIB}" "${STRIP}"; do +for tool in "${CC}" "${CXX}" "${LD}" "${AR}" "${RANLIB}" "${STRIP}" "${INSTALL_NAME_TOOL}"; do if [ ! -x "${tool}" ]; then echo "Missing tool: ${tool}" >&2 echo "Check OSXCROSS_ROOT, DARWIN_MAJOR, and your osxcross build." >&2 @@ -55,6 +59,8 @@ if [ -z "${SDK_PATH}" ]; then SDK_PATH="$(ls -d "${OSXCROSS_ROOT}"/target/SDK/MacOSX*.sdk 2>/dev/null | sort -V | tail -n1 || true)" fi +export PATH="${OSXCROSS_ROOT}/target/bin:${PATH}" + if [ -z "${SDK_PATH}" ] || [ ! -d "${SDK_PATH}" ]; then echo "Could not locate a macOS SDK under ${OSXCROSS_ROOT}/target/SDK." >&2 echo "Set OSX_SDK_PATH explicitly if needed." >&2 @@ -77,9 +83,11 @@ set(CMAKE_SYSTEM_PROCESSOR ${MAC_ARCH}) set(CMAKE_C_COMPILER ${CC}) set(CMAKE_CXX_COMPILER ${CXX}) +set(CMAKE_LINKER ${LD}) set(CMAKE_AR ${AR}) set(CMAKE_RANLIB ${RANLIB}) set(CMAKE_STRIP ${STRIP}) +set(CMAKE_INSTALL_NAME_TOOL ${INSTALL_NAME_TOOL}) set(CMAKE_OSX_SYSROOT ${SDK_PATH}) set(CMAKE_OSX_ARCHITECTURES ${MAC_ARCH}) @@ -101,3 +109,7 @@ cmake \ cmake --build . -j"$(nproc)" echo "Cross build complete: ${build_dir}/bin" + +rsync --update --archive --delete --exclude '.git' "${RSYNC_SOURCE}" "${RSYNC_DEST}" + +echo "Sync complete: ${RSYNC_SOURCE} -> ${RSYNC_DEST}" diff --git a/asyn0c/,test,tooltime,x,ubuntu,win b/asyn0c/,test,tooltime,x,ubuntu,win index 480a7636..0c93dcdb 100755 --- a/asyn0c/,test,tooltime,x,ubuntu,win +++ b/asyn0c/,test,tooltime,x,ubuntu,win @@ -1,8 +1,41 @@ #!/usr/bin/env bash -# buildwin mkdir -mkdir ToolTime_win && cd ToolTime_win && \ +set -euo pipefail + +repo_root="$(cd "$(dirname "$0")/.." && pwd)" +angle_dir="$repo_root/extlib/angle" +build_dir="ToolTime_win" +RSYNC_SOURCE="${RSYNC_SOURCE:-${repo_root}/}" +RSYNC_DEST="${RSYNC_DEST:-sync0x@LittleJohn.z.asyn0c.net:~/ToolTime/}" + +ensure_angle_submodule() { + if [ -f "$angle_dir/CMakeLists.txt" ]; then + return + fi + + if [ -d "$repo_root/.git" ] && command -v git >/dev/null 2>&1; then + echo "Initializing pinned ANGLE submodule for Windows build..." + git -C "$repo_root" submodule update --init extlib/angle + fi + + if [ ! -f "$angle_dir/CMakeLists.txt" ]; then + echo "Windows build requires extlib/angle at the pinned submodule revision." >&2 + echo "Run: git submodule update --init extlib/angle" >&2 + exit 1 + fi +} + +ensure_angle_submodule + +mkdir -p "${build_dir}" +cd "${build_dir}" + cmake \ .. \ -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \ - -DCMAKE_BUILD_TYPE=Release && \ + -DCMAKE_BUILD_TYPE=Release + make + +rsync --update --archive --delete --exclude '.git' "${RSYNC_SOURCE}" "${RSYNC_DEST}" + +echo "Sync complete: ${RSYNC_SOURCE} -> ${RSYNC_DEST}" diff --git a/asyn0c/PreJaSON/PreJaSON.cls b/asyn0c/PreJaSON/PreJaSON.cls new file mode 100644 index 00000000..e37f2b08 --- /dev/null +++ b/asyn0c/PreJaSON/PreJaSON.cls @@ -0,0 +1,516 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "PreJaSON" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +' ======================================================================================== +' PreJaSON (Prejudice-JSON) Codec for VBA v7.1 +' Implements the Predicate Logic / Lojbanic Grammar defined by Structural Recursion. +' +' Usage: +' Dim p as New PreJaSON +' Dim json as String +' json = p.Encode(myDict) +' Set myDict = p.Decode(json) +' +' Data Mapping: +' P-JSON Object ⟦...⟧ <--> Scripting.Dictionary +' P-JSON Array ⟨...⟩ <--> VBA Collection +' P-JSON String ⌜...⌝ <--> String +' go'i / nago'i <--> Boolean +' noda <--> Null +' ======================================================================================== + +Option Explicit + +' --- Lojban Atoms --- +Private Const ATOM_TRUE As String = "go'i" +Private Const ATOM_FALSE As String = "nago'i" +Private Const ATOM_NULL As String = "noda" + +' --- Escape Control Characters (Module-level variables) --- +Private m_breakSUB As Byte ' 0x1A - ASCII SUB: next char is literal +Private m_breakESC As Byte ' 0x1B - ASCII ESC: next char literal after subtracting 0x40 + +' --- Parsing State --- +Private m_Tokens As Collection +Private m_Cursor As Long + +' ======================================================================================== +' PROPERTIES (Unicode Glyphs) +' (These must come AFTER the declarations above) +' ======================================================================================== + +' --- Structural Glyphs (Unicode) --- +Private Property Get G_OBJ_START() As String: G_OBJ_START = ChrW(&H27E6): End Property ' ⟦ +Private Property Get G_OBJ_END() As String: G_OBJ_END = ChrW(&H27E7): End Property ' ⟧ +Private Property Get G_ARR_START() As String: G_ARR_START = ChrW(&H27E8): End Property ' ⟨ +Private Property Get G_ARR_END() As String: G_ARR_END = ChrW(&H27E9): End Property ' ⟩ +Private Property Get G_AND() As String: G_AND = ChrW(&H2227): End Property ' ∧ +Private Property Get G_MAP() As String: G_MAP = ChrW(&H21A6): End Property ' ↦ +Private Property Get G_BULLET() As String: G_BULLET = ChrW(&H2022): End Property ' • +Private Property Get G_STR_START() As String: G_STR_START = ChrW(&H231C): End Property ' ⌜ +Private Property Get G_STR_END() As String: G_STR_END = ChrW(&H231D): End Property ' ⌝ + +' ======================================================================================== +' PUBLIC METHODS +' ======================================================================================== + +' Encodes a VBA Variant (Dictionary, Collection, Array, String, Number, Bool, Null) to PreJaSON +Public Function Encode(ByVal val As Variant) As String + Dim vType As Integer + vType = VarType(val) + + ' Atomic: Null + If IsNull(val) Then + Encode = ATOM_NULL + Exit Function + End If + + ' Atomic: Boolean + If vType = vbBoolean Then + If val Then Encode = ATOM_TRUE Else Encode = ATOM_FALSE + Exit Function + End If + + ' Atomic: String + If vType = vbString Then + Dim escapedStr As String + escapedStr = EscapeString(val) + Encode = G_STR_START & escapedStr & G_STR_END + Exit Function + End If + + ' Atomic: Numbers (Integer, Long, Single, Double, Currency, Decimal, Byte) + Select Case vType + Case vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDecimal, vbByte + Encode = CStr(val) + Exit Function + End Select + + ' Complex: Objects (Dictionaries) and Arrays (Collections/Arrays) + If IsObject(val) Then + If TypeName(val) = "Dictionary" Then + Encode = EncodeDictionary(val) + Exit Function + ElseIf TypeName(val) = "Collection" Then + Encode = EncodeCollection(val) + Exit Function + End If + ElseIf IsArray(val) Then + Encode = EncodeArray(val) + Exit Function + End If + + Err.Raise 5, "PreJaSON", "Unsupported type for encoding: " & TypeName(val) +End Function + +' Initializes escape control characters (call before Encode/Decode if using non-default values) +Public Sub InitializeEscapeChars(Optional subChar As Byte = &H1A, Optional escChar As Byte = &H1B) + m_breakSUB = subChar + m_breakESC = escChar +End Sub + +' Decodes a PreJaSON string into VBA types (Dictionary, Collection, Variant) +Public Function Decode(ByVal strInput As String) As Variant + ' Initialize escape chars if not already set + If m_breakSUB = 0 Then m_breakSUB = &H1A + If m_breakESC = 0 Then m_breakESC = &H1B + + Set m_Tokens = Tokenize(strInput) + m_Cursor = 1 + + If m_Tokens.Count = 0 Then + Decode = Empty + Exit Function + End If + + AssignVariant Decode, Parse() +End Function + +' ======================================================================================== +' INTERNAL ENCODERS +' Fix: Arguments changed to ByVal to accept Variants containing these objects. +' ======================================================================================== + +Private Function EncodeCollection(ByVal c As Collection) As String + If c.Count = 0 Then + EncodeCollection = G_ARR_START & G_ARR_END + Exit Function + End If + + Dim s As String, i As Long + s = G_ARR_START & " " + For i = 1 To c.Count + s = s & Encode(c(i)) + If i < c.Count Then s = s & " " & G_AND & " " + Next i + s = s & " " & G_ARR_END + EncodeCollection = s +End Function + +Private Function EncodeArray(ByVal arr As Variant) As String + Dim lb As Long, ub As Long, i As Long + lb = LBound(arr): ub = UBound(arr) + + If ub < lb Then + EncodeArray = G_ARR_START & G_ARR_END + Exit Function + End If + + Dim s As String + s = G_ARR_START & " " + For i = lb To ub + s = s & Encode(arr(i)) + If i < ub Then s = s & " " & G_AND & " " + Next i + s = s & " " & G_ARR_END + EncodeArray = s +End Function + +Private Function EncodeDictionary(ByVal d As Object) As String + If d.Count = 0 Then + EncodeDictionary = G_OBJ_START & G_OBJ_END + Exit Function + End If + + Dim s As String, k As Variant, keys As Variant, i As Long + keys = d.keys + s = G_OBJ_START & " " + + For i = LBound(keys) To UBound(keys) + k = keys(i) + Dim escapedKey As String + escapedKey = EscapeString(k) + ' Pair: •⌜key⌝ ↦ value + s = s & G_BULLET & G_STR_START & escapedKey & G_STR_END & " " & G_MAP & " " & Encode(d(k)) + If i < UBound(keys) Then s = s & " " & G_AND & " " + Next i + + s = s & " " & G_OBJ_END + EncodeDictionary = s +End Function + +' ======================================================================================== +' PARSER & TOKENIZER +' ======================================================================================== + +' Parses the current token stream recursively +Private Function Parse() As Variant + Dim tok As Object + Set tok = Peek() + + ' Atomic types + If tok("type") = "STRING" Then + Parse = Consume("STRING")("value") + Exit Function + ElseIf tok("type") = "NUMBER" Then + Parse = Consume("NUMBER")("value") + Exit Function + ElseIf tok("type") = "BOOL" Then + Parse = Consume("BOOL")("value") + Exit Function + ElseIf tok("type") = "NULL" Then + Consume "NULL" + Parse = Null + Exit Function + End If + + ' Array ⟨ ... ⟩ + If tok("type") = "GLYPH" And tok("value") = G_ARR_START Then + Set Parse = ParseArray() + Exit Function + End If + + ' Object ⟦ ... ⟧ + If tok("type") = "GLYPH" And tok("value") = G_OBJ_START Then + Set Parse = ParseObject() + Exit Function + End If + + ' Escaped characters (should not appear at top level in well-formed P-JSON) + If tok("type") = "ESCAPED_CHAR" Then + Parse = Consume("ESCAPED_CHAR")("value") + Exit Function + End If + + Err.Raise 5000, "PreJaSON", "Unexpected token: " & tok("value") +End Function + +Private Function ParseArray() As Collection + Dim res As New Collection + Consume "GLYPH", G_ARR_START + + Dim tok As Object + Set tok = Peek() + + ' Empty array check + If Not tok Is Nothing Then + If tok("type") = "GLYPH" And tok("value") = G_ARR_END Then + Consume "GLYPH", G_ARR_END + Set ParseArray = res + Exit Function + End If + End If + + Do + res.Add Parse() + Set tok = Peek() + + If tok Is Nothing Then Err.Raise 5001, "PreJaSON", "Unterminated Array" + + If tok("type") = "GLYPH" And tok("value") = G_AND Then + Consume "GLYPH", G_AND ' Consume separator + ElseIf tok("type") = "GLYPH" And tok("value") = G_ARR_END Then + Consume "GLYPH", G_ARR_END + Exit Do + Else + Err.Raise 5002, "PreJaSON", "Expected ∧ or ⟩, got " & tok("value") + End If + Loop + Set ParseArray = res +End Function + +Private Function ParseObject() As Object + ' Uses Late Binding for Dictionary to avoid Reference requirements + Dim res As Object + Set res = CreateObject("Scripting.Dictionary") + + Consume "GLYPH", G_OBJ_START + + Dim tok As Object + Set tok = Peek() + + ' Empty object check + If Not tok Is Nothing Then + If tok("type") = "GLYPH" And tok("value") = G_OBJ_END Then + Consume "GLYPH", G_OBJ_END + Set ParseObject = res + Exit Function + End If + End If + + Do + ' Expect Pair: •⌜key⌝ ↦ value + Consume "GLYPH", G_BULLET + Dim keyVal As String + keyVal = Consume("STRING")("value") + + Consume "GLYPH", G_MAP + + Dim val As Variant + AssignVariant val, Parse() + + If res.Exists(keyVal) Then res.Remove keyVal + res.Add keyVal, val + + Set tok = Peek() + If tok Is Nothing Then Err.Raise 5003, "PreJaSON", "Unterminated Object" + + If tok("type") = "GLYPH" And tok("value") = G_AND Then + Consume "GLYPH", G_AND + ElseIf tok("type") = "GLYPH" And tok("value") = G_OBJ_END Then + Consume "GLYPH", G_OBJ_END + Exit Do + Else + Err.Raise 5004, "PreJaSON", "Expected ∧ or ⟧, got " & tok("value") + End If + Loop + Set ParseObject = res +End Function + +' --- Tokenizer --- +Private Function Tokenize(ByVal inputStr As String) As Collection + Dim col As New Collection + Dim i As Long, L As Long + Dim c As String, charCode As Long + + L = Len(inputStr) + i = 1 + + Do While i <= L + c = Mid(inputStr, i, 1) + charCode = AscW(c) + + ' Skip Whitespace + If c = " " Or c = vbTab Or c = vbCr Or c = vbLf Then + i = i + 1 + ' Handle SUB escape (next char is literal) + ElseIf charCode = m_breakSUB Then + i = i + 1 + If i > L Then Err.Raise 5009, "PreJaSON", "Unexpected end of input after SUB escape" + Dim escapedChar As String + escapedChar = Mid(inputStr, i, 1) + If IsGlyph(escapedChar) Then + col.Add CreateToken("ESCAPED_GLYPH", escapedChar) + Else + col.Add CreateToken("ESCAPED_CHAR", escapedChar) + End If + i = i + 1 + ' Handle ESC escape (next char literal after subtracting 0x40) + ElseIf charCode = m_breakESC Then + i = i + 1 + If i > L Then Err.Raise 5010, "PreJaSON", "Unexpected end of input after ESC escape" + Dim nextEscChar As String + nextEscChar = Mid(inputStr, i, 1) + Dim unescapedCode As Long + unescapedCode = AscW(nextEscChar) - &H40 + col.Add CreateToken("ESCAPED_CHAR", ChrW(unescapedCode)) + i = i + 1 + ' Structural Glyphs + ElseIf IsGlyph(c) Then + ' If String Start, read until End (handling escapes) + If c = G_STR_START Then + Dim strVal As String + strVal = "" + i = i + 1 + Do While i <= L + Dim curr As String + curr = Mid(inputStr, i, 1) + Dim currCode As Long + currCode = AscW(curr) + + ' Handle SUB escape within string + If currCode = m_breakSUB Then + i = i + 1 + If i > L Then Err.Raise 5011, "PreJaSON", "Unterminated string (SUB at end)" + strVal = strVal & Mid(inputStr, i, 1) + i = i + 1 + ' Handle ESC escape within string + ElseIf currCode = m_breakESC Then + i = i + 1 + If i > L Then Err.Raise 5012, "PreJaSON", "Unterminated string (ESC at end)" + Dim nextCurr As String + nextCurr = Mid(inputStr, i, 1) + Dim unescCurrCode As Long + unescCurrCode = AscW(nextCurr) - &H40 + strVal = strVal & ChrW(unescCurrCode) + i = i + 1 + ' String end marker + ElseIf curr = G_STR_END Then + Exit Do + Else + strVal = strVal & curr + i = i + 1 + End If + Loop + If i > L Then Err.Raise 5013, "PreJaSON", "Unterminated Gödel string literal" + col.Add CreateToken("STRING", strVal) + i = i + 1 + Else + col.Add CreateToken("GLYPH", c) + i = i + 1 + End If + Else + ' Atoms (Lojban / Numbers) + Dim buffer As String + buffer = "" + Do While i <= L + c = Mid(inputStr, i, 1) + charCode = AscW(c) + If c = " " Or c = vbTab Or c = vbCr Or c = vbLf Or IsGlyph(c) Or charCode = m_breakSUB Or charCode = m_breakESC Then Exit Do + buffer = buffer & c + i = i + 1 + Loop + + If buffer = ATOM_TRUE Then + col.Add CreateToken("BOOL", True) + ElseIf buffer = ATOM_FALSE Then + col.Add CreateToken("BOOL", False) + ElseIf buffer = ATOM_NULL Then + col.Add CreateToken("NULL", Null) + ElseIf IsNumeric(buffer) Then + col.Add CreateToken("NUMBER", val(buffer)) + Else + ' Unknown token, treat as raw text or error? + ' For now, assume error in strict P-JSON + Err.Raise 5005, "PreJaSON", "Unknown Token: " & buffer + End If + End If + Loop + + Set Tokenize = col +End Function + +' --- Helper Methods --- + +Private Function IsGlyph(c As String) As Boolean + IsGlyph = (c = G_OBJ_START Or c = G_OBJ_END Or c = G_ARR_START Or c = G_ARR_END Or _ + c = G_AND Or c = G_MAP Or c = G_BULLET Or c = G_STR_START Or c = G_STR_END) +End Function + +Private Function CreateToken(sType As String, vVal As Variant) As Object + Dim d As Object + Set d = CreateObject("Scripting.Dictionary") + d.Add "type", sType + d.Add "value", vVal + Set CreateToken = d +End Function + +Private Function Peek() As Object + If m_Cursor > m_Tokens.Count Then + Set Peek = Nothing + Else + Set Peek = m_Tokens(m_Cursor) + End If +End Function + +Private Function Consume(Optional expectedType As String = "", Optional expectedVal As String = "") As Object + Dim t As Object + Set t = Peek() + If t Is Nothing Then Err.Raise 5006, "PreJaSON", "Unexpected End of Stream" + + If expectedType <> "" Then + If t("type") <> expectedType Then Err.Raise 5007, "PreJaSON", "Expected " & expectedType & ", got " & t("type") + End If + + If expectedVal <> "" Then + If t("value") <> expectedVal Then Err.Raise 5008, "PreJaSON", "Expected " & expectedVal & ", got " & t("value") + End If + + m_Cursor = m_Cursor + 1 + Set Consume = t +End Function + +' Escapes reserved glyphs and control characters using SUB prefix +Private Function EscapeString(ByVal str As String) As String + Dim result As String + Dim i As Long, L As Long + Dim c As String, charCode As Long + + L = Len(str) + result = "" + + For i = 1 To L + c = Mid(str, i, 1) + charCode = AscW(c) + + ' Escape reserved glyphs and control characters with SUB + If IsGlyph(c) Or charCode = m_breakSUB Or charCode = m_breakESC Then + result = result & ChrW(m_breakSUB) & c + Else + result = result & c + End If + Next i + + EscapeString = result +End Function + +' Helper to assign Variant return types cleanly +Private Sub AssignVariant(ByRef dest As Variant, ByVal src As Variant) + If IsObject(src) Then + Set dest = src + Else + Let dest = src + End If +End Sub + + + + + + diff --git a/asyn0c/PreJaSON/PreJaSON.js b/asyn0c/PreJaSON/PreJaSON.js new file mode 100755 index 00000000..ff3abe7b --- /dev/null +++ b/asyn0c/PreJaSON/PreJaSON.js @@ -0,0 +1,383 @@ +/** + * P-JSON (Predicate-JSON) Codec + * Implements the grammar defined by structural recursion. + * * Glyphs: + * ⟦ (\u27E6) Object Start + * ⟧ (\u27E7) Object End + * ⟨ (\u27E8) Array Start + * ⟩ (\u27E9) Array End + * ∧ (\u2227) Conjunction (Separator) + * ↦ (\u21A6) Mapping (Key-Value) + * • (\u2022) Symbol Prefix + * ⌜ (\u231C) String Start (Gödel Quote) + * ⌝ (\u231D) String End (Gödel Quote) + */ + +const GLYPHS = { + OBJ_START: '\u27E6', // ⟦ + OBJ_END: '\u27E7', // ⟧ + ARR_START: '\u27E8', // ⟨ + ARR_END: '\u27E9', // ⟩ + AND: '\u2227', // ∧ + MAP: '\u21A6', // ↦ + BULLET: '\u2022', // • + STR_START: '\u231C', // ⌜ + STR_END: '\u231D' // ⌝ +}; + +let breakSUB = 0x1A; // ASCII SUB (Substitute): next char is literal +let breakESC = 0x1B; // ASCII ESC (Escape): next char literal after subtracting 0x40 + +const ATOMS = { + TRUE: "go'i", + FALSE: "nago'i", + NULL: "noda" +}; + +class PJSON { + + /** + * Encodes a JavaScript Object/Value into P-JSON format. + * @param {any} x + * @returns {string} + */ + static encode(x) { + // Atomic: Null + if (x === null) return ATOMS.NULL; + + // Atomic: Booleans + if (typeof x === 'boolean') return x ? ATOMS.TRUE : ATOMS.FALSE; + + // Atomic: Numbers + if (typeof x === 'number') return String(x); + + // Atomic: Strings + if (typeof x === 'string') { + const escaped = PJSON.escapeString(x); + return `${GLYPHS.STR_START}${escaped}${GLYPHS.STR_END}`; + } + + // Sequence (Array) + if (Array.isArray(x)) { + if (x.length === 0) return `${GLYPHS.ARR_START}${GLYPHS.ARR_END}`; + const elements = x.map(v => PJSON.encode(v)); + return `${GLYPHS.ARR_START} ${elements.join(` ${GLYPHS.AND} `)} ${GLYPHS.ARR_END}`; + } + + // Hashtable (Object) + if (typeof x === 'object') { + const keys = Object.keys(x); + if (keys.length === 0) return `${GLYPHS.OBJ_START}${GLYPHS.OBJ_END}`; + + const pairs = keys.map(k => { + const escapedKey = PJSON.escapeString(k); + const encodedKey = `${GLYPHS.STR_START}${escapedKey}${GLYPHS.STR_END}`; + const encodedVal = PJSON.encode(x[k]); + return `${GLYPHS.BULLET}${encodedKey} ${GLYPHS.MAP} ${encodedVal}`; + }); + + return `${GLYPHS.OBJ_START} ${pairs.join(` ${GLYPHS.AND} `)} ${GLYPHS.OBJ_END}`; + } + + throw new Error(`Unsupported type for P-JSON encoding: ${typeof x}`); + } + + /** + * Escapes reserved glyphs and control characters in a string using SUB prefix. + * @param {string} str + * @returns {string} + */ + static escapeString(str) { + const reservedChars = Object.values(GLYPHS); + let result = ""; + + for (const char of str) { + if (reservedChars.includes(char) || char.charCodeAt(0) === breakSUB || char.charCodeAt(0) === breakESC) { + result += String.fromCharCode(breakSUB) + char; + } else { + result += char; + } + } + + return result; + } + + /** + * Decodes a P-JSON string back into a JavaScript Object/Value. + * @param {string} str + * @returns {any} + */ + static decode(str) { + const tokens = PJSON.tokenize(str); + const parser = new Parser(tokens); + return parser.parse(); + } + + /** + * Generator that yields tokens from the input string. + * @param {string} input + */ + static *tokenize(input) { + let i = 0; + const length = input.length; + + while (i < length) { + const char = input[i]; + const charCode = char.charCodeAt(0); + + // Skip whitespace + if (/\s/.test(char)) { + i++; + continue; + } + + // Handle escape sequences + if (charCode === breakSUB) { + // SUB: next character is literal + i++; + if (i >= length) throw new Error("Unexpected end of input after SUB escape"); + const escapedChar = input[i]; + // Return as a GLYPH if it's normally a glyph, otherwise as part of context + if (Object.values(GLYPHS).includes(escapedChar)) { + yield { type: 'ESCAPED_GLYPH', value: escapedChar }; + } else { + yield { type: 'ESCAPED_CHAR', value: escapedChar }; + } + i++; + continue; + } + + if (charCode === breakESC) { + // ESC: next character is literal after subtracting 0x40 + i++; + if (i >= length) throw new Error("Unexpected end of input after ESC escape"); + const nextChar = input[i]; + const nextCode = nextChar.charCodeAt(0); + const unescapedCode = nextCode - 0x40; + const unescapedChar = String.fromCharCode(unescapedCode); + yield { type: 'ESCAPED_CHAR', value: unescapedChar }; + i++; + continue; + } + + // Structural Glyphs + if (Object.values(GLYPHS).includes(char)) { + // If it's a String Start, consume until String End (handling escapes) + if (char === GLYPHS.STR_START) { + let val = ""; + i++; // Skip start quote + while (i < length) { + const curr = input[i]; + const currCode = curr.charCodeAt(0); + + // Handle SUB escape within string + if (currCode === breakSUB) { + i++; + if (i >= length) throw new Error("Unterminated Gödel string literal (SUB at end)"); + val += input[i]; + i++; + continue; + } + + // Handle ESC escape within string + if (currCode === breakESC) { + i++; + if (i >= length) throw new Error("Unterminated Gödel string literal (ESC at end)"); + const nextCurr = input[i]; + const nextCurrCode = nextCurr.charCodeAt(0); + const unescapedCode = nextCurrCode - 0x40; + val += String.fromCharCode(unescapedCode); + i++; + continue; + } + + // String end marker + if (curr === GLYPHS.STR_END) { + break; + } + + val += curr; + i++; + } + if (i >= length) throw new Error("Unterminated Gödel string literal"); + i++; // Skip end quote + yield { type: 'STRING', value: val }; + } else { + yield { type: 'GLYPH', value: char }; + i++; + } + continue; + } + + // Lojban Atoms & Numbers + // We read until we hit whitespace or a glyph + let buffer = ""; + while (i < length) { + const peek = input[i]; + const peekCode = peek.charCodeAt(0); + if (/\s/.test(peek) || Object.values(GLYPHS).includes(peek) || peekCode === breakSUB || peekCode === breakESC) { + break; + } + buffer += peek; + i++; + } + + if (buffer === ATOMS.TRUE) yield { type: 'BOOL', value: true }; + else if (buffer === ATOMS.FALSE) yield { type: 'BOOL', value: false }; + else if (buffer === ATOMS.NULL) yield { type: 'NULL', value: null }; + else if (!isNaN(Number(buffer))) yield { type: 'NUMBER', value: Number(buffer) }; + else throw new Error(`Unexpected token: ${buffer}`); + } + } +} + +/** + * Recursive Descent Parser Helper + */ +class Parser { + constructor(tokenGenerator) { + this.tokens = tokenGenerator; + this.current = this.tokens.next(); + } + + peek() { + return this.current; + } + + consume(expectedType = null, expectedValue = null) { + const token = this.current; + if (token.done) throw new Error("Unexpected end of input"); + + if (expectedType && token.value.type !== expectedType) { + throw new Error(`Expected type ${expectedType}, got ${token.value.type}`); + } + if (expectedValue && token.value.value !== expectedValue) { + throw new Error(`Expected value '${expectedValue}', got '${token.value.value}'`); + } + + this.current = this.tokens.next(); + return token.value; + } + + parse() { + const token = this.peek(); + if (token.done) throw new Error("Unexpected end of input"); + + const t = token.value; + + // Atomic: Strings, Numbers, Bools, Null + if (t.type === 'STRING') return this.consume().value; + if (t.type === 'NUMBER') return this.consume().value; + if (t.type === 'BOOL') return this.consume().value; + if (t.type === 'NULL') { this.consume(); return null; } + if (t.type === 'ESCAPED_CHAR') return this.consume().value; + + // Sequence: Array ⟨ ... ⟩ + if (t.type === 'GLYPH' && t.value === GLYPHS.ARR_START) { + return this.parseArray(); + } + + // Hashtable: Object ⟦ ... ⟧ + if (t.type === 'GLYPH' && t.value === GLYPHS.OBJ_START) { + return this.parseObject(); + } + + throw new Error(`Unexpected token at start of expression: ${JSON.stringify(t)}`); + } + + parseArray() { + this.consume('GLYPH', GLYPHS.ARR_START); + const result = []; + + // Check for empty array + let next = this.peek(); + if (!next.done && next.value.type === 'GLYPH' && next.value.value === GLYPHS.ARR_END) { + this.consume(); + return result; + } + + // Element Loop + while (true) { + result.push(this.parse()); + + next = this.peek(); + if (next.done) throw new Error("Unterminated Array"); + + if (next.value.type === 'GLYPH' && next.value.value === GLYPHS.AND) { + this.consume(); // Consume AND separator + continue; + } else if (next.value.type === 'GLYPH' && next.value.value === GLYPHS.ARR_END) { + this.consume(); // Consume End Bracket + break; + } else { + throw new Error(`Expected ∧ or ⟩ in array, got ${next.value.value}`); + } + } + return result; + } + + parseObject() { + this.consume('GLYPH', GLYPHS.OBJ_START); + const result = {}; + + // Check for empty object + let next = this.peek(); + if (!next.done && next.value.type === 'GLYPH' && next.value.value === GLYPHS.OBJ_END) { + this.consume(); + return result; + } + + // Pair Loop + while (true) { + // Pair structure: •⌜key⌝ ↦ value + this.consume('GLYPH', GLYPHS.BULLET); + const keyToken = this.consume('STRING'); + this.consume('GLYPH', GLYPHS.MAP); + const value = this.parse(); + + result[keyToken.value] = value; + + next = this.peek(); + if (next.done) throw new Error("Unterminated Object"); + + if (next.value.type === 'GLYPH' && next.value.value === GLYPHS.AND) { + this.consume(); // Consume AND separator + continue; + } else if (next.value.type === 'GLYPH' && next.value.value === GLYPHS.OBJ_END) { + this.consume(); // Consume End Bracket + break; + } else { + throw new Error(`Expected ∧ or ⟧ in object, got ${next.value.value}`); + } + } + return result; + } +} + +// --- Usage Example --- + +const data = { + "system": "Lazarus", + "ide_ready": true, + "remote_deploy": false, + "error_log": null, + "parameters": [1.0, 1.5, 2025], + "config": { + "host": "127.0.0.1", + "port": 8080 + } +}; + +console.log("--- Original Data ---"); +console.log(JSON.stringify(data, null, 2)); + +console.log("\n--- Encoded P-JSON ---"); +const encoded = PJSON.encode(data); +console.log(encoded); + +console.log("\n--- Decoded Data ---"); +const decoded = PJSON.decode(encoded); +console.log(JSON.stringify(decoded, null, 2)); + +// Export for module usage +module.exports = { PJSON }; diff --git a/asyn0c/PreJaSON/PreJaSON.md b/asyn0c/PreJaSON/PreJaSON.md new file mode 100644 index 00000000..d329eebb --- /dev/null +++ b/asyn0c/PreJaSON/PreJaSON.md @@ -0,0 +1,115 @@ +# PreJaSON (Predicate-JSON / Prejudice-JSON) + +A Unicode-structural data format with JSON-like recursive semantics and explicit atoms. + +## Purpose + +PreJaSON keeps the JSON data model (objects, arrays, strings, numbers, booleans, null) but replaces common ASCII structural punctuation with Unicode glyphs that are typically neutral in shell contexts. + +This improves reliability in workflows where nested escaping layers frequently fail. + +## Structural Glyphs + +| Meaning | Glyph | Unicode | +|---|---|---| +| Object start | ⟦ | U+27E6 | +| Object end | ⟧ | U+27E7 | +| Array start | ⟨ | U+27E8 | +| Array end | ⟩ | U+27E9 | +| Pair separator | ∧ | U+2227 | +| Key-value map | ↦ | U+21A6 | +| Symbol prefix (object key marker) | • | U+2022 | +| String start | ⌜ | U+231C | +| String end | ⌝ | U+231D | + +## Atoms + +- `go'i` → `true` +- `nago'i` → `false` +- `noda` → `null` + +## Canonical Value Mapping + +- PreJaSON object `⟦ ... ⟧` ↔ dictionary / map +- PreJaSON array `⟨ ... ⟩` ↔ list / collection +- PreJaSON string `⌜ ... ⌝` ↔ string +- PreJaSON number token ↔ numeric scalar +- PreJaSON atom ↔ boolean or null + +## Core Forms + +### Object + +``` +⟦ •⌜key1⌝ ↦ value1 ∧ •⌜key2⌝ ↦ value2 ⟧ +``` + +### Array + +``` +⟨ value1 ∧ value2 ∧ value3 ⟩ +``` + +### String + +``` +⌜text⌝ +``` + +## Escaping (Current In-Band Mode) + +Two control bytes are reserved: + +- `SUB` (`0x1A`): next character is literal +- `ESC` (`0x1B`): next character literal after subtracting `0x40` + +In current implementations, `SUB` is used to prefix reserved glyphs and escape-control bytes inside strings. + +## Example + +Input object: + +```json +{ + "system": "Lazarus", + "ide_ready": true, + "remote_deploy": false, + "error_log": null, + "parameters": [1, 1.5, 2025], + "config": { + "host": "127.0.0.1", + "port": 8080 + } +} +``` + +Encoded PreJaSON: + +``` +⟦ •⌜system⌝ ↦ ⌜Lazarus⌝ ∧ •⌜ide_ready⌝ ↦ go'i ∧ •⌜remote_deploy⌝ ↦ nago'i ∧ •⌜error_log⌝ ↦ noda ∧ •⌜parameters⌝ ↦ ⟨ 1 ∧ 1.5 ∧ 2025 ⟩ ∧ •⌜config⌝ ↦ ⟦ •⌜host⌝ ↦ ⌜127.0.0.1⌝ ∧ •⌜port⌝ ↦ 8080 ⟧ ⟧ +``` + +## Implementations in This Repository + +- JavaScript codec: [asyn0c/PreJaSON/PreJaSON.js](asyn0c/PreJaSON/PreJaSON.js) +- VBA codec: [asyn0c/PreJaSON/PreJaSON.cls](asyn0c/PreJaSON/PreJaSON.cls) +- VBA test harness: [asyn0c/PreJaSON/test_50_PreJaSON.bas](asyn0c/PreJaSON/test_50_PreJaSON.bas) + +## Out-of-Band Escaping (Design Direction) + +An optional future mode can preserve payload blob length by storing substitutions outside the primary blob. + +Proposed approach (high-level): + +1. Keep primary payload in PreJaSON form without in-band growth where required. +2. Store substitution metadata in an adjacent channel (e.g., neighboring spreadsheet cell / tuple field). +3. Reconstruct literal content deterministically during decode. +4. Use a compact run-based encoding (RLE-inspired) for substitution ranges. + +This keeps the current in-band mode (`SUB`-prefix) as baseline while enabling fixed-length-sensitive workflows. + +## Notes for Tooling and API Usage + +- Use tag name `PreJaSON` when selecting format explicitly. +- PreJaSON is text-based and UTF-8 safe. +- In multi-layer command pipelines, prefer file-based handoff for large payloads and repeated command invocations. diff --git a/asyn0c/PreJaSON/test_50_PreJaSON.bas b/asyn0c/PreJaSON/test_50_PreJaSON.bas new file mode 100644 index 00000000..9b0e9ff0 --- /dev/null +++ b/asyn0c/PreJaSON/test_50_PreJaSON.bas @@ -0,0 +1,49 @@ +Attribute VB_Name = "test_50_PreJaSON" +Sub TestPreJaSON() + Dim p As New PreJaSON + Dim d As Object + Set d = CreateObject("Scripting.Dictionary") + + ' Build the data structure + d.Add "system", "Lazarus" + d.Add "ide_ready", True + d.Add "error_log", Null + + Dim config As Object + Set config = CreateObject("Scripting.Dictionary") + config.Add "host", "127.0.0.1" + config.Add "port", 8080 + d.Add "config", config + + Dim params As New Collection + params.Add 1 + params.Add 1.5 + params.Add 2025 + d.Add "parameters", params + + ' Encode + Dim encoded As String + encoded = p.Encode(d) + + ' Write to file to see the real glyphs + WriteFileUTF8 "C:\Users\Public\PreJaSON_Output.txt", encoded + + ' Decode + ' ... Dim result As Object + Set result = p.Decode(encoded) + Debug.Print "--- Decoded Check ---" + Debug.Print "System: " & result("system") + Debug.Print "Port: " & result("config")("port") + Debug.Print "Param 3: " & result("parameters")(3) +End Sub + +Sub WriteFileUTF8(filePath As String, textContent As String) + Dim stream As Object + Set stream = CreateObject("ADODB.Stream") + stream.Type = 2 ' adTypeText + stream.Charset = "utf-8" + stream.Open + stream.WriteText textContent + stream.SaveToFile filePath, 2 ' adSaveCreateOverWrite + stream.Close +End Sub diff --git a/asyn0c/export-strategy-new-convention.md b/asyn0c/export-strategy-new-convention.md new file mode 100644 index 00000000..e14ba773 --- /dev/null +++ b/asyn0c/export-strategy-new-convention.md @@ -0,0 +1,56 @@ +# Export Layer Naming — New Convention (Style Number OFF) + +## Rule + +The new convention removes style numbers from exported layer names for **both DXF and SVG**, +except when a collision occurs. + +Name construction: + +1. Start from the style's internal name. +2. Replace every non-alphanumeric character with `_`. +3. Use that sanitized token directly as the layer name. + +For system styles below `s100`, the `#def` prefix is retained and therefore sanitizes to `_def`. +Example: `#def-inactive-group` → `_def_inactive_group`. + +There is no hard-coded string translation table. + +--- + +## Collision policy (rare, explicit) + +If two styles sanitize to the same token but have different style indices, both colliding +names are rewritten to include style numbers: + +`s???_` + +where `???` is the unique style index for each colliding style. + +This is intentionally obvious and manual-follow-up friendly. + +--- + +## Examples + +| Source style | Style index | Exported DXF layer | Exported SVG layer | +|---|---:|---|---| +| `#def-active-group` | 001 | `_def_active_group` | `_def_active_group` | +| `#def-inactive-group` | 002 | `_def_inactive_group` | `_def_inactive_group` | +| `s100-chop` | 100 | `chop` | `chop` | +| `s101-fold` | 101 | `fold` | `fold` | + +Collision example: + +| Source style | Style index | Sanitized token | Final exported name | +|---|---:|---|---| +| `s120-cut line` | 120 | `cut_line` | `s120_cut_line` | +| `s121-cut-line` | 121 | `cut_line` | `s121_cut_line` | + +--- + +## Implementation notes + +- Any fixed-string system-name translations are removed. +- SVG and DXF use the same naming rule. +- The new convention is “style number OFF by default; ON only for collisions.” diff --git a/asyn0c/export-strategy-old-convention.md b/asyn0c/export-strategy-old-convention.md new file mode 100644 index 00000000..b96c2bcf --- /dev/null +++ b/asyn0c/export-strategy-old-convention.md @@ -0,0 +1,39 @@ +# Export Layer Naming — Old Convention (Style Number ON) + +## Rule + +The old convention keeps style numbers in exported layer names for **both DXF and SVG**. + +Name construction: + +1. Start from the style's internal name. +2. Replace every non-alphanumeric character with `_`. +3. Prefix with `s%03d_` (style index, zero-padded to 3 digits). + +There is no hard-coded string translation table. + +--- + +## Examples + +| Source style | Style index | Exported DXF layer | Exported SVG layer | +|---|---:|---|---| +| `#def-active-group` | 001 | `s001_def_active_group` | `s001_def_active_group` | +| `#def-inactive-group` | 002 | `s002_def_inactive_group` | `s002_def_inactive_group` | +| `s100-chop` | 100 | `s100_chop` | `s100_chop` | +| `s101-fold` | 101 | `s101_fold` | `s101_fold` | + +--- + +## Implications + +- Layer names are stable only while style indices remain stable. +- This convention preserves index visibility for workflows that prefer explicit style handles. +- Since translation-by-fixed-strings is removed, names are fully mechanical and predictable. + +--- + +## Removed legacy behavior + +Any logic that maps specific system names to hand-written aliases (for example, +`active-grp` → `active-group`) is out of scope in this convention and should be deleted. diff --git a/asyn0c/export-strategy-user-preference.md b/asyn0c/export-strategy-user-preference.md new file mode 100644 index 00000000..fa883cb3 --- /dev/null +++ b/asyn0c/export-strategy-user-preference.md @@ -0,0 +1,214 @@ +# Export Layer Naming — User Preference via Property Browser + +## Purpose and Motivation + +The export layer naming strategy must be a **persistent per-installation preference**, +not a per-file setting. The choice affects every DXF/SVG export from that workstation and +must survive application restarts. + +The preference space is intentionally reduced to **exactly two modes**: + +1. **Style number ON** (`s%03d_...`) +2. **Style number OFF** (`...`) + +No third naming mode is supported. + +--- + +## Menu Entry Placement + +The preference is exposed via a new menu entry placed **immediately after "Save As..."** +in the File menu (`graphicswin.cpp`, `Menu[]` table). A separator already exists there; +the new entry goes between "Save As..." and that separator. + +Relevant section of the `Menu[]` table (current state): + +```cpp +{ 1, N_("&Save"), Command::SAVE, C|'s', KN, mFile }, +{ 1, N_("Save &As..."), Command::SAVE_AS, C|S|'s', KN, mFile }, +{ 1, NULL, Command::NONE, 0, KN, NULL }, // ← separator +{ 1, N_("Export &Image..."), ... +``` + +New entry inserted between "Save As..." and the separator: + +```cpp +{ 1, N_("&Export Layer Names..."), Command::SVG_LAYER_NAMES, 0, KN, mFile }, +``` + +The handler in `MenuFile()` (or its equivalent switch) navigates to the new screen: + +```cpp +case Command::SVG_LAYER_NAMES: + SS.TW.GoToScreen(TextWindow::Screen::SVG_LAYER_NAMES); + SS.ScheduleShowTW(); + break; +``` + +No keyboard accelerator is needed; this is an infrequent configuration action. + +--- + +## New `Screen` Enum Value + +`src/ui.h` — `TextWindow::Screen` enum, currently ending at `TANGENT_ARC = 9`: + +```cpp +enum class Screen : uint32_t { + LIST_OF_GROUPS = 0, + GROUP_INFO = 1, + GROUP_SOLVE_INFO = 2, + CONFIGURATION = 3, + STEP_DIMENSION = 4, + LIST_OF_STYLES = 5, + STYLE_INFO = 6, + PASTE_TRANSFORMED = 7, + EDIT_VIEW = 8, + TANGENT_ARC = 9, + SVG_LAYER_NAMES = 10 // ← new +}; +``` + +The dispatch `switch` in `TextWindow::Show()` (`textwin.cpp`) gains one case: + +```cpp +case Screen::SVG_LAYER_NAMES: ShowSvgLayerNames(); break; +``` + +--- + +## Application State Field + +`src/solvespace.h` — one new `bool` alongside the existing export flags: + +```cpp +bool exportLayerNamesWithStyleNumber; // true = style number ON + // false = style number OFF +``` + +Default can be either policy choice; recommended default is `false` (style number OFF). + +--- + +## Persistence + +### Load (`SolveSpaceUI::Init`, `src/solvespace.cpp`) + +Alongside the existing `ThawBool` calls: + +```cpp +exportLayerNamesWithStyleNumber = settings->ThawBool("ExportLayerNamesWithStyleNumber", false); +``` + +### Save (`SolveSpaceUI::Exit`, `src/solvespace.cpp`) + +Alongside the existing `FreezeBool` calls: + +```cpp +settings->FreezeBool("ExportLayerNamesWithStyleNumber", exportLayerNamesWithStyleNumber); +``` + +The settings store is platform-native (registry on Windows, plist on macOS, INI-like file +on Linux/GTK) and is already abstracted behind `Platform::Settings`. No new plumbing is +required. + +--- + +## Property Browser Page — `ShowSvgLayerNames()` + +New function in `src/confscreen.cpp` (or a new `src/exportscreen.cpp` if the file becomes +large), following the exact pattern of `ShowTangentArc()`: + +```cpp +void TextWindow::ShowSvgLayerNames() { + Printf(true, "%FtEXPORT LAYER NAMING CONVENTION%E"); + + Printf(true, "%Ft layer names written to DXF and SVG%E"); + Printf(false, ""); + Printf(false, " %Fd%f%LN%s style number OFF (new)%E", + &ScreenChangeSvgLayerNames, + !SS.exportLayerNamesWithStyleNumber ? RADIO_TRUE : RADIO_FALSE); + Printf(false, "%Ba e.g. s100-chop → chop"); + Printf(false, "%Ba #def-inactive-group → _def_inactive_group"); + Printf(false, ""); + Printf(false, " %Fd%f%LO%s style number ON (old)%E", + &ScreenChangeSvgLayerNames, + SS.exportLayerNamesWithStyleNumber ? RADIO_TRUE : RADIO_FALSE); + Printf(false, "%Bd e.g. s100-chop → s100_chop"); + Printf(false, "%Bd #def-inactive-group → s002_def_inactive_group"); + + Printf(false, ""); + Printf(false, "Non-alphanumeric characters are always converted to '_'."); + Printf(false, "If style number OFF causes a collision, colliding names are"); + Printf(false, "promoted to s???_ for manual resolution."); + + Printf(false, ""); + Printf(true, "(or %Fl%Ll%fback to home screen%E)", &ScreenHome); +} +``` + +The link letters `'N'` and `'O'` (new / old) are passed to the callback via `%L`: + +```cpp +void TextWindow::ScreenChangeSvgLayerNames(int link, uint32_t v) { + SS.exportLayerNamesWithStyleNumber = (link == 'O'); + SS.GW.Invalidate(); +} +``` + +No edit control is needed — this is a binary radio choice, matching the pattern used for +`ScreenChangeCanvasSizeAuto` (fixed / auto radio pair in `ShowConfiguration()`). + +--- + +## `Command` Enum Addition + +`src/solvespace.h` or `src/ui.h` — wherever `Command` is declared, add: + +```cpp +SVG_LAYER_NAMES, +``` + +in the `File` command group, near `SAVE_AS`. + +--- + +## Name Integration (DXF + SVG) + +The flag is read at export time in shared naming logic used by both DXF and SVG: + +```cpp +static std::string SvgLayerNameForStyle(hStyle hs) { + Style *s = Style::Get(hs); + + std::string name = SanitizeStyleName(s->name); // non-alnum -> '_' + + if(SS.exportLayerNamesWithStyleNumber) { + return ssprintf("s%03x_%s", hs.v, name.c_str()); + } + + // Style number OFF by default. + // Collision handling upgrades colliding names to s???_. + return ResolveCollisionOrBare(hs, name); +} +``` + +Any fixed-string translation helpers are deleted in both paths. + +--- + +## Declaration additions summary + +| File | Addition | +|---|---| +| `src/solvespace.h` | `bool exportLayerNamesWithStyleNumber;` on `SolveSpaceUI` | +| `src/ui.h` | `Screen::SVG_LAYER_NAMES = 10` | +| `src/ui.h` | `static void ScreenChangeSvgLayerNames(int link, uint32_t v);` | +| `src/ui.h` | `void ShowSvgLayerNames();` | +| `src/graphicswin.cpp` | `Command::SVG_LAYER_NAMES` menu entry after `SAVE_AS` | +| `src/graphicswin.cpp` | `case Command::SVG_LAYER_NAMES:` in `MenuFile()` switch | +| `src/solvespace.cpp` | `ThawBool("ExportLayerNamesWithStyleNumber", false)` in `Init()` | +| `src/solvespace.cpp` | `FreezeBool("ExportLayerNamesWithStyleNumber", ...)` in `Exit()` | +| `src/confscreen.cpp` | `ShowSvgLayerNames()` and `ScreenChangeSvgLayerNames()` | +| `src/exportvector.cpp` | Shared sanitized naming logic for DXF/SVG; delete fixed-string helpers | +| `src/textwin.cpp` | `case Screen::SVG_LAYER_NAMES:` in `Show()` switch | diff --git a/asyn0c/provision-msys2-tooltime.sh b/asyn0c/provision-msys2-tooltime.sh new file mode 100755 index 00000000..38abfa0e --- /dev/null +++ b/asyn0c/provision-msys2-tooltime.sh @@ -0,0 +1,350 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ToolTime MSYS2 provisioning script +# +# Recommended usage (run in MSYS shell): +# bash asyn0c/provision-msys2-tooltime.sh +# +# Defaults: +# - ucrt64 toolchain (modern 64-bit Windows target) +# - mingw32 toolchain (32-bit target for SpaceMouse/SolveSpace integration needs) +# +# Standard out-of-source build directories: +# - ToolTime_win_ucrt64 +# - ToolTime_win_ming32 +# +# Optional targets: +# --targets ucrt64,mingw32,mingw64,clang64 +# +# After provisioning, open target shells with: +# C:/cygsys64/msys2_shell.cmd -defterm -no-start -ucrt64 -here +# C:/cygsys64/msys2_shell.cmd -defterm -no-start -mingw32 -here +# C:/cygsys64/msys2_shell.cmd -defterm -no-start -mingw64 -here +# C:/cygsys64/msys2_shell.cmd -defterm -no-start -clang64 -here +# +# Recommended build practice learned from the ToolTime experiments: +# - always configure from the MSYS layer, not from Cygwin paths +# - keep source and build trees separate +# - for link-debugging, prefer a fresh build tree because MinGW/CMake link +# graph changes are often easiest to verify only after full reconfigure +# - on this host, use clean environment launches when automating remotely, +# e.g.: +# env -i HOME=/home/ PATH=/usr/bin:/bin \ +# MSYSTEM=MINGW32 CHERE_INVOKING=1 \ +# /c/cygsys64/usr/bin/bash.exe -lc \ +# 'export PATH=/mingw32/bin:/usr/bin:/bin; cmake -S . -B ToolTime_win_ming32 -G Ninja ...' +# env -i HOME=/home/ PATH=/usr/bin:/bin \ +# MSYSTEM=UCRT64 CHERE_INVOKING=1 \ +# /c/cygsys64/usr/bin/bash.exe -lc \ +# 'export PATH=/ucrt64/bin:/usr/bin:/bin; cmake -S . -B ToolTime_win_ucrt64 -G Ninja ...' + +SCRIPT_NAME="$(basename "$0")" +DEFAULT_TARGETS="ucrt64,mingw32" +TARGETS_CSV="$DEFAULT_TARGETS" +NO_UPGRADE=0 +UPDATE_ONLY=0 + +usage() { + cat < ToolTime_win_ucrt64 + mingw32 -> ToolTime_win_ming32 + +Recommended remote automation pattern: + - start from MSYS using env -i plus explicit MSYSTEM/PATH + - configure into a fresh out-of-source directory when validating link fixes +EOF +} + +log() { + printf '\n[%s] %s\n' "$(date +%H:%M:%S)" "$*" +} + +die() { + printf '\nERROR: %s\n' "$*" >&2 + exit 1 +} + +require_cmd() { + command -v "$1" >/dev/null 2>&1 || die "Required command not found: $1" +} + +trim() { + local s="$1" + s="${s#${s%%[![:space:]]*}}" + s="${s%${s##*[![:space:]]}}" + printf '%s' "$s" +} + +split_csv_to_array() { + local csv="$1" + local -n out_ref="$2" + out_ref=() + + IFS=',' read -r -a raw <<< "$csv" + for item in "${raw[@]}"; do + item="$(trim "$item")" + [[ -z "$item" ]] && continue + out_ref+=("$item") + done +} + +validate_target() { + case "$1" in + ucrt64|mingw32|mingw64|clang64) return 0 ;; + *) return 1 ;; + esac +} + +install_pkg_group() { + local desc="$1"; shift + local pkgs=("$@") + [[ ${#pkgs[@]} -eq 0 ]] && return 0 + + log "Installing: $desc" + pacman -S --noconfirm --needed "${pkgs[@]}" +} + +upgrade_system() { + log "Refreshing package database" + pacman -Sy --noconfirm + + log "Upgrading MSYS2 system and packages (first pass)" + pacman -Syu --noconfirm || true + + # Second pass is recommended by MSYS2; if first pass upgraded runtime, + # a shell restart may be required. We still attempt the second pass. + log "Upgrading MSYS2 system and packages (second pass)" + pacman -Syu --noconfirm || true +} + +packages_for_target() { + local target="$1" + case "$target" in + ucrt64) + cat <<'EOF' +mingw-w64-ucrt-x86_64-gcc +mingw-w64-ucrt-x86_64-cmake +mingw-w64-ucrt-x86_64-ninja +mingw-w64-ucrt-x86_64-make +mingw-w64-ucrt-x86_64-pkgconf +mingw-w64-ucrt-x86_64-python +mingw-w64-ucrt-x86_64-ccache +mingw-w64-ucrt-x86_64-gdb +EOF + ;; + mingw32) + cat <<'EOF' +mingw-w64-i686-gcc +mingw-w64-i686-cmake +mingw-w64-i686-ninja +mingw-w64-i686-make +mingw-w64-i686-pkgconf +mingw-w64-i686-python +mingw-w64-i686-ccache +mingw-w64-i686-gdb +EOF + ;; + mingw64) + cat <<'EOF' +mingw-w64-x86_64-gcc +mingw-w64-x86_64-cmake +mingw-w64-x86_64-ninja +mingw-w64-x86_64-make +mingw-w64-x86_64-pkgconf +mingw-w64-x86_64-python +mingw-w64-x86_64-ccache +mingw-w64-x86_64-gdb +EOF + ;; + clang64) + cat <<'EOF' +mingw-w64-clang-x86_64-clang +mingw-w64-clang-x86_64-cmake +mingw-w64-clang-x86_64-ninja +mingw-w64-clang-x86_64-make +mingw-w64-clang-x86_64-pkgconf +mingw-w64-clang-x86_64-python +mingw-w64-clang-x86_64-ccache +mingw-w64-clang-x86_64-gdb +mingw-w64-clang-x86_64-lld +EOF + ;; + *) + die "Internal error: unsupported target '$target'" + ;; + esac +} + +build_dir_for_target() { + case "$1" in + ucrt64) printf '%s' 'ToolTime_win_ucrt64' ;; + mingw32) printf '%s' 'ToolTime_win_ming32' ;; + mingw64) printf '%s' 'ToolTime_win_mingw64' ;; + clang64) printf '%s' 'ToolTime_win_clang64' ;; + *) printf '%s' 'ToolTime_win_unknown' ;; + esac +} + +show_build_recipes() { + local -a selected_targets=("$@") + + echo + echo "Suggested out-of-source build directories and launch environment:" + for t in "${selected_targets[@]}"; do + case "$t" in + ucrt64) + echo " [ucrt64] build dir: $(build_dir_for_target "$t")" + echo " shell: MSYSTEM=UCRT64, PATH=/ucrt64/bin:/usr/bin:/bin" + ;; + mingw32) + echo " [mingw32] build dir: $(build_dir_for_target "$t")" + echo " shell: MSYSTEM=MINGW32, PATH=/mingw32/bin:/usr/bin:/bin" + ;; + mingw64) + echo " [mingw64] build dir: $(build_dir_for_target "$t")" + echo " shell: MSYSTEM=MINGW64, PATH=/mingw64/bin:/usr/bin:/bin" + ;; + clang64) + echo " [clang64] build dir: $(build_dir_for_target "$t")" + echo " shell: MSYSTEM=CLANG64, PATH=/clang64/bin:/usr/bin:/bin" + ;; + esac + done + + echo + echo "Recommended configure/build habits:" + echo " - prefer Ninja generators for reproducible logs and fast restart" + echo " - use a fresh build directory after link-graph changes" + echo " - inspect runtime DLL dependencies after a successful link" + echo " - keep required MinGW runtime DLLs next to the final .exe when testing on Windows" +} + +show_summary() { + local -a selected_targets=("$@") + + log "Provisioning summary" + echo "Targets provisioned: ${selected_targets[*]}" + + echo + echo "Suggested target shells:" + for t in "${selected_targets[@]}"; do + echo " C:/cygsys64/msys2_shell.cmd -defterm -no-start -${t} -here" + done + + echo + echo "Toolchain quick checks:" + for t in "${selected_targets[@]}"; do + case "$t" in + ucrt64) + echo " [ucrt64] /c/cygsys64/ucrt64/bin/gcc.exe --version" + ;; + mingw32) + echo " [mingw32] /c/cygsys64/mingw32/bin/gcc.exe --version" + ;; + mingw64) + echo " [mingw64] /c/cygsys64/mingw64/bin/gcc.exe --version" + ;; + clang64) + echo " [clang64] /c/cygsys64/clang64/bin/clang.exe --version" + ;; + esac + done + + show_build_recipes "${selected_targets[@]}" + + echo + echo "Note: keeping mingw32 installed is intentional for 32-bit SolveSpace/SpaceMouse workflows." +} + +main() { + while [[ $# -gt 0 ]]; do + case "$1" in + --targets) + [[ $# -lt 2 ]] && die "--targets requires a value" + TARGETS_CSV="$2" + shift 2 + ;; + --no-upgrade) + NO_UPGRADE=1 + shift + ;; + --update-only) + UPDATE_ONLY=1 + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + die "Unknown argument: $1" + ;; + esac + done + + require_cmd pacman + + # This script is designed to run from the MSYS layer; warn if not. + if [[ "${MSYSTEM:-}" != "MSYS" ]]; then + log "Warning: MSYSTEM='${MSYSTEM:-unset}'. Recommended to run from MSYS shell." + fi + + local -a selected_targets=() + split_csv_to_array "$TARGETS_CSV" selected_targets + [[ ${#selected_targets[@]} -eq 0 ]] && die "No targets selected" + + local -A seen=() + local -a dedup_targets=() + for t in "${selected_targets[@]}"; do + validate_target "$t" || die "Unsupported target '$t' (allowed: ucrt64, mingw32, mingw64, clang64)" + [[ -n "${seen[$t]:-}" ]] && continue + seen[$t]=1 + dedup_targets+=("$t") + done + selected_targets=("${dedup_targets[@]}") + + if [[ $NO_UPGRADE -eq 0 ]]; then + upgrade_system + else + log "Skipping system upgrade (--no-upgrade)" + fi + + if [[ $UPDATE_ONLY -eq 1 ]]; then + show_summary + exit 0 + fi + + # Base MSYS tools for scripting/automation. + install_pkg_group \ + "MSYS base automation tools" \ + git openssh rsync unzip zip tar patch diffutils findutils grep sed gawk perl python make + + # Install each selected target toolchain. + for target in "${selected_targets[@]}"; do + mapfile -t target_pkgs < <(packages_for_target "$target") + install_pkg_group "Target '$target' toolchain" "${target_pkgs[@]}" + done + + show_summary "${selected_targets[@]}" +} + +main "$@" diff --git a/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-darwin.md b/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-darwin.md new file mode 100644 index 00000000..901fcca7 --- /dev/null +++ b/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-darwin.md @@ -0,0 +1,209 @@ +# The Science of Cross Compilation from Ubuntu to Darwin + +Date: 2026-03-20 + +## Purpose + +This document records the practical, reproducible method used to cross-compile macOS targets from a Linux (Ubuntu/Mint) host for the ToolTime project, including host-to-host SDK transfer, toolchain bootstrapping, and pitfalls discovered during setup. + +--- + +## 1) Host Topology Used + +- **Linux build host (targeting macOS):** `node68.z.asyn0c.net` +- **macOS SDK source host:** `littlepaul.z.asyn0c.net` (`LittlePaul.local`) +- **Project repo:** `/dome/cccc/big_software/ToolTime` + +Important: always verify current shell location before installing packages or copying files: + +```sh +hostname -f +uname -a +whoami +``` + +--- + +## 2) macOS SDK Source Confirmation + +On LittlePaul, available SDKs were confirmed under Command Line Tools: + +- `/Library/Developer/CommandLineTools/SDKs/MacOSX15.2.sdk` +- `/Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk` +- `/Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk` + +Chosen SDK for Linux cross build: + +- `MacOSX15.5.sdk` + +--- + +## 3) Where SDK Lives on Linux + +Installed on node68 at: + +- `/opt/osxcross/target/SDK/MacOSX15.5.sdk` + +Observed size after copy: + +- ~`731M` + +--- + +## 4) Reliable Transfer Method (with explicit SSH user) + +To avoid auth ambiguity when using sudo/rsync+ssh, use explicit remote username: + +```sh +rsync -a --partial --progress \ + -e 'ssh -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=30 -o ServerAliveCountMax=20' \ + cccc@littlepaul.z.asyn0c.net:/Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk \ + /opt/osxcross/target/SDK/ +``` + +### Learned behavior + +- `sudo rsync ...` can change SSH trust context (root known_hosts), causing host-key prompts in root context. +- Best pattern: make destination writable by `cccc`, then run rsync as `cccc`. +- Always specify `cccc@host` explicitly for SSH-like tools. + +--- + +## 5) Linux Dependencies Required + +Installed package set (Ubuntu/Mint family): + +```sh +sudo apt-get update +sudo apt-get install -y \ + build-essential clang lld llvm cmake ninja-build git make patch \ + python3 pkg-config \ + libssl-dev libxml2-dev libzstd-dev xz-utils zlib1g-dev libbz2-dev \ + liblzma-dev libncurses-dev +``` + +Notes: + +- `libtinfo-dev` may resolve via `libncurses-dev` depending on distro release. +- A non-critical external repo signature warning was observed for Warp; main Ubuntu/Mint repos still updated and installed successfully. + +--- + +## 6) osxcross Installation & Build + +Source location: + +- `/opt/osxcross/src` + +Clone: + +```sh +git clone https://github.com/tpoechtrager/osxcross.git /opt/osxcross/src +``` + +Prepare SDK tarball (osxcross expects SDK tarballs in `tarballs/`): + +```sh +mkdir -p /opt/osxcross/src/tarballs +tar -C /opt/osxcross/target/SDK -cJf /opt/osxcross/src/tarballs/MacOSX15.5.sdk.tar.xz MacOSX15.5.sdk +``` + +Build: + +```sh +cd /opt/osxcross/src +UNATTENDED=1 TARGET_DIR=/opt/osxcross/target ./build.sh +``` + +Result: + +- Working wrappers and cctools emitted into `/opt/osxcross/target/bin` +- Generated target triple family included `*-apple-darwin24.5-*` + +Sanity checks used: + +```sh +/opt/osxcross/target/bin/x86_64-apple-darwin24.5-clang --version +/opt/osxcross/target/bin/aarch64-apple-darwin24.5-clang --version +``` + +--- + +## 7) ToolTime Cross Script Added/Updated + +Script: + +- `asyn0c/,test,tooltime,x,ubuntu,mac` + +Behavior implemented: + +- Linux -> macOS cross build via osxcross +- Build directory fixed to: `ToolTime_mac` (as requested) +- Defaults to Darwin `24.5` to match built wrappers +- Supports: + - `MAC_ARCH=x86_64|arm64` + - `DARWIN_VERSION` override (or legacy `DARWIN_MAJOR` fallback) + - `MACOSX_DEPLOYMENT_TARGET` + - `OSXCROSS_ROOT` + - `OSX_SDK_PATH` + +Safety guard implemented: + +- Refuses SDK path if it resolves inside the git repository tree. + +Why this matters: + +- Prevents accidental SDK ingestion into version control if ignore rules are changed or bypassed. + +--- + +## 8) Git Safety Rules Added + +In `.gitignore`, defensive entries were added: + +- `/sdk*/` +- `/osxcross*/` +- `/*.sdk` + +This complements the runtime script guard. + +--- + +## 9) Practical Environment Exports + +Recommended on node68 before running the cross script: + +```sh +export OSXCROSS_ROOT=/opt/osxcross +export DARWIN_VERSION=24.5 +# optional per build +# export MAC_ARCH=x86_64 +# export MAC_ARCH=arm64 +# export MACOSX_DEPLOYMENT_TARGET=12.0 +``` + +--- + +## 10) Legal / Policy Boundary + +Use only SDKs obtained through your own legitimate Apple/Xcode/CLT installation path and account rights. + +--- + +## 11) Pitfalls and Corrections Observed + +1. **Host confusion:** terminal context drifted between LittlePaul and node68; corrected by explicit host checks. +2. **SSH auth prompts with sudo:** root-context SSH host trust caused interruption; corrected by running rsync as `cccc` with explicit remote username. +3. **rsync option mismatch:** some environments rejected `--info=progress2`; `--progress` was compatible. +4. **Triple mismatch risk:** script originally defaulted to Darwin `24`; changed to `24.5` to match installed wrappers. + +--- + +## 12) Current Known-Good State + +- SDK present at `/opt/osxcross/target/SDK/MacOSX15.5.sdk` +- osxcross toolchain built and functioning +- ToolTime cross script present and syntax-validated +- defensive ignore + runtime guard in place + +This is now a repeatable baseline for Ubuntu/Mint -> Darwin cross compilation in this workspace. diff --git a/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-doswin.md b/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-doswin.md new file mode 100644 index 00000000..522cfee4 --- /dev/null +++ b/asyn0c/the-science-of-cross-compilation-from-ubuntu-to-doswin.md @@ -0,0 +1,671 @@ +# The Science of Cross-Compilation from Ubuntu to DOS/Win + +## Remote Host Inventory: `sync0x@LittleJohn.z.asyn0c.net` + +The host currently contains two distinct Unix-like Windows environments: + +- `/c/cygwin64` — a full Cygwin installation +- `/c/cygsys64` — an MSYS2-style installation under the local `cygsys` naming convention + +The findings below began with direct inspection on 21 March 2026 and were extended through real provisioning and build-debug work on 22 March 2026. + +## Final Naming Convention for Windows Build Trees + +For ToolTime, the standardized out-of-source Windows build directories are now: + +- `ToolTime_win_ucrt64` — the Universal CRT 64-bit build tree +- `ToolTime_win_ming32` — the 32-bit MinGW build tree + +These names should be used consistently in documentation, automation, and remote shell commands. + +The naming rationale is deliberate: + +- `win` already establishes the platform as Windows +- `ucrt64` is the precise ABI/runtime/toolchain family +- `ming32` is the concise 32-bit MinGW contraction, with no realistic ambiguity in this context +- the two preferred suffixes are visually balanced and easy to scan in logs + +## Update After Real MSYS2 Provisioning and Build Work + +The host is no longer merely an inspected target. It has now been used for actual ToolTime provisioning and native Windows builds. + +The final practical state is: + +- `/c/cygsys64/ucrt64` is provisioned and usable for native 64-bit UCRT builds +- `/c/cygsys64/mingw32` is provisioned and usable for native 32-bit Windows builds +- MSYS itself remains the orchestration layer for package installs, repository operations, and scripted entry into target shells +- the 32-bit ToolTime experiment reached a runnable PE32 GUI executable with runtime DLL staging beside the executable +- several link problems could only be verified by deleting the build tree and reconfiguring from scratch + +### `/c/cygwin64` availability + +Detected layout: + +- `bin/` +- `usr/bin/` +- `etc/` +- `etc/setup/` + +Detected tools in-place: + +- `bash` +- `sh` +- `gcc` +- `g++` +- `clang` +- `clang++` +- `cmake` +- `make` +- `pkg-config` +- `python3` +- `perl` +- `git` +- `apt-cyg` +- `mintty` +- `cygpath` + +Selected installed packages found in `etc/setup/installed.db`: + +- `clang` +- `cmake` +- `gcc-core` +- `gcc-g++` +- `git` +- `make` +- `perl` +- `pkg-config` +- `python3` + +Observed versions: + +- `gcc`: `13.4.0` +- `g++`: `13.4.0` +- `clang++`: `20.1.8` +- `cmake`: `4.2.1` +- `make`: `4.4.1` +- `git`: `2.51.0` +- `bash`: `5.2.21` + +Also present: + +- `apt-cyg` +- `etc/setup/setup.rc` +- `etc/setup/installed.db` + +Not observed at the root during this pass: + +- `setup-x86_64.exe` +- `ninja` + +### `/c/cygsys64` availability + +Detected layout: + +- `usr/` +- `usr/bin/` +- `mingw64/` +- `ucrt64/` +- `clang64/` +- `clangarm64/` +- `mingw32/` + +Detected base tools in `usr/bin`: + +- `bash` +- `sh` +- `perl` +- `git` +- `pacman` +- `mintty` +- `cygpath` + +Detected launcher/front-end executables: + +- `msys2.exe` +- `msys2_shell.cmd` +- `mingw32.exe` +- `mingw64.exe` +- `ucrt64.exe` +- `clang64.exe` +- `clangarm64.exe` +- `autorebase.bat` + +Toolchain state by target prefix: + +- `mingw64/`: directory exists, but no compiler/build tools were found in `mingw64/bin` during this pass +- `ucrt64/`: provisioned and compiler/build tools confirmed + - `gcc` + - `g++` + - `cmake` + - `ninja` + - `make` +- `clang64/`: directory exists, but no compiler/build tools were found in `clang64/bin` during this pass +- `clangarm64/`: directory exists, but no compiler/build tools were found in `clangarm64/bin` during this pass +- `mingw32/`: provisioned and compiler/build tools confirmed + - `gcc` + - `g++` + - `cmake` + - `ninja` + - `make` + +Selected installed packages reported by `pacman -Q`: + +- `msys2-runtime 3.6.7-2` +- `pacman 6.1.0-22` +- `bash 5.3.009-1` +- `git 2.53.0-1` +- `mingw-w64-ucrt-x86_64-binutils 2.46-2` +- `mingw-w64-ucrt-x86_64-crt 13.0.0...` +- `mingw-w64-ucrt-x86_64-gcc 15.2.0-13` +- `mingw-w64-ucrt-x86_64-gcc-libs 15.2.0-13` +- `mingw-w64-ucrt-x86_64-headers 13.0.0...` +- supporting `gmp`, `isl`, `mpc`, `mpfr`, `zlib`, `zstd`, `winpthread` packages + +Not observed in the currently installed package set during the initial inspection pass: + +- any populated `mingw64` toolchain +- any populated `clang64` toolchain + +Subsequent provisioning added at least the following practical build stack for the targets actually used: + +- MSYS base automation tools: `git`, `openssh`, `rsync`, `zip`, `unzip`, `tar`, `patch`, `diffutils`, `findutils`, `grep`, `sed`, `gawk`, `perl`, `python`, `make` +- `ucrt64`: `gcc`, `cmake`, `ninja`, `make`, `pkgconf`, `python`, `ccache`, `gdb` +- `mingw32`: `gcc`, `cmake`, `ninja`, `make`, `pkgconf`, `python`, `ccache`, `gdb` + +## What This Means in Practice + +### Cygwin is the broader POSIX environment + +The full Cygwin tree is better when the build assumes a real Unix userspace rather than merely a native Windows compiler: + +- richer POSIX shell and utility coverage +- more direct compatibility with `./configure`, Autotools, shell-heavy bootstrap scripts, and mixed Python/Perl/sed/awk glue +- more likely to run upstream Unix build instructions with minimal patching +- easier to preserve Linux-like scripts verbatim, especially if they expect Cygwin paths and Cygwin DLL semantics + +In short: if the problem is “make Windows behave more like a Unix build machine”, full Cygwin is usually the stronger answer. + +### `cygsys` / MSYS2 is the cleaner native-Windows packaging story + +The `cygsys` tree is much leaner, but it is already structured the way modern Windows-native open-source development normally wants: + +- one small MSYS runtime for shells and package management +- separate target prefixes for the actual native toolchains +- `pacman` available immediately for unattended installs and upgrades +- ready-made launchers for each target environment + +That makes it more attractive when the goal is not “Unix emulation” but “native Windows executables built from a scripted Unix-ish shell”. + +## Why Full Cygwin Still Has an Advantage over Minimalist `cygsys` + +The main advantage of full Cygwin is completeness. + +- It already contains a coherent POSIX userland plus compiler stack. +- It is better suited to build systems that expect many helper programs beyond the compiler itself. +- It is friendlier to legacy scripts that assume `/usr/bin`, `bash`, `make`, `python3`, `perl`, and GNU userland all coexist in one environment. +- It reduces the chance of discovering that a seemingly small script dependency is missing from a target prefix. + +This matters for ToolTime-like automation, because build orchestration often depends on much more than `gcc` and `cmake`. + +## Why MSYS2 Has an Automation Advantage over Cygwin + +Even though Cygwin is fuller, MSYS2 is easier to automate from scratch. + +### MSYS2 automation advantages + +- `pacman` is built in and first-class. +- Package install commands are deterministic and scriptable out of the box. +- No extra bootstrap step is needed to obtain the package manager itself. +- Targeted installs are cleanly namespaced by prefix, e.g. `mingw-w64-ucrt-x86_64-*`. +- Upgrades and environment provisioning are easier to express in CI or provisioning scripts. + +### Cygwin automation drawbacks + +- The stock package manager flow normally revolves around `setup-x86_64.exe`, which is awkward for unattended shell-driven provisioning. +- On this host, `apt-cyg` is present and useful, but it is still an add-on, not the canonical base installer. +- That means a scripted build target either: + - depends on `apt-cyg` already having been installed, or + - must bootstrap `apt-cyg` first, or + - must drive the GUI/CLI installer executable in a less pleasant way. + +So the contrast is: + +- **Cygwin**: better Unix compatibility +- **MSYS2**: better scripted provisioning and repeatable package installs + +## Appropriate `cygsys` Targets to Use + +If we opt for the `cygsys` / MSYS2 model, the target shell matters. + +### `msys2` regular shell + +Use this for: + +- package management +- repository operations +- shell scripting +- orchestration and helper scripts + +Do **not** treat the plain MSYS shell as the primary target for release binaries. It is the maintenance shell, not the ideal native-app ABI target. + +### `ucrt64` + +This is the most appropriate default for modern 64-bit Windows 11 development. + +Use it for: + +- native 64-bit application builds +- current GCC-based Windows targets +- modern CRT behavior aligned with UCRT +- general-purpose automated builds for contemporary Windows systems + +After provisioning, `ucrt64` is the most mature default target prefix for ToolTime automation. + +### `clang64` + +Use this if the project specifically wants LLVM/Clang rather than GCC. + +Good reasons: + +- consistent Clang diagnostics across platforms +- LLVM tooling integration +- projects already validated under Clang on Linux/macOS + +At present on this host, the `clang64` directory exists but is not provisioned with the compiler and build tools yet. + +### `mingw64` + +Use this for classic MinGW-w64 x86_64 builds when compatibility with established `mingw64` package naming or older Windows build recipes matters. + +Good reasons: + +- existing scripts assume `mingw64` +- package names or documentation already target `mingw-w64-x86_64-*` +- a project has been historically validated against that runtime choice + +At present on this host, `mingw64` exists as a prefix but is not currently provisioned with the toolchain. + +### `mingw32` + +Use only when a true 32-bit Windows target is still required. + +For new Windows 11 workstation provisioning, this is usually optional and can be skipped unless the product explicitly ships 32-bit artifacts. + +For ToolTime specifically, `mingw32` proved valuable because: + +- SpaceMouse integration work still made a real 32-bit path worth exploring +- it exposed library-linking and runtime-DLL details that are easy to miss when staying only in the 64-bit path +- the resulting command/environment discipline is reusable for other legacy or compatibility-sensitive Windows packages + +### `clangarm64` + +Use only if ARM64 Windows support is a real target. It is not a default choice for a general x86_64 Windows build farm. + +## Recommended Direction If We Standardize on `cygsys` + +If ToolTime were to standardize on the `cygsys` model, the recommended split would be: + +- use **MSYS regular** for provisioning and orchestration +- use **`ucrt64`** as the default native build target +- optionally add **`clang64`** for LLVM validation builds +- add **`mingw64`** only if compatibility with older MinGW-based recipes is needed +- add **`mingw32`** only if 32-bit deliverables are still part of the release matrix + +That gives a clean default while still allowing additional target prefixes for compatibility or testing. + +## Canonical Build Tree Names and Shell Environments + +The most useful convention coming out of the MSYS work is to make the target ABI obvious in both the directory name and the shell entry command. + +### Canonical build trees + +- `ToolTime_win_ucrt64` +- `ToolTime_win_ming32` + +These are better than generic names like `build` or `build_mingw32` because they: + +- survive log excerpts and copied command history with more context intact +- let multiple Windows target trees coexist without mental bookkeeping +- make it easier to compare 32-bit and 64-bit failures side by side +- generalize cleanly to other targets if needed later + +### Canonical remote shell launch pattern + +When launching remotely from Ubuntu into the MSYS2 installation on Windows, the most repeatable approach is a clean environment plus explicit `MSYSTEM` and `PATH`. + +For `mingw32`: + +```sh +env -i HOME=/home/ PATH=/usr/bin:/bin MSYSTEM=MINGW32 CHERE_INVOKING=1 \ + /c/cygsys64/usr/bin/bash.exe -lc \ + 'export PATH=/mingw32/bin:/usr/bin:/bin; cd /home//ToolTime; cmake -S . -B ToolTime_win_ming32 -G Ninja ...' +``` + +For `ucrt64`: + +```sh +env -i HOME=/home/ PATH=/usr/bin:/bin MSYSTEM=UCRT64 CHERE_INVOKING=1 \ + /c/cygsys64/usr/bin/bash.exe -lc \ + 'export PATH=/ucrt64/bin:/usr/bin:/bin; cd /home//ToolTime; cmake -S . -B ToolTime_win_ucrt64 -G Ninja ...' +``` + +This is worth preserving because it removes ambiguity about: + +- which shell layer is active +- which compiler family is first on `PATH` +- whether Cygwin or MSYS path translation is in play +- whether a previous interactive shell polluted the environment + +## What We Learned Actually Building Under MSYS2 + +The most valuable knowledge from this exercise is not just which packages to install, but how to drive the environment when the build is almost right and only the final link or runtime validation remains. + +### 1. Use MSYS as the control plane, not as the target ABI + +The plain MSYS shell is the right place for: + +- `pacman` +- shell scripts +- `rsync` +- remote orchestration +- wrapper commands that enter `ucrt64` or `mingw32` + +The actual native build should happen with the matching target compiler prefix first on `PATH`. + +### 2. Prefer explicit target-specific out-of-source directories + +Use: + +- `ToolTime_win_ucrt64` +- `ToolTime_win_ming32` + +Avoid reusing one build directory for multiple target prefixes. That causes confusion in: + +- CMake cache contents +- generated Ninja link lines +- transitive library resolution +- copied runtime DLL state + +### 3. For link-debugging, deleting the build tree is often faster than incremental guesswork + +This was one of the clearest lessons from the 32-bit experiment. + +When diagnosing MinGW/CMake link issues, the only reliable proof that a fix worked was often: + +1. delete the target build tree entirely +2. re-run `cmake -S . -B -G Ninja ...` +3. rebuild the target from zero +4. inspect the final Ninja link edge or the final linker invocation again + +This matters because subtle target-interface and cache changes may not fully invalidate the generated link graph in a way that is easy to trust from partial rebuilds. + +For future 32-bit Windows packages, budget for this. A clean rebuild is not wasted time if it answers the only question that matters: did the final link line change? + +### 4. Inspect generated build files when the link line looks impossible + +When a library token appears that “should not be there”, inspect the generated build graph directly. + +Practical examples: + +- search `build.ninja` for the offending token +- inspect the final executable link edge +- inspect library target link interfaces indirectly by seeing what propagated into Ninja + +This is often faster than theorizing about CMake behavior in the abstract. + +### 5. Runtime validation is a separate phase from link success + +A successful Windows link is not the end of the experiment. + +The 32-bit ToolTime build linked successfully and then immediately surfaced a runtime dependency issue: + +- missing `libwinpthread-1.dll` + +The practical fix was to stage the required MinGW runtime DLLs beside the executable in the build output directory. + +That lesson generalizes well to other packages: + +- always inspect imported DLLs for a produced `.exe` +- test-launch the executable on Windows as soon as it exists +- treat runtime DLL colocation as part of the build deliverable, not an afterthought + +### 6. Keep compiler/linker warnings categorized by severity + +During the 32-bit work, several warnings appeared repeatedly: + +- ignored OpenMP pragmas because OpenMP was not enabled +- deprecated or questionable C++ patterns in upstream code +- `.drectve` warnings originating from the 32-bit SpaceWare import library + +The right workflow was to separate them into: + +- warnings that do not block the build +- warnings that indicate future cleanup candidates +- the single failure that currently blocks the artifact + +This prevents distraction when the immediate goal is to prove a target ABI works at all. + +### 7. Preserve exact successful command lines + +For future work on a different package that must build under 32-bit Windows, keep the exact remote command patterns, including: + +- `env -i` +- `HOME=/home/` +- `PATH=/usr/bin:/bin` +- `MSYSTEM=` +- `CHERE_INVOKING=1` +- the target-prefixed `PATH` export inside the shell +- a named out-of-source build tree + +Those details save time because they eliminate the most common source of confusion: not the compiler itself, but the shell and path context around it. + +## ToolTime-Specific 32-Bit Notes That Generalize Well + +Even though these experiments were done for ToolTime, the workflow is broadly reusable for other software that still needs a 32-bit Windows target. + +Useful general lessons: + +- provision the target compiler family fully before debugging project code +- verify `gcc`, `cmake`, and `ninja` in the target prefix before the first project configure +- do not mix Cygwin paths into an MSYS-targeted build unless you have a very specific reason +- name build trees after the ABI target, not after whatever command happened to create them first +- if a link fix affects transitive libraries, expect to restart the build from scratch to verify it +- after link success, inspect runtime dependencies and stage DLLs early + +## Recommended Baseline Commands + +For future reference, the build skeletons should now look like this. + +### 32-bit MinGW build + +```sh +export PATH=/mingw32/bin:/usr/bin:/bin +cmake -S . -B ToolTime_win_ming32 -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_TESTS=OFF \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -DZLIB_BUILD_SHARED=OFF \ + -DCMAKE_RC_FLAGS=--use-temp-file +cmake --build ToolTime_win_ming32 --target solvespace -j2 +``` + +### 64-bit UCRT build + +```sh +export PATH=/ucrt64/bin:/usr/bin:/bin +cmake -S . -B ToolTime_win_ucrt64 -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_TESTS=OFF +cmake --build ToolTime_win_ucrt64 --target solvespace -j2 +``` + +## Complete Preparation of a New Windows 11 Development Target + +The sequence below assumes a brand new Windows 11 system that is being prepared to participate in automated ToolTime-style builds. + +### 1. Base operating-system preparation + +- install all pending Windows Updates +- give the machine a stable hostname +- create or confirm the dedicated build user account +- enable OpenSSH Server if remote administration will be used +- confirm inbound SSH access from the orchestration host +- confirm the build user can log in non-interactively as needed +- set the system clock and time sync correctly + +### 2. Basic filesystem layout + +Choose and standardize install roots, for example: + +- `C:\cygwin64` for full Cygwin +- `C:\cygsys64` for MSYS2 under the local naming convention +- `C:\src` or another fixed path for working trees +- `C:\ccache` if compiler caching will be used + +Create these paths deliberately so automation scripts never rely on ad-hoc per-user locations. + +### 3. Decide between the two Unix layers + +#### Option A: Full Cygwin + +Install Cygwin if the target needs: + +- the richest Unix compatibility +- shell-heavy upstream build flows +- Autotools/configure-style software +- one broad POSIX environment that can build and script in the same space + +Install at minimum: + +- `bash` +- `coreutils` +- `findutils` +- `grep` +- `sed` +- `gawk` +- `make` +- `cmake` +- `gcc-core` +- `gcc-g++` +- `clang` if desired +- `git` +- `python3` +- `perl` +- `pkg-config` +- `ninja` if the project uses Ninja +- any project-specific dev libraries + +If unattended package installs are required later, also provision `apt-cyg` as part of the machine bootstrap and keep that step documented in the base image process. + +#### Option B: `cygsys` / MSYS2 + +Install MSYS2 if the target needs: + +- repeatable shell-scripted package installs +- native MinGW/UCRT/Clang Windows binaries +- cleaner CI/provisioning semantics +- separation between the maintenance shell and target ABI environments + +After base install, immediately perform the normal MSYS2 update cycle from the MSYS shell: + +- refresh package database +- upgrade core packages +- restart shell if required +- repeat until fully current + +Then install the desired target packages. + +For a modern default `ucrt64` host, provision at minimum: + +- `mingw-w64-ucrt-x86_64-gcc` +- `mingw-w64-ucrt-x86_64-cmake` +- `mingw-w64-ucrt-x86_64-ninja` +- `mingw-w64-ucrt-x86_64-pkgconf` +- `mingw-w64-ucrt-x86_64-python` +- `mingw-w64-ucrt-x86_64-make` or `mingw-w64-ucrt-x86_64-ninja` depending on generator choice +- any required third-party libraries for the project + +From the MSYS layer itself, also ensure: + +- `git` +- `bash` +- `perl` if scripts use it + +If Clang validation is desired, also provision the `clang64` package family. + +### 4. Install auxiliary native Windows dependencies + +Depending on the project, also install: + +- Visual C++ redistributables if required by helper tools +- DirectX/OpenGL runtime support as needed +- printer/cutter vendor drivers if the workstation controls hardware +- signing tools if release artifacts must be signed on the Windows node +- 7-Zip or another archiver if packaging scripts require it + +### 5. Configure remote automation + +- verify `ssh user@host` works from the orchestrating Linux machine +- ensure PATH is stable in non-interactive remote shells +- document whether the remote login lands in Cygwin, MSYS2, PowerShell, or `cmd.exe` +- provide wrapper scripts for entering the right environment, e.g.: + - Cygwin shell wrapper + - `msys2_shell.cmd -defterm -no-start -ucrt64 -here` +- normalize line endings and locale expectations + +This wrapper step is important. The orchestration host should not have to guess whether a command must run in Cygwin, MSYS, `ucrt64`, or native `cmd.exe`. + +### 6. Install source and caches + +- clone the repository to a fixed path +- configure any submodules or vendored dependencies +- define compiler cache location if used +- define build output directories separate from source +- ensure the build user owns and can clean these locations + +### 7. Validate the toolchain end-to-end + +For either Cygwin or `cygsys`, validate: + +- `bash --version` +- `git --version` +- compiler version (`gcc --version` and/or `clang --version`) +- `cmake --version` +- `make --version` or `ninja --version` +- a minimal compile-and-link test +- a full project configure/build cycle +- any packaging/export step relevant to ToolTime + +### 8. Freeze the provisioning recipe + +Once the workstation is known-good: + +- record the exact package list +- record the exact install roots +- record the chosen target prefix (`ucrt64`, `clang64`, etc.) +- keep the wrapper scripts in version control +- keep one bootstrap script that can recreate the machine with minimal manual work + +That last step is what turns a one-off successful workstation into a repeatable build target. + +## Recommended Baseline for a Fresh Windows 11 ToolTime Builder + +If building a new Windows 11 target today, the most balanced default would be: + +1. install OpenSSH Server +2. install `cygsys` / MSYS2 under `C:\cygsys64` +3. update MSYS2 fully with `pacman` +4. provision the `ucrt64` toolchain and build utilities +5. optionally install `clang64` for a second validation toolchain +6. add full Cygwin only if the build scripts prove they truly need deeper POSIX compatibility + +This yields the easiest automation story first, while still leaving room to layer in Cygwin where the project benefits from it. + +## Bottom Line + +- `/c/cygwin64` remains the more complete Unix-like compatibility layer on `LittleJohn`. +- `/c/cygsys64` is now the more useful automation and native-build layer for ToolTime in practice, with both `ucrt64` and `mingw32` provisioned and exercised. +- If the priority is maximum Unix compatibility, favor **Cygwin**. +- If the priority is reproducible scripted provisioning and native Windows package namespaces, favor **MSYS2 / `cygsys`**. +- For ToolTime’s default modern Windows target, favor **`ucrt64`** with build tree **`ToolTime_win_ucrt64`**. +- For 32-bit compatibility work, use **`mingw32`** with build tree **`ToolTime_win_ming32`**, and expect clean rebuilds plus runtime DLL verification to be part of the normal workflow. diff --git a/cmake/GetGitCommitHash.cmake b/cmake/GetGitCommitHash.cmake index f67a844a..da70f9d7 100644 --- a/cmake/GetGitCommitHash.cmake +++ b/cmake/GetGitCommitHash.cmake @@ -1,7 +1,16 @@ +if(DEFINED GIT_COMMIT_HASH AND NOT "${GIT_COMMIT_HASH}" STREQUAL "") + return() +endif() + function(get_git_commit_hash) get_filename_component(GIT_DESCRIBE_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) - get_filename_component(GIT_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH) - set(GIT_DIR "${GIT_ROOT}/.git") + get_filename_component(GIT_REPO_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH) + set(GIT_DIR "${GIT_REPO_ROOT}/.git") + + if(NOT EXISTS "${GIT_DIR}/HEAD") + message(WARNING "Cannot determine git HEAD: ${GIT_DIR}/HEAD is missing") + return() + endif() # Add a CMake configure dependency to the currently checked out revision. set(GIT_DEPENDS ${GIT_DIR}/HEAD) @@ -30,6 +39,18 @@ function(get_git_commit_hash) message(WARNING "Cannot determine git HEAD") else() set(GIT_COMMIT_HASH ${HEAD_REF} PARENT_SCOPE) + + find_package(Git QUIET) + if(GIT_FOUND) + execute_process( + COMMAND "${GIT_EXECUTABLE}" -C "${GIT_REPO_ROOT}" describe --always --dirty --tags + OUTPUT_VARIABLE GIT_DESCRIBE + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT "${GIT_DESCRIBE}" STREQUAL "") + set(GIT_COMMIT_DESCRIBE ${GIT_DESCRIBE} PARENT_SCOPE) + endif() + endif() endif() endfunction() get_git_commit_hash() diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 2862b5f4..70bdcc7c 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -139,9 +139,15 @@ if(WIN32) add_resource(win32/icon.ico 4000 ICON) add_resource(win32/manifest.xml 1 RT_MANIFEST) elseif(APPLE) - add_iconset (cocoa/AppIcon.iconset) - add_xib (cocoa/MainMenu.xib) - add_xib (cocoa/SaveFormatAccessory.xib) + if(ENABLE_GUI) + if(CMAKE_CROSSCOMPILING) + message(WARNING "Skipping macOS XIB/icon generation during cross-compilation (requires host tools ibtool/iconutil)") + else() + add_iconset (cocoa/AppIcon.iconset) + add_xib (cocoa/MainMenu.xib) + add_xib (cocoa/SaveFormatAccessory.xib) + endif() + endif() else() add_resource(freedesktop/solvespace-48x48.png) diff --git a/res/locales/en_US.po b/res/locales/en_US.po index 5770a7eb..eab6b493 100644 --- a/res/locales/en_US.po +++ b/res/locales/en_US.po @@ -1279,6 +1279,577 @@ msgstr "" "No entities are selected. Select entities before trying to toggle their " "construction state." +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Save" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Save &As..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Export &Image..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Export 2d &View..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Export 2d &Section..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Export 3d &Wireframe..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Export Triangle &Mesh..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Export &Surfaces..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&port..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "E&xit" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Edit" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Undo" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Redo" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&generate All" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Snap Selection to &Grid" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Rotate Imported &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Cu&t" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copy" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Paste" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Paste &Transformed..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Delete" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Select &Edge Chain" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Select &All" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Unselect All" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Line Styles..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&View Projection..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuration..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&View" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Zoom &In" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Zoom &Out" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "Zoom To &Fit" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Align View to &Workplane" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Nearest &Ortho View" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Nearest &Isometric View" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Center View At Point" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Show Snap &Grid" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Darken Inactive Solids" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Use &Perspective Projection" + +#: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Show E&xploded View" + +#: graphicswin.cpp:98 +msgid "Dimension &Units" +msgstr "Dimension &Units" + +#: graphicswin.cpp:99 +msgid "Dimensions in &Millimeters" +msgstr "Dimensions in &Millimeters" + +#: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "Dimensions in M&eters" + +#: graphicswin.cpp:101 +msgid "Dimensions in &Inches" +msgstr "Dimensions in &Inches" + +#: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensions in &Feet and Inches" + +#: graphicswin.cpp:104 +msgid "Show &Toolbar" +msgstr "Show &Toolbar" + +#: graphicswin.cpp:105 +msgid "Show Property Bro&wser" +msgstr "Show Property Bro&wser" + +#: graphicswin.cpp:107 +msgid "&Full Screen" +msgstr "&Full Screen" + +#: graphicswin.cpp:109 +msgid "&New Group" +msgstr "&New Group" + +#: graphicswin.cpp:110 +msgid "Sketch In &3d" +msgstr "Sketch In &3d" + +#: graphicswin.cpp:111 +msgid "Sketch In New &Workplane" +msgstr "Sketch In New &Workplane" + +#: graphicswin.cpp:113 +msgid "Step &Translating" +msgstr "Step &Translating" + +#: graphicswin.cpp:114 +msgid "Step &Rotating" +msgstr "Step &Rotating" + +#: graphicswin.cpp:116 +msgid "E&xtrude" +msgstr "E&xtrude" + +#: graphicswin.cpp:117 +msgid "&Helix" +msgstr "&Helix" + +#: graphicswin.cpp:118 +msgid "&Lathe" +msgstr "&Lathe" + +#: graphicswin.cpp:119 +msgid "Re&volve" +msgstr "Re&volve" + +#: graphicswin.cpp:121 +msgid "Link / Assemble..." +msgstr "Link / Assemble..." + +#: graphicswin.cpp:122 +msgid "Link Recent" +msgstr "Link Recent" + +#: graphicswin.cpp:124 +msgid "&Sketch" +msgstr "&Sketch" + +#: graphicswin.cpp:125 +msgid "In &Workplane" +msgstr "In &Workplane" + +#: graphicswin.cpp:126 +msgid "Anywhere In &3d" +msgstr "Anywhere In &3d" + +#: graphicswin.cpp:128 +msgid "Datum &Point" +msgstr "Datum &Point" + +#: graphicswin.cpp:129 +msgid "&Workplane" +msgstr "&Workplane" + +#: graphicswin.cpp:131 +msgid "Line &Segment" +msgstr "Line &Segment" + +#: graphicswin.cpp:132 +msgid "C&onstruction Line Segment" +msgstr "C&onstruction Line Segment" + +#: graphicswin.cpp:133 +msgid "&Rectangle" +msgstr "&Rectangle" + +#: graphicswin.cpp:134 +msgid "&Circle" +msgstr "&Circle" + +#: graphicswin.cpp:135 +msgid "&Arc of a Circle" +msgstr "&Arc of a Circle" + +#: graphicswin.cpp:136 +msgid "&Bezier Cubic Spline" +msgstr "&Bezier Cubic Spline" + +#: graphicswin.cpp:138 +msgid "&Text in TrueType Font" +msgstr "&Text in TrueType Font" + +#: graphicswin.cpp:139 +msgid "&Image" +msgstr "&Image" + +#: graphicswin.cpp:141 +msgid "To&ggle Construction" +msgstr "To&ggle Construction" + +#: graphicswin.cpp:142 +msgid "Tangent &Arc at Point" +msgstr "Tangent &Arc at Point" + +#: graphicswin.cpp:143 +msgid "Split Curves at &Intersection" +msgstr "Split Curves at &Intersection" + +#: graphicswin.cpp:145 +msgid "&Constrain" +msgstr "&Constrain" + +#: graphicswin.cpp:146 +msgid "&Distance / Diameter" +msgstr "&Distance / Diameter" + +#: graphicswin.cpp:147 +msgid "Re&ference Dimension" +msgstr "Re&ference Dimension" + +#: graphicswin.cpp:148 +msgid "A&ngle / Equal Angle" +msgstr "A&ngle / Equal Angle" + +#: graphicswin.cpp:149 +msgid "Reference An&gle" +msgstr "Reference An&gle" + +#: graphicswin.cpp:150 +msgid "Other S&upplementary Angle" +msgstr "Other S&upplementary Angle" + +#: graphicswin.cpp:151 +msgid "Toggle R&eference Dim" +msgstr "Toggle R&eference Dim" + +#: graphicswin.cpp:153 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:154 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:156 +msgid "&On Point / Curve / Plane" +msgstr "&On Point / Curve / Plane" + +#: graphicswin.cpp:157 +msgid "E&qual Length / Radius" +msgstr "E&qual Length / Radius" + +#: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Length / Arc Ra&tio" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Length / Arc Diff&erence" + +#: graphicswin.cpp:160 +msgid "At &Midpoint" +msgstr "At &Midpoint" + +#: graphicswin.cpp:161 +msgid "S&ymmetric" +msgstr "S&ymmetric" + +#: graphicswin.cpp:162 +msgid "Para&llel / Tangent" +msgstr "Para&llel / Tangent" + +#: graphicswin.cpp:163 +msgid "&Perpendicular" +msgstr "&Perpendicular" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" +msgstr "Same Orient&ation" + +#: graphicswin.cpp:165 +msgid "Lock Point Where &Dragged" +msgstr "Lock Point Where &Dragged" + +#: graphicswin.cpp:167 +msgid "Comment" +msgstr "Comment" + +#: graphicswin.cpp:169 +msgid "&Analyze" +msgstr "&Analyze" + +#: graphicswin.cpp:170 +msgid "Measure &Volume" +msgstr "Measure &Volume" + +#: graphicswin.cpp:171 +msgid "Measure A&rea" +msgstr "Measure A&rea" + +#: graphicswin.cpp:172 +msgid "Measure &Perimeter" +msgstr "Measure &Perimeter" + +#: graphicswin.cpp:173 +msgid "Show &Interfering Parts" +msgstr "Show &Interfering Parts" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" +msgstr "Show &Naked Edges" + +#: graphicswin.cpp:175 +msgid "Show &Center of Mass" +msgstr "Show &Center of Mass" + +#: graphicswin.cpp:177 +msgid "Show &Underconstrained Points" +msgstr "Show &Underconstrained Points" + +#: graphicswin.cpp:179 +msgid "&Trace Point" +msgstr "&Trace Point" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." +msgstr "&Stop Tracing..." + +#: graphicswin.cpp:181 +msgid "Step &Dimension..." +msgstr "Step &Dimension..." + +#: graphicswin.cpp:183 +msgid "&Help" +msgstr "&Help" + +#: graphicswin.cpp:184 +msgid "&Language" +msgstr "&Language" + +#: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "&Website / Manual" + +#: graphicswin.cpp:186 +msgid "&Go to GitHub commit" +msgstr "&Go to GitHub commit" + +#: graphicswin.cpp:188 +msgid "&About" +msgstr "&About" + +#: graphicswin.cpp:362 +msgid "(no recent files)" +msgstr "(no recent files)" + +#: graphicswin.cpp:370 +#, c-format +msgid "File '%s' does not exist." +msgstr "File '%s' does not exist." + +#: graphicswin.cpp:773 +msgid "No workplane is active, so the grid will not appear." +msgstr "No workplane is active, so the grid will not appear." + +#: graphicswin.cpp:788 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." + +#: graphicswin.cpp:878 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Select a point; this point will become the center of the view on screen." + +#: graphicswin.cpp:1178 +msgid "No additional entities share endpoints with the selected entities." +msgstr "No additional entities share endpoints with the selected entities." + +#: graphicswin.cpp:1196 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." + +#: graphicswin.cpp:1219 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." + +#: graphicswin.cpp:1226 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." + +#: graphicswin.cpp:1311 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "No workplane selected. Activating default workplane for this group." + +#: graphicswin.cpp:1314 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." + +#: graphicswin.cpp:1335 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." + +#: graphicswin.cpp:1346 +msgid "click point on arc (draws anti-clockwise)" +msgstr "click point on arc (draws anti-clockwise)" + +#: graphicswin.cpp:1347 +msgid "click to place datum point" +msgstr "click to place datum point" + +#: graphicswin.cpp:1348 +msgid "click first point of line segment" +msgstr "click first point of line segment" + +#: graphicswin.cpp:1350 +msgid "click first point of construction line segment" +msgstr "click first point of construction line segment" + +#: graphicswin.cpp:1351 +msgid "click first point of cubic segment" +msgstr "click first point of cubic segment" + +#: graphicswin.cpp:1352 +msgid "click center of circle" +msgstr "click center of circle" + +#: graphicswin.cpp:1353 +msgid "click origin of workplane" +msgstr "click origin of workplane" + +#: graphicswin.cpp:1354 +msgid "click one corner of rectangle" +msgstr "click one corner of rectangle" + +#: graphicswin.cpp:1355 +msgid "click top left of text" +msgstr "click top left of text" + +#: graphicswin.cpp:1361 +msgid "click top left of image" +msgstr "click top left of image" + +#: graphicswin.cpp:1387 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." + #: group.cpp:86 msgctxt "group-name" msgid "sketch-in-3d" @@ -2401,3 +2972,28 @@ msgstr "Bad format: specify x, y, z" #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Q3D Object file" + +# Runtime hotfix: current menu mnemonic variants observed on macOS. +msgid "A&uto" +msgstr "A&uto" + +msgid "Save && &Export" +msgstr "Save && &Export" + +msgid "Load / Import" +msgstr "Load / Import" + +msgid "JavaScript" +msgstr "JavaScript" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Wor&kplane" +msgstr "Wor&kplane" + +msgid "I&mage" +msgstr "I&mage" + +msgid "Ta&ngent Arc at Point" +msgstr "Ta&ngent Arc at Point" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0e9129f4..5d76f2f3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,13 +29,25 @@ target_include_directories(slvs_deps INTERFACE SYSTEM ${CAIRO_INCLUDE_DIRS} ${MIMALLOC_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIRS}) -target_link_libraries(slvs_deps INTERFACE - dxfrw - ${ZLIB_LIBRARY} - ${PNG_LIBRARY} - ${FREETYPE_LIBRARY} - ${CAIRO_LIBRARIES} - mimalloc-static) +if(WIN32 AND MINGW) + # For GNU ld with static archives, providers must follow users. + # libpng references zlib, so keep zlib after png. + target_link_libraries(slvs_deps INTERFACE + dxfrw + ${PNG_LIBRARY} + ${ZLIB_LIBRARY} + ${FREETYPE_LIBRARY} + ${CAIRO_LIBRARIES} + mimalloc-static) +else() + target_link_libraries(slvs_deps INTERFACE + dxfrw + ${ZLIB_LIBRARY} + ${PNG_LIBRARY} + ${FREETYPE_LIBRARY} + ${CAIRO_LIBRARIES} + mimalloc-static) +endif() if(Backtrace_FOUND) target_include_directories(slvs_deps INTERFACE SYSTEM @@ -62,6 +74,7 @@ target_compile_options(slvs_deps if(APPLE) target_link_libraries(slvs_deps INTERFACE + ${COREFOUNDATION_LIBRARY} ${APPKIT_LIBRARY}) endif() @@ -293,6 +306,26 @@ if(ENABLE_GUI) platform/guiwin.cpp) target_link_libraries(solvespace PRIVATE comctl32) + + # For MinGW builds, prefer static winpthread to avoid requiring + # libwinpthread-1.dll at runtime. + if(MINGW) + target_link_options(solvespace PRIVATE -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic) + + # Also stage common MinGW runtime DLLs into ${CMAKE_BINARY_DIR}/bin + # so the executable runs directly on Windows hosts. + get_filename_component(MINGW_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY) + set(SLVS_MINGW_RUNTIME_DLLS + libwinpthread-1.dll + libgcc_s_dw2-1.dll + libstdc++-6.dll) + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + foreach(SLVS_DLL ${SLVS_MINGW_RUNTIME_DLLS}) + if(EXISTS "${MINGW_BIN_DIR}/${SLVS_DLL}") + file(COPY "${MINGW_BIN_DIR}/${SLVS_DLL}" DESTINATION "${CMAKE_BINARY_DIR}/bin") + endif() + endforeach() + endif() elseif(APPLE) target_compile_options(solvespace PRIVATE -fobjc-arc) target_compile_definitions(solvespace PRIVATE GL_SILENCE_DEPRECATION) @@ -435,24 +468,32 @@ if(APPLE) set(LIBOMP_LIB_PATH ${OpenMP_CXX_INCLUDE_DIRS}/../lib/libomp.dylib) set(LIBOMP_LINK_PATH "@executable_path/../Resources/libomp.dylib") set(LIBOMP_LINK_PATH_UTILS "@executable_path/SolveSpace.app/Contents/Resources/libomp.dylib") + set(SOLVESPACE_BUNDLE_FRAMEWORKS_DIR $/Frameworks) if(ENABLE_GUI) add_custom_command(TARGET solvespace POST_BUILD COMMAND cp -r ${CMAKE_BINARY_DIR}/Resources $ ) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${SOLVESPACE_BUNDLE_FRAMEWORKS_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/bin/libz.1.dylib ${SOLVESPACE_BUNDLE_FRAMEWORKS_DIR}/libz.1.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -id @rpath/libz.1.dylib ${SOLVESPACE_BUNDLE_FRAMEWORKS_DIR}/libz.1.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -rpath ${CMAKE_BINARY_DIR}/bin @executable_path/../Frameworks $ + COMMENT "Bundling libz for SolveSpace.app and normalizing runtime search paths" + VERBATIM) if(ENABLE_OPENMP) - execute_process(COMMAND install_name_tool -id ${LIBOMP_LINK_PATH} ${LIBOMP_LIB_PATH}) + execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -id ${LIBOMP_LINK_PATH} ${LIBOMP_LIB_PATH}) message("FROM " ${${LIBOMP_LIB_PATH}} "TO" $/Resources/libomp.dylib) add_custom_command(TARGET solvespace POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBOMP_LIB_PATH} $/Resources/libomp.dylib - COMMAND install_name_tool -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $ + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $ ) endif() endif() if(ENABLE_TESTS AND ENABLE_OPENMP) add_custom_command(TARGET solvespace POST_BUILD - COMMAND install_name_tool -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $) + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $) endif() - if(ENABLE_CLI) + if(ENABLE_GUI AND ENABLE_CLI) add_custom_command(TARGET solvespace POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ $ COMMENT "Bundling executable solvespace-cli" diff --git a/src/config.h.in b/src/config.h.in index 187b9cbc..85bf9cf5 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -1,7 +1,9 @@ #ifndef SOLVESPACE_CONFIG_H #define SOLVESPACE_CONFIG_H -#define PACKAGE_VERSION "@PROJECT_VERSION@~@solvespace_GIT_HASH@" +#define PACKAGE_VERSION "@PROJECT_VERSION@" +#define SNAPSHOT_VERSION "@GIT_COMMIT_DESCRIBE@" +#define GIT_REVISION "@solvespace_GIT_HASH@" #define GIT_HASH_URL "https://github.com/solvespace/solvespace/commit/@solvespace_GIT_HASH@" /* Non-OS X *nix only */ diff --git a/src/exportvector.cpp b/src/exportvector.cpp index 25417042..483c7bd7 100644 --- a/src/exportvector.cpp +++ b/src/exportvector.cpp @@ -16,6 +16,30 @@ static void DrwPushOwned(std::vector> &container, T *value) { container.emplace_back(value); } +static std::string ExportLayerToken(const std::string &name) { + std::string out; + out.reserve(name.size()); + + for(char c : name) { + if(std::isalnum((unsigned char)c)) { + out.push_back(c); + } else { + out.push_back('_'); + } + } + + return out; +} + +static std::string ExportLayerNameForStyle(hStyle hs) { + Style *s = Style::Get(hs); + std::string token = ExportLayerToken(s->name); + if(token.empty()) { + token = "unnamed"; + } + return ssprintf("s%03x_%s", hs.v, token.c_str()); +} + //----------------------------------------------------------------------------- // Routines for DXF export //----------------------------------------------------------------------------- @@ -58,8 +82,7 @@ class DxfWriteInterface : public DRW_Interface { } for(uint32_t v : usedStyles) { - Style *s = Style::Get(hStyle{v}); - layer.name = s->DescriptionString(); + layer.name = ExportLayerNameForStyle(hStyle{v}); dxf->writeLayer(&layer); } } @@ -337,7 +360,7 @@ class DxfWriteInterface : public DRW_Interface { RgbaColor color = Style::Color(hs, /*forExport=*/true); entity->color24 = color.ToPackedIntBGRA(); entity->color = findDxfColor(color); - entity->layer = s->DescriptionString(); + entity->layer = ExportLayerNameForStyle(hs); entity->lineType = DxfFileWriter::lineTypeName(s->stippleType); entity->ltypeScale = Style::StippleScaleMm(s->h); entity->setWidthMm(Style::WidthMm(hs.v)); @@ -1069,39 +1092,8 @@ void PdfFileWriter::Bezier(SBezier *sb) { //----------------------------------------------------------------------------- // Routines for SVG output //----------------------------------------------------------------------------- -static std::string SvgSystemFallbackLayerName(uint32_t styleHandle) { - switch(styleHandle) { - case 0: return "#references"; - case 1: return "active_group"; - case 2: return "inactive_group"; - case 6: return "dimensions"; - default: - if(styleHandle < 0x100) { - return ssprintf("system_s%x", styleHandle); - } - return ""; - } -} - -static bool SvgHasDefaultStyleNamePrefix(const std::string &name) { - return name.rfind("#def-", 0) == 0; -} - static std::string SvgLayerNameForStyle(hStyle hs) { - Style *s = Style::Get(hs); - if(!s->name.empty() && !SvgHasDefaultStyleNamePrefix(s->name)) { - return s->name; - } - - std::string fallback = SvgSystemFallbackLayerName(hs.v); - if(!fallback.empty()) { - return fallback; - } - - if(!s->name.empty()) { - return s->name; - } - return ssprintf("s%x", hs.v); + return ExportLayerNameForStyle(hs); } static std::string SvgLayerId(const std::string &layerName, uint32_t styleHandle) { @@ -1136,9 +1128,10 @@ void SvgFileWriter::StartFile() { fprintf(f, "\r\n" -"\r\n" "\r\n" @@ -1303,10 +1296,12 @@ void SvgFileWriter::FinishAndCloseFile() { hStyle hs = { hv }; std::string layerName = SvgLayerNameForStyle(hs); std::string layerId = SvgLayerId(layerName, hv); + RgbaColor layerColor = Style::Color(hs, /*forExport=*/true); fprintf(f, - " \r\n", - layerId.c_str(), layerName.c_str(), layerName.c_str()); + " \r\n", + layerId.c_str(), layerName.c_str(), layerName.c_str(), + layerColor.red, layerColor.green, layerColor.blue); fprintf(f, "%s", it->second.c_str()); fprintf(f, " \r\n"); diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index c560a5ac..ea8fd152 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -5,6 +5,8 @@ //----------------------------------------------------------------------------- #include "solvespace.h" #import +#include +#include using namespace SolveSpace; @@ -63,6 +65,15 @@ - (void)run { return label; } +static bool IsFileDialogDebugEnabled() { + static int enabled = -1; + if(enabled == -1) { + const char *env = std::getenv("TOOLTIME_FILE_DIALOG_DEBUG"); + enabled = (env != nullptr && std::strcmp(env, "0") != 0) ? 1 : 0; + } + return enabled == 1; +} + //----------------------------------------------------------------------------- // Fatal errors //----------------------------------------------------------------------------- @@ -1428,17 +1439,65 @@ void SuggestFilename(Platform::Path path) override { } void FreezeChoices(SettingsRef settings, const std::string &key) override { + NSString *directory = nsPanel.directoryURL.path; + if(directory == nil && nsPanel.URL != nil) { + directory = nsPanel.URL.URLByDeletingLastPathComponent.path; + } + if(directory == nil) { + directory = @""; + } + + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] FreezeChoices key=%s folder=%s", key.c_str(), [directory UTF8String]); + } + settings->FreezeString("Dialog_" + key + "_Folder", - [nsPanel.directoryURL.absoluteString UTF8String]); + [directory UTF8String]); } void ThawChoices(SettingsRef settings, const std::string &key) override { - nsPanel.directoryURL = - [NSURL URLWithString:Wrap(settings->ThawString("Dialog_" + key + "_Folder", ""))]; + NSString *savedFolder = Wrap(settings->ThawString("Dialog_" + key + "_Folder", "")); + if(savedFolder.length == 0) { + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] ThawChoices key=%s folder=", key.c_str()); + } + return; + } + + NSURL *directoryURL = nil; + if([savedFolder hasPrefix:@"file://"]) { + directoryURL = [NSURL URLWithString:savedFolder]; + } else { + directoryURL = [NSURL fileURLWithPath:savedFolder isDirectory:YES]; + } + + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] ThawChoices key=%s folder_raw=%s url=%s", + key.c_str(), [savedFolder UTF8String], + directoryURL != nil ? [directoryURL.absoluteString UTF8String] : ""); + } + + if(directoryURL != nil) { + nsPanel.directoryURL = directoryURL; + } } bool RunModal() override { - if([nsPanel runModal] == NSModalResponseOK) { + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] RunModal begin panel=%p dir=%s name=%s", + (__bridge void *)nsPanel, + nsPanel.directoryURL != nil ? [nsPanel.directoryURL.absoluteString UTF8String] : "", + [nsPanel.nameFieldStringValue UTF8String]); + } + + NSInteger response = [nsPanel runModal]; + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] RunModal end panel=%p response=%ld url=%s", + (__bridge void *)nsPanel, (long)response, + nsPanel.URL != nil ? [nsPanel.URL.absoluteString UTF8String] : ""); + } + + if(response == NSModalResponseOK) { return true; } else { return false; @@ -1487,21 +1546,31 @@ void AddFilter(std::string name, std::vector extensions) override { desc += extension; } std::string title = name + " (" + desc + ")"; - if(nsFilters.count == 1) { + if(ssAccessory != nil && nsFilters.count == 1) { [ssAccessory.button removeAllItems]; } - [ssAccessory.button addItemWithTitle:Wrap(title)]; - [ssAccessory.button synchronizeTitleAndSelectedItem]; + if(ssAccessory != nil) { + [ssAccessory.button addItemWithTitle:Wrap(title)]; + [ssAccessory.button synchronizeTitleAndSelectedItem]; + } + + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] Save AddFilter title=%s ext_count=%d total_filters=%d accessory=%s", + title.c_str(), (int)extensions.size(), (int)nsFilters.count, + ssAccessory != nil ? "yes" : "no"); + } } void FreezeChoices(SettingsRef settings, const std::string &key) override { FileDialogImplCocoa::FreezeChoices(settings, key); - settings->FreezeInt("Dialog_" + key + "_Filter", ssAccessory.index); + settings->FreezeInt("Dialog_" + key + "_Filter", (ssAccessory != nil) ? ssAccessory.index : 0); } void ThawChoices(SettingsRef settings, const std::string &key) override { FileDialogImplCocoa::ThawChoices(settings, key); - ssAccessory.index = settings->ThawInt("Dialog_" + key + "_Filter", 0); + if(ssAccessory != nil) { + ssAccessory.index = settings->ThawInt("Dialog_" + key + "_Filter", 0); + } } bool RunModal() override { @@ -1524,6 +1593,10 @@ FileDialogRef CreateOpenFileDialog(WindowRef parentWindow) { std::shared_ptr dialog = std::make_shared(); dialog->nsPanel = nsPanel; + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] CreateOpenFileDialog panel=%p", (__bridge void *)nsPanel); + } + return dialog; } @@ -1531,15 +1604,51 @@ FileDialogRef CreateSaveFileDialog(WindowRef parentWindow) { NSSavePanel *nsPanel = [NSSavePanel savePanel]; nsPanel.canSelectHiddenExtension = YES; - SSSaveFormatAccessory *ssAccessory = - [[SSSaveFormatAccessory alloc] initWithNibName:@"SaveFormatAccessory" bundle:nil]; - ssAccessory.panel = nsPanel; - nsPanel.accessoryView = [ssAccessory view]; + SSSaveFormatAccessory *ssAccessory = nil; + NSString *saveAccessoryNibPath = + [NSBundle.mainBundle pathForResource:@"SaveFormatAccessory" ofType:@"nib"]; + if(saveAccessoryNibPath == nil) { + static bool warnedMissingSaveAccessoryNib = false; + if(IsFileDialogDebugEnabled() && !warnedMissingSaveAccessoryNib) { + dbp("NOTE: SaveFormatAccessory.nib not present in app bundle; using default save panel."); + warnedMissingSaveAccessoryNib = true; + } + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] CreateSaveFileDialog accessory unavailable panel=%p", (__bridge void *)nsPanel); + } + } else { + @try { + ssAccessory = [[SSSaveFormatAccessory alloc] initWithNibName:@"SaveFormatAccessory" bundle:nil]; + NSView *accessoryView = [ssAccessory view]; + if(accessoryView != nil) { + ssAccessory.panel = nsPanel; + nsPanel.accessoryView = accessoryView; + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] CreateSaveFileDialog loaded SaveFormatAccessory nib panel=%p", (__bridge void *)nsPanel); + } + } else { + dbp("WARNING: failed to load SaveFormatAccessory nib; using default save panel."); + ssAccessory = nil; + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] CreateSaveFileDialog accessory missing panel=%p", (__bridge void *)nsPanel); + } + } + } @catch(NSException *ex) { + dbp("WARNING: exception while loading SaveFormatAccessory nib (%s); using default save panel.", + [[ex description] UTF8String]); + ssAccessory = nil; + if(IsFileDialogDebugEnabled()) { + dbp("[mac-dialog] CreateSaveFileDialog accessory exception panel=%p", (__bridge void *)nsPanel); + } + } + } std::shared_ptr dialog = std::make_shared(); dialog->nsPanel = nsPanel; dialog->ssAccessory = ssAccessory; - ssAccessory.filters = dialog->nsFilters; + if(ssAccessory != nil) { + ssAccessory.filters = dialog->nsFilters; + } return dialog; } @@ -1634,6 +1743,7 @@ - (void)applicationTerminatePrompt { namespace Platform { static SSApplicationDelegate *ssDelegate; +static std::shared_ptr fallbackAppMenu; std::vector InitGui(int argc, char **argv) { std::vector args = InitCli(argc, argv); @@ -1655,14 +1765,73 @@ - (void)applicationTerminatePrompt { // https://stackoverflow.com/questions/52154977/how-to-get-rid-of-enter-full-screen-menu-item [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"]; - [NSBundle.mainBundle loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil]; + bool loadedMainMenuNib = + [NSBundle.mainBundle loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil]; + if(!loadedMainMenuNib) { + dbp("WARNING: failed to load MainMenu nib; creating fallback menu bar."); + + NSMenu *menuBar = [[NSMenu alloc] initWithTitle:@""]; + NSMenuItem *appMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; + [menuBar addItem:appMenuItem]; + + NSString *appName = [NSProcessInfo processInfo].processName; + std::string aboutLabel = "About "; + aboutLabel += [appName UTF8String]; + + fallbackAppMenu = std::make_shared(); + fallbackAppMenu->AddItem(aboutLabel, []() { + SS.MenuHelp(Command::ABOUT); + }, /*mnemonics=*/false); + fallbackAppMenu->AddSeparator(); + + NSMenu *appMenu = fallbackAppMenu->nsMenu; + [appMenu addItemWithTitle:[@"Hide " stringByAppendingString:appName] + action:@selector(hide:) + keyEquivalent:@"h"]; + + NSMenuItem *hideOthersItem = + [appMenu addItemWithTitle:@"Hide Others" + action:@selector(hideOtherApplications:) + keyEquivalent:@"h"]; + hideOthersItem.keyEquivalentModifierMask = + NSEventModifierFlagCommand | NSEventModifierFlagOption; + + [appMenu addItemWithTitle:@"Show All" + action:@selector(unhideAllApplications:) + keyEquivalent:@""]; + [appMenu addItem:[NSMenuItem separatorItem]]; + + NSMenuItem *quitItem = + [[NSMenuItem alloc] initWithTitle:[@"Quit " stringByAppendingString:appName] + action:@selector(terminate:) + keyEquivalent:@"q"]; + [appMenu addItem:quitItem]; + [menuBar setSubmenu:appMenu forItem:appMenuItem]; + [NSApp setMainMenu:menuBar]; + } + + // In non-NSApplicationMain startup we must explicitly finish launching. + [NSApp finishLaunching]; + [NSApp activateIgnoringOtherApps:YES]; NSArray *languages = NSLocale.preferredLanguages; + bool localeMatched = false; for(NSString *language in languages) { - if(SolveSpace::SetLocale([language UTF8String])) break; + const char *lang = [language UTF8String]; + bool matched = SolveSpace::SetLocale(lang); + if(IsFileDialogDebugEnabled()) { + dbp("[mac-locale] try %s -> %s", lang, matched ? "matched" : "no-match"); + } + if(matched) { + localeMatched = true; + break; + } } - if(languages.count == 0) { - SolveSpace::SetLocale("en_US"); + if(!localeMatched) { + bool fallback = SolveSpace::SetLocale("en_US"); + if(IsFileDialogDebugEnabled()) { + dbp("[mac-locale] fallback en_US -> %s", fallback ? "matched" : "no-match"); + } } return args; diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 6b70cbbf..54ce84eb 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -566,18 +566,12 @@ bool SolveSpaceUI::GetFilenameAndSave(bool saveAs) { if(saveAs || saveFile.IsEmpty()) { Platform::FileDialogRef dialog = Platform::CreateSaveFileDialog(GW.window); - // FIXME(emscripten): - dbp("Calling AddFilter()..."); dialog->AddFilter(C_("file-type", "SolveSpace models"), { SKETCH_EXT }); - dbp("Calling ThawChoices()..."); dialog->ThawChoices(settings, "Sketch"); if(!newSaveFile.IsEmpty()) { - dbp("Calling SetFilename()..."); dialog->SetFilename(newSaveFile); } - dbp("Calling RunModal()..."); if(dialog->RunModal()) { - dbp("Calling FreezeChoices()..."); dialog->FreezeChoices(settings, "Sketch"); newSaveFile = dialog->GetFilename(); } else { @@ -1187,6 +1181,10 @@ void SolveSpaceUI::MenuHelp(Command id) { case Command::ABOUT: Message(_( +"Build: %s %s\n" +"Snapshot: %s\n" +"Git revision: %s\n" +"\n" "This is SolveSpace version %s.\n" "\n" "For more information, see http://solvespace.com/\n" @@ -1202,7 +1200,7 @@ void SolveSpaceUI::MenuHelp(Command id) { "Andrew Sinclair \n" "\n" "© 2008-%d Jonathan Westhues and other authors.\n"), -PACKAGE_VERSION, 2023); +__DATE__, __TIME__, SNAPSHOT_VERSION, GIT_REVISION, PACKAGE_VERSION, 2023); break; case Command::GITHUB: diff --git a/wishlist.txt b/wishlist.txt index f9db34a3..2e18ecb2 100644 --- a/wishlist.txt +++ b/wishlist.txt @@ -5,6 +5,7 @@ a request to import a plane thing make export assemble only contours in same group rotation of model view works about z of first point under cursor a way to kill a slow operation +mac cross-build: generate or package MainMenu/SaveFormatAccessory nib resources on a mac host step ----- rounding, as a special group