pax_global_header00006660000000000000000000000064141175743140014521gustar00rootroot0000000000000052 comment=f4d85aa2c83eba783f7217938720517130b79a51 thonny-3.3.14/000077500000000000000000000000001411757431400131305ustar00rootroot00000000000000thonny-3.3.14/CHANGELOG.rst000066400000000000000000001656521411757431400151700ustar00rootroot00000000000000=============== Version history =============== 3.3.14 (2021-08-01) =================== * Fix problems in org.thonny.Thonny.appdata.xml * Allow assigning Python coloring for Python-like files, #1927 * Increase the initial top coordinate of Thonny's main window. Fixes problem of Thonny's title bar being hidden by the system menubar, #1925 3.3.13 (2021-07-25) =================== * Update org.thonny.Thonny.appdata.xml 3.3.12 (2021-07-25) =================== * Restore syncing to localtime for RPi Pico (fixed regression introduced in 3.3.11), #1886 * Fix installing from requirements.txt in MicroPython, #1879 * Allow specifying different colors for method and function calls, by Jonathan Campbell, #1884 * Extend editor API for plug-ins (close event and content load/save hooks), by Nicolas Despres, #1891 * Fix technical errors in some translations, by Karolina Surma, #1895 * Warn when inputting non-ascii chars in MicroPython, #1911 * Fix installing for all users in Windows installer, #1119 and #1909 * Prepare Thonny for Flatpak, by Jordan Williams, #1900 and #1912 * Update Polish translation 3.3.11 (2021-06-25) =================== * Fix MicroPython management errors when user code shadows built-in names, #1856 * Fix package manager getting frozen when installing packages, #1871 * Fix problem of MicroPython package manager taking module names for distribution names, #1833 * Fix ugly error in ESP flasher dialog when esptool is not found, #1837 * Fix Tkinter error when using venv created from bundled Python, #1835 * Use 0..6 for weekday when synchronizing RTC via machine, #1868 * Make esptool auto-detect chip type, #1838 * Fix Unix MicroPython time validation (misdiagnosed time offset) * Update dependencies in Thonny+Python bundles * Update Spanish, Polish, Chinese (TW) translations 3.3.10 (2021-05-18) =================== * Restore Python 3.6 compatibility of minipip, #1541 * Fix missing libffi6 error in Linux builds, #767 3.3.9 (2021-05-18) ================== * Don't copy egg-info directories to target location when installing pip-compatible packages for MicroPython, #1541 3.3.8 (2021-05-18) ================== * Support installing regular pip-compatible packages to MicroPython or CircuitPython (so far only upip-compatible packages were supported), #1541 * Fix "error 403" problems when installing MicroPython packages from PyPI, #1822 * Fix error when Object inspector is open and a MicroPython object can't be found by id, #1796 * Reduce memory usage by Thonny's MicroPython helper (store last REPL value in global _ instead of storing N last values in a list), #1797, #1798 * Upgraded several dependencies in binary bundles 3.3.7 (2021-04-30) ================== * Make confugration dialog larger to find French strings, by sourceperl, #1694 * Fix "_prepare_after_soft_reboot" error in Unix MicroPython mode, #1715 * Support interactive programs with Unix MicroPython, #1725 * Fix read-only filesystem error for CircuitPython in non-English variants of CircuitPython, #1662 * Fix error on right clicking in local file explorer with Italian translation, #1713 * Fix back-end switcher menu position and theme, #1719, #1720 * Fix "pop from empty list" error when MicroPython is having problems, #1586 * Fix MYPYPATH / MyPy not working, #1124 * Highlight unclosed strings even inside unclosed parens, #1770 * Fix problem running code via WebREPL, #1762 * Make Outline show also async, defs #1787 * Don't show full error info when ManagementError doesn't seem to be Thonny's fault, #1788 * Don't show error dialog when querying globals fails (error is shown on the variables table instead), #1789 * Recover from corrupted rpc.sock ("invalid literal for int() with base 10" error), #1745 * Add 3 translated Help files for Spanish, by José Carlos García, #1759 * Add Korean translations of Help files, by Hyungseok Choi, #1758 * Add first version of Finnish translation by Lrasinen * Update translations for Albanian, French, Korean 3.3.6 (2021-03-03) ================== * Fix crash in Shell when negative int-s are evaluated in MicroPython (regression introduced in 3.3.4), #1670 * Fix problems with wm_overrideredirect on macOS with Tk 8.6.11, #1659 * Fix crash in Plotter when more than 10 numbers are plotted, #1648 * Hide unsuitable PYTHONPATH environment variable in macOS, #1651 3.3.5 (2021-02-22) ================== * Fix too short reprs at MicroPython REPL (regression introduced in 3.3.4), #1627 * Fix incorrect presentation of long output lines, #1628 * Fix error in nicer debugger when stepping in generators, #1631 * Fix infinite recursion error when evaluating `globals()` in MicroPython REPL while object inspector is open, #1641 * Update Greek translation 3.3.4 (2021-02-17) ================== * CHANGED: MicroPython time synchronization now sets RTC to local time instead of UTC. This can be changed via a hidden configuration option (https://github.com/thonny/thonny/wiki/MicroPython#advanced-configuration), #1603 * Add time synchronization for RaspberryPi Pico, #1563, #1592 * Skip loading obsolete thonny-pico plug-in, which is now built in, #1575 * Get rid of misleading SSL warning in micropip.py and show a warning about non-MicroPython packages, #1621 * Fix WebREPL connection for MicroPython 1.14 by using regular paste mode instead of the new raw-paste mode, #1613 * Delay importing jedi and asttokens for improved performance, #1556 * Don't assume "dialout" group is required when MicroPython connection fails with permission error, #1286 * Reduce the memory usage of showing global variables by capping object representations to 50 first characters in MicroPython, #1582 * Add Hungarian translation (by Laszlo Kocsis) * Updated translations for German, Korean, Italian, Dutch (by various authors) 3.3.3 (2021-01-21) ================== * Add MicroPython support for Raspberry Pi Pico (https://www.raspberrypi.org/blog/raspberry-pi-silicon-pico-now-on-sale/) * Better support for MicroPython daily builds, #1545, #1553 * Automatically prepend relevant Anaconda directories to PATH. Fixes problem with importing Anaconda's numpy, #1522 * Make custom Python chooser see more interpreters, #1522 * Fix several spelling mistakes, by freddii, #1534 * Update toolbar buttons, when another editor gets selected, fixes wrong button states, #1536 * Catch errors when opening file in system app, #1526 * Fix internal error while using Outline View, #1543 * Fix truncated System Shell environment on macOS, #1529 * Add /usr/local/bin to the PATH of the back-end process if missing, #1131 * Fix error while parsing Pygame Zero error, #1535 * Fix MicroPython completion errors with jedi 0.18, #1560 * Add incomplete Korean language by Augene J. Pak, Fabianus.c, Suk-Hyung Hwang, YEON, $1531 * Add incomplete Albanian translation by Algent Albrahimi * [Technical] Allow older Send2Trash (Fedora doesn't have version 1.5 of this) * [Technical] Remove erroneous executable flags from some files 3.3.2 (2021-01-06) ================== * Fix the problem of missing docstrings, #1481 * Fix MicroPython management error after executing machine.reset(), #1492 * Add support for MicroPython raw paste mode (usable in MicroPython 1.14+), #1498 * Restore MicroPython raw mode as fallback, should fix problems with M5Stick and W600, #1516 * Add syntax highlighting for non-decimal number literals and support underscores, #1482 by Stefan Rothe * Make sure all output from the program gets presented, #1504 * Interrupt current program when running a MicroPython script, #1512 * Add support for Jedi 0.18, #1497 * Fix arguments completions for jedi 0.16+, #1511 * Make micro:bit support a bit more robust, #1515 * Add Persian (Farsi) translation by Farshid Meidani * Add Slovak translation by jose1711 * Add Armenian translation by Avag. sayan * Update Italian and Chinese (TW) translations 3.3.1 (2020-12-06) ================== * Allow installing MicroPython to micro:bit v2 * Fix problem with MicroPython programs creating lot of output very quickly, #1419 * Fix wrong message when saving to MP and device is busy, #1437 * Bump Pyserial version from 3.5b1 to 3.5, fix problem with some ESP devices, #1443 * Fix error when trying to download file from microbit, #1440 * Don't assume anything about conf files in Pi theme, #1436 * Fix error on reseting MicroPython device, #1442 * Fix unwanted output from expession statements in MicroPython, #1441 * Treat double-click in the remote file dialog differently from double-click in the Files view, #1432 * Fix error when closing MP file dialog without name, #1431 * Refactor "File => Rename" command (new label "Move / rename" and you can't "rename" a file on MP device to a file on local disc and vice versa), #1446 * Fix broken links in help pages, #1447 * Use THONNY_USER_DIR/temp for temp files. Fixes printing when default browser is Snap Chrome, #1435 * Fix error when clicking on "Attributes" tab on Object Inspector when no object is selected (MP) #1450 * Updated translations (Spanish an Brasilian Portuguese) * Allow specifying DTR/RTS for serial connection (to avoid restarting ESP on connect), #1462 * Open log window automatically if work dialog encounters error, #1466 * Don't close work dialog automatically if log window is opened, #1465 * Fix dummy MicroPython packages giving ugly errors, #1464 * Fix crashes in Assistant view with Dracula theme, #1463 * Work around Caps lock problem when binding command shortcuts, #1347 3.3.0 (2020-11-15) ================== New & changed ------------- * Removed automatic tabs => spaces conversion and its confirmation dialog, #599 * Added command for replacing tabs with spaces, #1411 * Added option for highlighting tabs (Tools => Options => Editor), #1409 * Added option for indenting with tabs (Tools => Options => Editor), #599 * Add an option to use Tk file dialogs instead of Zenity in Linux, #1404 * Reduce max repr length for MicroPython (1000 instead of 5000) * Forward https_proxy or http_proxy variable to pip, #535 * Allow specifying environment variables for the UI process, #1421 * Remove special support for Friendly-traceback, #1416 * Use exclusive access when connecting to a MP device over a serial port, #1418 Fixes ----- * Make sure expression box for while/for test is located properly, #1134 * In MicroPython backends only warn about failed epoch dectection if sync or validation is required * Don't show ugly traceback in debug mode * Internal error while debugging exceptions, #1403 * Automatically create Thonny user dir in remote machine, #1365 * Fix MicroPython uploading/downloading when started from an expanded dir, #1398 * Fix unrensponsive UI when MicroPython is printing in infinite loop, #1419 * Fix ugly stacktrace, when MicroPython device is disconnected during processing a command, #1420 New and updated translations ---------------------------- * Czech by Petr. moses and Radim * Romanian by Pop Vasile Alexandru * Norwegian (Bokmål and Nynorsk) by Gabriel Slørdahl * Updated Portuguese (BR) by Marcelo de Gomensoro Malheiros * Updated French, Polish, Greek, Spanish, Italian 3.3.0b7 (2020-11-01) ==================== * Add default black fg color to tooltips, #1381, by adzierzanowski * Use paste-mode instead of raw repl for executing code on MP devices, #1386 * Use WebREPL file protocol for uploading files, #1387 * Hide underscored names from autocomplete suggestions unless user already typed '_', #1382, by adzierzanowski * Add command to filebrowser menu for toggling hidden files, #1292 * Fix Unconnected network drive shorcuts make Files explorer broken #1333 * Don't allow save as a file which is already opened, #1310 * Color self and cls like builtins, #1080 * Soft-reboot MicroPython before "Run current script", #1393 * Fix error in clearing squeezed boxes, #1091 * Enhance upload/download dialogs, #1395 * Make "Open System shell" open ssh with remote back-ends * Make "Open System shell" open miniterm with MicroPython back-ends, #1287 * Better interrupt for download, #1320 3.3.0b6 (2020-10-19) ==================== * Clean up backend-switcher menu. 3.3.0b5 (2020-10-19) ==================== * Fixed a regression introduced in b4 -- Thonny crashed on launch when data directory didn't exist yet. 3.3.0b4 (2020-10-18) ==================== New --- * Statusbar with backend switcher, #1356 * Firmware flasher for CircuitPython, #1375, #1351 * Updated firmware flasher for micro:bit, #1351 Changed ------- * Refactor alternative interpreter configuration page, #1079 Fixed ----- * Don't choke when MP management output is wrapped between user input, #1346 * Include ampersand in URL regex in the Shell, #1323 * Dialogs may end up behind the main window, #1158, #1133 * Augment LD_LIBRARY_PATH instead of replacing it, #1008 * Fix "Install from requirements.txt" error, #1344 * File dialog should scroll to top when new folder gets selected, #1345 * Improve MicroPython file write reliability, #1355 * Fix CircuitPython directory creation * Allow selecting venv 'activate' instead of interpreter symlink in the interpreter configuration page, #1079 Technical --------- Improve diagnostic logging, #569 3.3.0b3 (2020-09-07) ==================== * Stop/Restart command now soft-reboots MicroPython device after reaching the prompt * Fixed problem with saving SSH password 3.3.0b2 (2020-09-03) ==================== * Fixed problem with circular imports affecting Python 3.7 * Restored Python 3.5 compatibility 3.3.0b1 (2020-09-03) ==================== New --- * Back-end for remote Python over SSH (try editing and running remote and local scripts and upload/download in the file browser; package manager, system shell, and debuggers don't work yet) * Back-end for remote Unix MicroPython over SSH * Back-end for local Unix MicroPython * Package manager for MicroPython (using micropip.py by Peter Hinch), #1299, see https://forum.micropython.org/viewtopic.php?f=15&t=8787&start=14 * Support Object inspector with MicroPython back-ends, #1309 * Thonny now synchronizes real-time clock of MicroPython devices on connect and before each file operation, #1004 * Allow editing any file as plain text, #1305 * File browser now allows setting default action by extension (open in system default app or in Thonny's editor), #1305 * ESP flash dialog now allows selecting flash mode, #1056 by Rune Langøy * "Save all" command, #1053 by Syed Nasim * Clicking on a value in the Shell selects it and opens in the Object inspector. * By default, after evaluating an expression in the Shell the value will be automatically shown in the Object inspector (if open). See Options => Shell to turn it off. * Object inspector now display more information about numbers (try 1024 or 0.1), #1230 * Support evaluating several expressions at once in the Shell (just like official Python REPL), #795 * Include esptool in binary bundles Changed ------- * Package manager now searches PyPI instead of requiring exact package name, #1300 * File browser now shows remote files below local files. This way local pane won't jump around when switching between local and remote back-ends. * TECHNICAL: Versions of serveral dependencies were updated Fixed ----- * Several intermittent bugs related to fragility of the communication with MicroPython REPL, #1103, #1147 * #1138: Allow semicolon in Shell input with Python 3.8 * #1129: Support terminator as system shell * #772: Allow invoking interrupt command from the menu when the editor has text selected (Ctrl+C would copy then) * #1146, #1159: "No module named pwd" error * #1283: Disable save button after save * Make Replayer work with timestamps without fractional part, #1116 * Don't raise exception when hitting end of undo/redo stack, #1211 by Andrew Scheller * Fix a typo in the code to display dialog. (#1260 by Ankith) Enhanced -------- * Convert keypad movement events to equivalent non-keypad ones, #1107 by Eliot Blennerhassett * Start file-open-dialog in same dir as current file, #1209 by Andrew Scheller * Bash install - do everything inside a new directory (#1203 by Andrew Scheller) * #1145: Provide understandable error message, when Linux installer downloader is run on a non-supported platform (by Andrew Scheller) 3.2.7 (2020-01-22) ================== * TECHNICAL: Skip name hilighter tests for recent Jedi versions 3.2.6 (2020-01-01) ================== * FIXED #1035: Make highlight names work with recent Jedi versions * FIXED #1043: Can't load files from MicroPython device (regression introduced in 3.2.5) * FIXED: Missing "Local files" label on save target selection dialog 3.2.5 (2019-12-25) ================== * CHANGED: Python version in binary bundles upgraded from 3.7.5 to 3.7.6 * CHANGED: MyPy checks are now enabled by default (Tools => Options => Assistant) * CHANGED: New Pylint checks are enabled * UPDATED #32: Thonny can now display/copy/paste Unicode emojis with Python 3.7.6+ / 3.8.1+ in Windows and Linux. Selection can be still wonky, though and emojis can freeze Thonny on macOS. Fixed by https://github.com/python/cpython/pull/16545 * FIXED #815: "Open System Shell" fails when no script is open * FIXED #973: Scrollbar in Help and Assistant acts funny * FIXED #1019: Crash on startup when Shell gets text inserted too soon * FIXED #1023: Accept code completions without parent and full_name * FIXED #1025: Extra imports by Thonny's back-end make stdlib name shadowing more troublesome * FIXED #1026: Allow '+' in image data URI chars in Shell * FIXED #1028: Thonny now has preliminary support for `Friendly Traceback `_. * FIXED: Allow larger images in shell (don't squeeze image URI-s), #401 * FIXED: Fallback to English, when configured language can't be loaded * FIXED: Problem using esptool on PATH 3.2.4 (2019-12-07) ================== * NEW: Turkish translation by M. Burak Kalkan * NEW: Polish translation by Jarek Miszczak * NEW: Partial Italian translation by sailslack * UPDATED: Greek and Spanish translations * CHANGED: XXL bundle now includes also pandas * CHANGED: Make faster tracer show exceptions only with step_over and step_into * CHANGE #1018: Use traditional stack view by default in Simple mode * ENHANCEMENT: Improved performance for Faster debugger (proposed and supported by Raspberry Pi) * FIXED #975: Fix stepping through lambdas with faster debugger * FIXED #977: Don't report certain exceptions in faster debugger * FIXED #983: Propose replacing tabs with spaces only in the editor (not in debugger frames) * FIXED #986: Nicer debugger fails when run with breakpoints only in secondary files * FIXED #987: MicroPython autocomplete problems by adzierzanowski * FIXED #1003: Wrong interpretation of MicroPython file timestamps * FIXED #1005: Avoid testing included MicroPython stubs * FIXED #1015: Indicate disabled toolbar buttons on macOS 3.2.3 (2019-11-03) ================== * NEW: Greek translation by Nikos * UPDATE: Updated several translations (by Vytenis, rnLIKEm, Dleta, Alex ANDRÉ, NathanBnm, LionelVaux, Paul, Eric W, Frank Stengel, ...) * UPDATE: Propose opening files via dialog in case of macOS Catalina permission error (#813). 3.2.2 (2019-11-01) ================== * NEW: ESP plug-in has been merged into main Thonny package * FIXED #219: Implement sending EOF / restart for CPython * FIXED #873: More robust color preference loading in Pi theme * FIXED #876: Don't step into comprehension calls * FIXED #897: Redo shortcut not working in Linux and Mac * FIXED #899: Can't set THONNY_USER_DIR in customize.py * FIXED #904: Don't show remote MicroPython dialogs when device is busy * FIXED #905: Problems with Thonny menu on Mac after closing a dialog * FIXED #911: Allow restoring default scaling factor * FIXED #921: Make MicroPython backend play nicer with device resets * FIXED #923: CircuitPython on Trinket m0 gives small int overflow when listing files * FIXED #925: Save or open problem with network paths * FIXED #927: Visual glitch / ghosting in Expression Box in macOS * FIXED #928: Tooltips stay on top in macOS * FIXED #929: Indicate dirty state in macOS close button * FIXED #933: Scaling doesn't work right for Treeviews (Files, Variables) * FIXED #934: Pad button captions for certain languages * FIXED #936: Problem uploading files to some STM boards * FIXED #939: More robust handling of different line endings * FIXED #943: Wrong syntax highlighting with triple quoted string * FIXED #946: Handle broken UTF-8 codepoints in MicroPython output * FIXED #951: Use standard tabstops for program output * FIXED #953: Allow running system commands with MP back-end * FIXED #957: Wrong encoding in multiprocessing output * FIXED #960: File browser is not working in replayer * FIXED #966: Thonny encounters "internal error" in programs calling exit() * FIXED #969: Provide nicer message, when MicroPython backend can't get to the REPL * FIXED: Don't apply theming to menu in macOS (menu items were dull with dark themes) 3.2.1 (2019-09-06) ================== * NEW: Add European Portuguese translation (by Emanuel Angelo) * NEW: Add Lithuanian translation (by Vytenis) * NEW: Add Ukrainian translation (by borpol) * FIXED #802: Avoid scary traceback on MicroPython disconnect * FIXED #840: Problems with file dialogs in macOS 10.15 * FIXED #843: Make right-click select items in Files view in macOS * FIXED #845: Crash with older ESP plug-in * FIXED #851: Ignore warnings when exporting variables * FIXED #854: Make single instance mode work in multi-user systems * FIXED #855: Wrong coloring with paren matching * FIXED #859: Support relative paths when opening files with Thonny from command line * FIXED #874: Multiline strings break stepping focus background * FIXED: Dutch translation was inproperly set up * FIXED: Internal error in Object Inspector (by Emanuel Angelo) * FIXED: Problem with compacting user event logs * TECHNICAL: Make tests run with Python 3.8 3.2.0 (2019-08-12) ================== * FIXED #849: Uploading single file to MicroPython doesn't work * UPDATE: Updated translations 3.2.0rc1 (2019-08-09) ===================== * NEW: Several new commands for Files view (New directory, Move to Trash, Delete, Upload (to MicroPython device), Download (from MicroPython device), ...) * CHANGED: MicroPython files are now displayed in the upper pane of Files view * CHANGED: Saving or loading editor content to/from MicroPython device displays progress bar * TECHNICAL: New dependency: Send2Trash 3.2.0b7 (2019-07-19) ==================== * FIXED: Problem with translation markers disturbing import 3.2.0b6 (2019-07-19) ==================== * NEW: BBC micro:bit plug-in has been merged into main Thonny package * CHANGED: micro:bit flasher now downloads latest MicroPython from GitHub * FIXED: Problems with micro:bit file browser * FIXED #808: multiprocessing doesn't work in Windows * FIXED #814: Ctrl+V inserts text twice in Windows (regression introduced in previous betas) 3.2.0b5 (2019-07-16) ==================== * FIXED #810: Use regular spacing in simple mode toolbar 3.2.0b4 (2019-07-14) ==================== * FIXED #809: Advertise indent/dedent in Edit menu * FIXED: Marked more terms for translation * FIXED: Updated Estonian translation 3.2.0b3 (2019-07-13) ==================== * FIXED #803: %cd gives error on MP/CP backend * FIXED #804: Changing directories does not show in FilesView for MP/CP * FIXED #805: Thonny user dir was not created at startup 3.2.0b2 (2019-07-13) ==================== * NEW: Former thonny-pi plug-in (containing Raspberry Pi theme) is now part of main Thonny package * NEW: Former thonny-circuitpython plug-in (containing CircuitPython back-end) is now part of main Thonny package * NEW: pip GUI now allows installing from requirements.txt file * NEW: Portable/thumbdrive bundles for Windows, macOS and Linux (https://github.com/thonny/thonny/wiki/DeploymentOptions#portable-version) * FIXED #188: Tkinter windows won't close on macOS * FIXED #361: Include Python development files in binary bundles * FIXED #488: Modal dialogs may get stuck * FIXED #639: Unset misleading environment variables in Windows launcher * FIXED #676: Can't close matplotlib window when MacOSX backend is used * FIXED #706: In Linux Thonny hangs on close sometimes * FIXED #800: Can't load large files * FIXED: Plotter now listens for theme changes (ie. changes background without restart) * CHANGED: Welcome dialog is not show on Raspberry Pi * CHANGED: Usage event logging is now disabled by default and can be enabled in Tools => Options => General * CHANGED: MicroPython back-ends don't interrupt running process on connecting * TECHNICAL: MicroPython back-end got a big refactoring 3.2.0b1 (2019-06-17) ==================== * NEW: [Work in progress] UI and help content can be translated to other languages (big thanks to cspaier, Georges Khaznadar and translators). See docs/translate.md for contrubution instructions. * NEW: Shell supports ANSI color codes and line overwriting with ``\b`` and ``\r``. See "Help => Shell" for more info. * NEW: Shell now has extension called "Plotter", which visualizes series of numbers printed to the standard output. See "Help => Plotter" for more info. * NEW: Shell presents PNG data URL-s printed to stdout as images. Try print("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==") * NEW: Automatic change of working directory is now optional (Tools => Options => Run & Debug) * NEW: Files view now allows setting working directory (double-click on folder name) * NEW: Files view allows browsing device's filesystem with MicroPython back-ends * NEW: Files from MicroPython devices can be opened in the editor and edited directly * NEW: You can now choose which debugger is invoked when clicking on the "Debug" toolbar button (Tools => Options => Run & Debug) * NEW: On first run Thonny presents a dialog for selecting UI language and initial settings ("standard" or "Raspberry Pi"). With Raspberry Pi settings Thonny will start in simple mode, preferred debugger set to "faster" and UI theme set to "Raspberry Pi". * NEW: Shell IO font can be configured (Tools => Options => Fonts & Themes). By André Roberge * NEW: Support for running Flask programs with F5. Also fixed several issues which prevented running and debugging Flask programs. See "Help => Web development with Flask" for more info. * NEW: "File => Save copy" allows saving current editor content to a different location without changing editor file name. * FIXED #630: Pressing up then down in shell doesn't leave shell in previous state. Fixed by Chad Purdy * FIXED #691: No Show shell on run with no input() prompt. Fixed by Chad Purdy * FIXED #692: Cancelling Save As dialog causes error. Fixed by Chad Purdy * FIXED #700: Allow viewing all files in file dialogs in Linux * FIXED #703: Exception view was not legible with dark theme * FIXED #704: Suggest current filename with Save As. Fixed by Илья Кругликов * FIXED #708: Error when stacktrace includes Cython frames. * FIXED #711: Thonny can now handle UNC paths * FIXED #719: Buttons are too narrow in Search/Replace dialog * FIXED #725: When saving a file, respect the original fileformat. By badukaire * FIXED #727: Respect fileformat for unix files too. By badukaire * FIXED #731: Right click menu disappears immediately and executes unwanted Undo action * FIXED #738: Window appears lower on each start * FIXED #749: "Focus shell" should bring you to a new prompt. By Ivoz * CHANGED: In order to work around ``tkinter.Text`` performance problems, Shell squeezes very long lines into a button. The button opens a dialog for expanding, viewing or copying those lines. Shell also deletes old output to remain responsive. * CHANGED: Various changes in simple mode (Zoom and Quit buttons, merging Run and Resume buttons, automatic display of Variables view). * CHANGED: Disabled Tk clipboard management workaround in Linux (occasionally caused UI freezes). This means clipboard becomes emptied after closing Thonny. * CHANGED: MicroPython commands from "Device" menu have been redesigned (use Files view instead) or moved to other menus (Run and Tools). The goal is to get rid of Device menu and keep only magic commands which make sense from the back-end perspective. Several of these features were proposed and supported by Raspberry Pi Foundation. 3.1.2 (2019-02-13) ================== * FIXED: Make Terminal features work in Windows again * FIXED #685: Print cuts lines * FIXED #686: Stepping over user modules can be too slow * ENHANCEMENT: Include pip in binary bundles 3.1.1 (2019-02-09) ================== * FIXED #674: Print doesn't work on Mac * FIXED #675: Make focus editor / shell shortcuts usable on Mac * FIXED #677: Debugging fails with extended slice syntax 3.1.0 (2019-01-28) ================== * NEW: "Run => Pygame Zero mode" allows running Pygame Zero programs with F5 * NEW: Support for Birdseye debugger (Run => Debug current script (Birdseye)) by Alex Hall * NEW: Notes view for writing down code snippets, task descriptions, etc. * NEW: Allow running current script in system terminal * NEW: "File => Print..." allows printing current script (via default web browser) * NEW: Shell's context menu now has editing commands * ENHANCEMENT: Open the Shell window on Run if it is not open * ENHANCEMENT: More robust support for running system commands in Thonny Shell (with ! prefix) * ENHANCEMENT: Allow switching off Pylint and/or MyPy checks * ENHANCEMENT: Make it clear how to exit Heap mode (with notification box in the upper-right corner of the main window) * FIXED #621: Holding Enter in the Shell causes a crash * FIXED #623: Parameters code completion error * FIXED #627: Debugging stops after raise statement * FIXED #628: Wrong line highlighted when stepping in for-loop * FIXED #629: Interrupting system command (!) shows ugly traceback * FIXED #633: pasting can't affect read-only text anymore * FIXED #641: Better font scaling in Linux (see Tools => Options => General for more control) * FIXED #646: Simple open file to edit from command line failing * FIXED #655: Invalid f-string crashes Assistant * FIXED #666: Make stdin iterable * FIXED: Solved several problems related to stepping through raising an exception * FIXED: Issues with automatic indentation (Thanks to Alex Hall!) * CHANGED: Use Konsole as terminal in KDE * CHANGED: "Tools => Open system shell" now shows relevant commands differently * CHANGED: Make Assistant's MyPy checks disabled by default * CHANGED: Source code now lives at GitHub (https://github.com/thonny/thonny) 3.0.8 (2018-11-15) ================== * FIXED #424: Font scaling problems in Linux * FIXED #584: Guard against bad repr calls * TECHNICAL: Reduced required pyserial version (Fedora only has 3.1) 3.0.8 (2018-11-15) ================== * FIXED #597: The directory with Python scripts may not be in path for executing system commands from shell * FIXED: Make executing shell commands compatible with Python 3.5 * FIXED: Make MyPy support compatible with older MyPy versions * FIXED: Make turtle.pyi compatible with Python 3.5 and remove Windows linebreaks * FIXED: MyPy error col offset 3.0.7 (2018-11-14) ================== * FIXED #592: MyPy doesn't work when cwd == sys.prefix * FIXED #593: No-message exceptions crash the Assistant * FIXED #595: Running system commands causes an error * FIXED #596: Arguments are ignored when running system commands from shell in Posix 3.0.6 (2018-11-13) ================== * FIXED #538: Turtle programs may give false warnings (Typeshed stubs were not packaged) * FIXED #586: Import interception mechanism fails for some modules * FIXED #591: Assistant fails when filename is missing from error info 3.0.5 (2018-10-26) ================== * FIXED #573: "Highlight matching names" and "Highlight local variables" makes editor very slow * FIXED #574: Error in outline * FIXED #578: resizing local variable pane in debugger causes error 3.0.4 (2018-10-22) ================== * FIXED #564: In Windows "Highlight local variables" and "Higlight matching names" cause Thonny to load Jedi files 3.0.3 (2018-10-21) ================== * FIXED: Regression from 3.0.2 (incomplete code refactoring) 3.0.2 (2018-10-21) ================== * FIXED #563: Problems with HeapView and EventsView * FIXED #565: Don't replace tabs in shell 3.0.1 (2018-10-17) ================== * FIXED: Problems with executing "Run" and "Debug" commands together with "cd" command * FIXED: Editor file name issues * FIXED: MicroPython %cat command failed over serial 3.0.0 (2018-10-16) ================== * CHANGED: Line numbers are now visible by default * CHANGED: Stack and Assistant views are now in the bottom-right corner * CHANGED: Shell doesn't show full path of bundled interpreters anymore * ENHANCEMENT #555: Internal errors are now shown with more suitable dialog * FIXED #170: Command+k for clearing shell in Mac * FIXED #547: Recommend "..." button when plug-ins latest stable isn't suitable for this Thonny version * FIXED #548: Prevent inconsistent use of tabs and spaces error (when pasting or opening text containing tabs, Thonny proposes to replace them with spaces) * FIXED #557: Default window size too small for simple mode * FIXED #559: Make text copied to clipboard available even after closing Thonny * FIXED: Implemented workaround for https://bugs.python.org/issue34927 * TECHNICAL: MicroPython backend now shows the source of failing internal commands 3.0.0rc1 (2018-10-08) ===================== * ENHANCEMENT: Documented several features (see Help => Help contents) * FIXED #523: Open system shell doesn't work with pip 10 * FIXED #534: Add shortcut for step-back * FIXED #538: Turtle programs give false warnings 3.0.0b6 (2018-09-30) ==================== * CHANGED: In order to avoid pollution of user home directory, the configuration file and logs are now stored in directories recommended by platform style guides (%APPDATA%/Thonny on Windows, ~/Library/Thonny on Mac and ~/.config/Thonny on Linux). Old configuration and user logs will be imported on first run. * CHANGED: "Back end" configuration page was renamed to "Interpreter" (as it was in Thonny 2.1) * CHANGED: Python version in Thonny+Python bundles upgraded to 3.7.1rc1 * NEW: File menu received a submenu for easy opening of recent files. * ENHANCEMENT: Add shortcut for clearing shell (Ctrl+L) * ENHANCEMENT: Warn when script is saved with a common library module name (eg. turtle.py) * ENHANCEMENT: Allow switching between regular and simple mode (Tools => Options => General) * FIXED #72: "View => Full screen" (in Expert mode) is now also available on Mac * FIXED #262: Add ability to select an autocomplete suggestion with TAB * FIXED #316: Nice debugger doesn't handle named arguments properly * FIXED #339: Allow disabling sound Tools => Options => General * FIXED #389: AST marker fails with dict merge * FIXED #478: Add option to reopen all files on start-up * FIXED #479: Make Thonny save configuration when "Quit"-ed on Mac * FIXED #480: Thonny now properly remembers opened files * FIXED #498: Open System Shell doesn't work on Raspberry * FIXED #501: Assistant feedback preview link doesn't work on mac * FIXED #510: Error when listing available interpreters in config page * FIXED #518: add menu item: "device" / "Upload current script" for MicroPython (by Jens Diemer) * FIXED: Object inspector can show images (again) * FIXED: Pylint and MyPy processes don't hang anymore with large output. 3.0.0b5 (2018-09-01) ==================== * FIXED: requirements.txt was missing mypy 3.0.0b4 (2018-08-31) ==================== * NEW: When program has syntax error or crashes with an exception, Assistant pane opens and tries to help diagnose the problem. Uses Pylint, MyPy and custom dynamic analysis under the hood. (Big "Thank you!" to Raspberry Pi Foundation for the support!) * ENHANCEMENT: Resizing the main window doesn't mess up views' layout anymore. * ENHANCEMENT: Better support for debugging f-strings. * ENHANCEMENT: Nice debugger now recovers better when it is not able to understand a program. * FIXED #496: Regression which caused Variables view to skip variables updates during "nicer debugging". * FIXED #440: Copy&paste over a selection will now delete the text selection first (was problem for some Linuxes) * FIXED: Removed a nasty debugging statement left into b3, which may cause a crash in the end of debugging. 3.0.0b3 (2018-08-11) ==================== * FIXED: Various problems with pip GUI * FIXED: Variables view misses events * FIXED: Error when last back-end was not available anymore * TECHNICAL: Implemented ChoiceDialog 3.0.0b2 (2018-08-11) ==================== * FIXED: problems with pip GUI in virtualenv 3.0.0b1 (2018-08-11) ==================== Note: This version is successor of 2.2.0b4 and 2.1.21. Stable release of 2.2.0 was skipped. (Incrementing the major version felt more appropriate considering the amount of new and changed features.) * NEW: Thonny now has two debug modes: beside original AST based debug mode (the "nicer" one, Ctrl+F5) there is now also line-based mode (the "faster" one, Shift+F5), which is not so intuitive but much more efficient. * NEW: Both debug modes now support breakpoints (switch on line numbers and double-click on the margin). Big thanks to Raspberry Pi Foundation for the support! * NEW: Alternative presentation for call stack (in single window, just like in most debuggers; see Tools => Options => Debugger) * NEW: Clicking on the links in stacktrace now shows the variables of those frames. * NEW: You can re-run your changed program without closing it first (relevant for graphical programs). * NEW: Checking "Run => Dock user windows" makes your Tkinter windows stay on top and appear always on the same location. This allows tweaking your turtle programs while looking at current output. * NEW: "View => Program arguments" opens a box where you can write the argument string for your program * NEW: "Tools => Options => Backend => Custom Python interpreter" now allows creating virtual environments * NEW: "Tools => Manage packages" now allows installing new packages with all CPython backends, not only virtual environments. If the backend is not a virtual environment it installs to user site packages (with `pip install --user`) * NEW: Thonny now includes basic support for MicroPython (former `thonny_microbit` plug-in). See https://bitbucket.org/plas/thonny/wiki/MicroPython for more info. * CHANGED: Upgraded Python to version 3.7.0 in Thonny+Python bundles * CHANGED: Dropped support for Python 3.4 (both for front-end and back-end) * CHANGED: Dropped support for Tk 8.5. All bundles (including Mac's) now come with Tk 8.6.8 * CHANGED: Default back-end is now "Same as front-end" (was "A special virtual environment"). This makes deployment easier in classroom setting and it is simpler scheme in general. "Special virtual environment" backend may be removed in future versions. * CHANGED: Plug-ins will be now installed to regular user site packages directory (was ~/.thonny/plugins) * CHANGED: If Thonny (front-end) is run from a virtual environment, user directory (with configuration.ini and logs) will be .thonny under virtual environment's root directory (instead of usual ~/.thonny). * ENHANCEMENT: Better Windows installer (run as administrator for all-users install) * ENHANCEMENT: thonny.exe is now digitally signed * ENHANCEMENT: On Linux Thonny now uses native file dialogs (via zenity) * ENHANCEMENT: Nicer debugger can now step into your functions defined in other modules * ENHANCEMENT: Nicer debugger can now stop before the assignement of loop variable in for-loops * ENHANCEMENT: "Run to cursor" can be called by right-clicking desired line in the editor and selecting the command from context menu * ENHANCEMENT: Great time and memory optimizations in nicer debug mode. The ability to step back in time is not so expensive anymore. * ENHANCEMENT: Thonny now detects external file modifications and proposes to reload * ENHANCEMENT: New Windows installer (run as administrator for all-users install) * FIXED #163: Uninstaller now correctly removes "Open with Thonny" context menu entry * FIXED #340: Validate geometry before loading * FIXED #358: sys.exit() in user programs doesn't show stacktrace anymore * FIXED #363: subprocess.run causes Thonny backend to hang * FIXED #375: Files are now saved with linebreaks suitable for current platform * FIXED #419: logging doesn't work in user programs * FIXED #422: Make Ctrl+C, Ctrl+V etc. work on Greek keyboard * FIXED #440: In Linux paste over selection doesn't remove the selection * FIXED #450: Locals marker doesn't work with jedi 0.12 * FIXED #468: Problem with changing backend interpreter * FIXED #471: Problem when Thonny uses jedi 0.11 or newer * FIXED #475: Heap view misbehaving on startup * FIXED: "Run => Run to cursor" works again * FIXED: Thonny now honors PEP 263 style encoding markers when saving files. (UTF-8 is still the default) * FIXED: Problem when jedi 0.10 and parso are both installed * TECHNICAL: Plug-in writers can now control each import in user programs (thonny.backend.VM.add_import_handler) * TECHNICAL: Communication messages between back-end and front-end were changed * TECHNICAL: Thonny doesn't tweak PYTHONUSERBASE anymore to put plugins under ~/.thonny. Regular user site packages is used instead * TECHNICAL: Dependency to "packaging" introduced in 2.2 betas is now replaced with "setuptools" 2.2.0b4 (2018-06-05) ==================== * FIXED: Couldn't open menus with None backend 2.2.0b3 (2018-06-05) ==================== * FIXED #425: Too big automatic scaling * FIXED #427: Can't run files with spaces in filename * FIXED: Fixed a bug when debugging and encountering an exception (by Alar Leemet) * ENHANCEMENT: Show indicator about stepping in the past in the text of editor tabs * ENHANCEMENT: Added Thonny version guards for installing plug-ins * EXPERIMENTAL: Preliminary support for running system commands in Thonny shell (eg. `!ls` or `!dir`) * TECHNICAL: thonny.exe in Windows bundle is now signed * TECHNICAL: Delay starting of Runner until UI is shown * TECHNICAL: Various enhancements to support MicroPython plug-ins 2.2.0b2 (2018-05-04) ==================== * FIXED: Options dialog crashes when Variables view hasn't been created yet 2.2.0b1 (2018-05-04) ==================== * NEW: Added support for stepping back in time during debugging (Run => Step back) by Alar Leemet. If you accidentally stepped over an interesting part of code, then now you can step back and step into. * NEW: Added support for UI and syntax theming (https://bitbucket.org/plas/thonny/wiki/Theming) * NEW: Added several built-in dark themes * NEW: Added support for display scaling / high-DPI screens (Tools => Options => General) * NEW: Added closing buttons to the tabs of all views * NEW: Added support for (CPython) back-end plug-ins (https://bitbucket.org/plas/thonny/wiki/Plugins) * NEW: Current editor line can be highlighted (Tools => Options => Editor) * NEW: Thonny can be started in simple mode (https://bitbucket.org/plas/thonny/wiki/Modes) * NEW: Variables view now allows viewing variables from other modules beside __main__ (Tools => Options => General) * CHANGED: Dropped support for Python 3.4 (both for front-end and back-end) * CHANGED: Reorganized back-end configuration ("Tools => Options => Back-end" instead of "Tools => Options => Interpreter") * CHANGED: The roles of Interrupt and Stop commands are now more clear: Stop always restarts the backend and Interrupt only tries to interrupt * CHANGED: Editing the running program doesn't interrupt it anymore. * CHANGED: Object inspector now shows attributes and object overview on different tabs * CHANGED: Can't set thonny.THONNY_USER_DIR directly in customize.py anymore (https://bitbucket.org/plas/thonny/wiki/DeploymentOptions) * CHANGED: For plug-in writers: Unified early and late plug-ins (load_early_plugin should be renamed to load_plugin) * CHANGED: For plug-in writers: get_workbench and get_runner moved from thonny.globals to thonny * FIXED #358: Hide the stacktrace of SystemExit * FIXED #368: "Open system shell" doesn't work in Xfce (fix by Miro Hrončok) * FIXED #370: Made zooming with Ctrl++ / Ctrl+- work on the numpad on Linux * FIXED #372: Now it's possible to specify a link as backend interpreter (fix by Miro Hrončok) * FIXED #396: exec causes range marker to crash * FIXED #403: Window width may become negative * TECHNICAL: Changed the location and sharing of backend.py, common.py, ast_utils.py * TECHNICAL: Cleaner approach for sharing jedi with the back-end * TECHNICAL: Package manager now uses pypi.org instead of pypi.python.org * TECHNICAL: Several changes in Runner and BackendProxy interface * TECHNICAL: Saving an editor now forces writing to disk (see https://learn.adafruit.com/adafruit-circuit-playground-express/creating-and-editing-code#1-use-an-editor-that-writes-out-the-file-completely-when-you-save-it) 2.1.22 (2018-08-20) =================== Happy re-independence day to Estonia! * ENHANCEMENT: Less intrusive logging for AST marking problems * FIXED #340: Validate geometry before loading * FIXED #363: subprocess.run causes Thonny backend to hang * FIXED #419: logging doesn't work in user programs * FIXED #440: In Linux paste over selection doesn't remove the selection * FIXED #487: Use PyPI.org and turn off pip warnings in package manager * FIXED #490: Debugger gets confused with f-strings * FIXED: In case of back-end problems, kill backend instead of resetting * FIXED: Colorize f-string prefixes 2.1.21 (2018-07-17) =================== * FIXED #471: Another problem when Thonny uses jedi 0.11 or newer 2.1.20 (2018-07-16) =================== * FIXED: Problem when jedi 0.10 and parso are both installed 2.1.19 (2018-07-16) =================== Updates in this version are relevant only on Windows * FIXED #467: Error when running Thonny with pythonw on Windows (regression from 2.1.18) * ENHANCEMENT: New Windows installer (run as administrator for all-users install) * ENHANCEMENT: Upgraded Python to version 3.6.6 in Thonny+Python bundles 2.1.18 (2018-06-22) =================== * FIXED #450: Locals marker doesn't work with jedi 0.12 2.1.17 (2018-03-21) =================== * FIXED #409: Package manager crashed after release of pip 9.0.2 2.1.16 (2017-11-10) =================== * Tests moved under thonny package * Tests included in the source distribution * More icons included in the source distribution 2.1.15 (2017-11-07) =================== * Removed StartupNotify from Linux .desktop file (StartupNotify=true leaves cursor spinning in Debian) 2.1.14 (2017-11-02) =================== * Added some Linux-specific files to source distribution. No new features or fixes. 2.1.13 (2017-10-29) =================== * Temporary workaround for #351: Locals and name highlighter occasionally make Thonny freeze * Include only required licenses in source dist 2.1.12 (2017-10-13) =================== * FIXED #303: Allow specifying same interpreter for backend as frontend uses * FIXED #304: Allow specifying backend interpreter by relative path * FIXED #312: Closing unsaved tab causes error * FIXED #319: Linux install script needs quoting around the path(s) * FIXED #320: Install gets recursive if trying to install within extracted tarball * FIXED #321: Linux installer fails if invoked with relative, local user path * FIXED #334: init.tcl not found (Better control over back-end environment variables) * FIXED #343: Thonny now also works with jedi 0.11 2.1.11 (2017-07-22) =================== * FIXED #31: Infinite print loop freezes Thonny * FIXED #285: Previous used interpreters are not shown in options dialog * FIXED #296: Make it more explicit that pip GUI search box needs exact package name * FIXED #298: Python crashes keep backend hanging * FIXED #305: Variables table doesn't get updated, if it's blocked by another view 2.1.10 (2017-06-09) =================== * NEW: More flexibility for classroom setups (see https://bitbucket.org/plas/thonny/wiki/ClassroomSetup) * FIXED #276: Copy with Ctrl+C causes bell * FIXED #277: Triple-quoted strings keep keyword coloring * FIXED #278: Paste in shell causes bell * FIXED #281: Wrong unindentation with SHIFT+TAB when last line does not end with linebreak * FIXED #283: backend.log path doesn't take THONNY_USER_DIR into account * FIXED #284: Internal error when saving to a read-only folder/file (now proposes to choose another name) 2.1.9 (2017-06-01) ================== * FIXED #273: Memory leak in editor margin because of undo log * FIXED #275: Updating line numbers is very inefficient * FIXED: Pasted text occasionally was hidden below bottom edge of the editor * FIXED: sys.exit() didn't really close the backend 2.1.8 (2017-05-28) ================== * ENHANCEMENT: Code completion with Tab-key is now optional (see Tools => Options => Editor) * ENHANCEMENT: Clicking on the editor now closes code completion box * CHANGED: Code completion box doesn't offer names starting with double underscore anymore. * FIXED: Error caused by too fast typing with open code completions box * ENHANCEMENT: Find/Replace dialog can now be operated with F3 * ENHANCEMENT: Find/Replace pre-selects previously used search string * ENHANCEMENT: Find/Replace dialog doesn't block main window anymore * FIXED: Find/Replace doesn't ignore spaces in search string anymore * FIXED: Closed views reappeared after restart if they were only views in that notebook * FIXED #264: Debugger fails with with conditional list comprehension * FIXED #265: Error when using two word search string in pip GUI * FIXED #266: Occasional incorrect line numbering * FIXED #267: Kivy application main window didn't show in Windows * TECHNICAL: Better diagnostic logging 2.1.7 (2017-05-13) ================== * CHANGED: pip GUI now works in read-only mode unless backend is a virtual environment * FIXED: Error when non-default backend was used without previously generated Thonny-private virtual environment 2.1.6 (2017-05-12) ================== * FIXED #260: Strange behaviour when indenting with TAB * FIXED #261: Editing a triple-quoted string breaks coloring in following lines * FIXED: Made outdated pip detection more general 2.1.5 (2017-05-09) ================== * FIXED: Jedi version checking problem 2.1.4 (2017-05-09) ================== (This release is meant for making Thonny work better with system Python 3.4 in Debian Jessie) * FIXED #254: "Manage plug-ins" now gives instructions for installing pip if system is missing it or it's too old * FIXED #255: Name highlighter and locals marker are now quietly disabled when system has too old jedi * FIXED: Virtual env dialog now closes properly * TECHNICAL: SubprocessDialog now has more robust returncode checking in Linux 2.1.3 (2017-05-09) ================== * FIXED #250: Debugger focus was off by one line in function frames * FIXED #251: Debugger timing issue (wrong command type in the backend) * FIXED #252: Debugger timing issue (get_globals and debugger commands interfere) * FIXED #253: Creating default virtual env does not work when using Debian python3 without ensurepip 2.1.2 (2017-05-08) ================== * FIXED #220 and #237: Icon problems in Linux tasbar. * FIXED #245: Tooltips not working in Mac * FIXED #246: Current script did not get executed if cursor was not in the end of the shell * FIXED #249: Reset, Run and Debug caused double prompt 2.1.1 (2017-05-03) ================== * FIXED #241: Some menu items gave errors with micro:bit backend. * FIXED #242: Focus got stuck on first run (no entry was possible neither in shell nor editor when initialization dialog closed) 2.1.0 (2017-05-02) ================== * TECHNICAL: Changes in diagnostic logging 2.1.0b11 (2017-04-29) ===================== * TECHNICAL: Implemented more robust approach for installing Thonny plugins 2.1.0b10 (2017-04-29) ===================== * CHANGED: Installed plugins now end up under ~/.thonny/plugins * TECHNICAL: Backend preparation now occurs when main window has been opened 2.1.0b9 (2017-04-28) ==================== * FIXED: Backend related regression introduced in b8 2.1.0b8 (2017-04-27) ==================== * CHANGED: (FIXED #231) Stop/Reset button is now Interrupt/Reset button (tries to interrupt a running command instead of reseting. Resets if pressed in idle state) * FIXED #232: Ubuntu showed pip GUI captions with too big font * FIXED #233: Thonny now remembers which view was on top in a panel. * FIXED #234: Multiline support problems in shell (trailing whitespace was causing trouble) * FIXED: pip GUI shows latest version number when there is no stable version. * FIXED: pip GUI now can handle also packages without PyPI presence * TECHNICAL: Backends are not sent Reset command for initialization anymore. 2.1.0b7 (2017-04-25) ================== * FIXED: Removed some circular import to support Python 3.4 * FIXED: pip GUI now also lists installed pre-releases * EXPERIMENTAL: GUI for installing Thonny plug-ins (Tools => Manage plug-ins...) * TECHNICAL: Thonny+Python bundles again include pip (needed for installing plug-ins) * TECHNICAL: Refactored creation of several widgets to support theming * TECHNICAL: THONNY_USER_DIR environment variable can now specify where Thonny stores user data (conf files, default virtual env, ...) 2.1.0b6 (2017-04-19) ================== * ENHANCEMENT: Shell now shows location of external interpreter as welcome text * FIXED #224: Tab-indentation didn't work if tail of the text was selected and text didn't end with empty line * FIXED: Tab with selected text occasionally invoked code-completion * TECHNICAL: Tweaks in Windows console allocation * TECHNICAL: Thonny+Python bundles don't include pip anymore (venv gets pip via ensurepip) 2.1.0b5 (2017-04-18) ================== * FIXED: Typo in pipGUI (regression introduced in b4) 2.1.0b4 (2017-04-18) ==================== * CHANGED: If you want to use Thonny with external Python interpreter, then now you should select python.exe instead of pythonw.exe. * FIXED #223: Can't interrupt subprocess when Thonny is run via thonny.exe * FIXED: Private venv didn't find Tcl/Tk in ubuntu (commit 33eabff) * FIXED: Right-click on editor tabs now also works on macOS. 2.1.0b3 (2017-04-17) ==================== * NEW: Dialog for managing 3rd party packages / a simple pip GUI. Check it out: "Tools => Manage packages" * NEW: Shell now supports multiline commands * ENHANCEMENT: Window title now shows full path and cursor location of current file. * ENHANCEMENT: Editor lines can be selected by clicking and/or dragging on line-number margin (thanks to Sven). * ENHANCEMENT: Most programs can now be interrupted by Ctrl+C without restarting the process. * ENHANCEMENT: You can start editing the code that is still running (the process gets interrupted automatically). This is handy when developing tkinter applications. * ENHANCEMENT: Tab can be used as alternative code-completion shortcut. * ENHANCEMENT: Recommended pip-command now appears faster in System Shell. * ENHANCEMENT: Alternative interpreter doesn't need to have jedi installed in order to provide code-completions (see #171: Code auto-complete error) * ENHANCEMENT: Double-click on autocomplete list inserts the completion * EXPERIMENTAL: Ctrl-click on a name in code tries to locate its definition. NB! Not finished yet! * CHANGED: Bundled Python version has been upgraded to 3.6.1 * CHANGED: Bundled Python in Mac and Linux now uses SSL certs from certifi project (https://pypi.python.org/pypi/certifi). * REMOVED: Moved incomplete Exercise system to a separate plugin (https://bitbucket.org/plas/thonny-exersys). With this got rid of tkinterhtml, requests and beautifulsoup4 dependencies. * FIXED #16: Run doesn't clear variables (again?) * FIXED #98: Nested functions crashed the debugger. * FIXED #114: Crash when trying to change interpreter in macOS. * FIXED #142: "Open system shell" failed when Thonny path had spaces in it. Paths are now properly quoted. * FIXED #154: Problems with Notebook tabs' context menus * FIXED #159: Debugging list or set comprehension caused crash * FIXED #166: Can't delete one of two spaces with backspace * FIXED #180: Right-click doesn't focus editor * FIXED #187: Main modules launched by Thonny were missing ``__spec__`` attribute. * FIXED #195: Debugger crashes when using generators. * FIXED #201: "Tools => Open Thonny data folder" now works also in macOS. * FIXED #211: Linux installer was failing when using ``xdg-user-dir`` (thanks to Ryan McQuen) * FIXED #213: In single instance mode new Window doesn't get focus * FIXED #217: Debugger on Python 3.5 and later can't handle splat operator * FIXED #221: Context menus in Linux can now be closed by clicking elsewhere * FIXED: Event logger did not save filenames (eb34c5d). * FIXED: Problem in replayer (db78855). * TECHNICAL: Bundled Jedi version has been upgraded to 0.10.2. * TECHNICAL: 3rd party Thonny plugins must now be under ``thonnycontrib`` namespace package. * TECHNICAL: Introduced the concept of "eary plugins" (plugins, which get loaded before initializing the runner). * TECHNICAL: Refactored the interface between GUI and backend to allow different backend implementations * TECHNICAL: Previously, with bundled Python, Thonny was using nasty tricks to force pip install packages install under ~/.thonny. Now it creates a proper virtual environment under ~/.thonny and uses this as the backend by default (instead of using interpreter running the GUI directly). * TECHNICAL: Automatic tkinter updates on the backend are now less invasive 2.0.7 (2017-01-06) ================== * FIXED: Making font size too small would crash Thonny. * FIXED: Another take on configuration file corruption. * FIXED: Shift-Tab wasn’t working in some cases. * FIXED #165: "Open system shell" did not add Scripts dir to PATH in Windows. * FIXED #183: ``from __future__ import`` crashed the debugger. 2.0.6 (2017-01-06) ================== * FIXED: a bug in Linux installer (configuration file wasn’t created in new installations) 2.0.5 (2016-11-30) ================== * FIXED: Corrected shift key detection (a82bd4d) 2.0.4 (2016-10-26) ================== * FIXED: Configuration file was occasionally getting corrupted (for mysterious reasons, maybe a bug in Python’s configparser) * FIXED #104: Negative font size crashed Thonny * FIXED #143: Linux installer fails if desktop isn't named "Desktop". (Later turned out this wasn't fixed for all cases). * FIXED #134: "Open system shell" doesn't work in Centos 7 KDE 2.0.3 (2016-09-30) ================== * FIXED: Quoting in "Open system shell" in Mac. Again. 2.0.2 (2016-09-30) ================== * FIXED: Quoting in "Open system shell" in Mac. 2.0.1 (2016-09-30) ================== * FIXED #106: Don't let user logs grow too big 2.0.0 (2016-09-29) ================== * NEW: Added code completion (powered by Jedi: https://github.com/davidhalter/jedi) * NEW: Added new command "Tools => Open system shell" which opens terminal where current Python is in PATH. * CHANGED: Single instance mode is now optional (Tools => Options => General) * FIXED: Many bugs 1.2.0b2 (2016-02-10) ==================== * NEW: Thonny now runs in single instance mode. Previously, when you opened a py file with Thonny, a new Thonny instance (window) was created even if an instance existed already. This became nuisance if you opened several files. Now Thonny works as single instance program, meaning only one instance of Thonny runs at the time. When you open another file, it is opened in existing window. * NEW: Editor enhancements. Added option to show line numbers and right margin in the editor. In order to keep first impression cleaner, they are disabled by default. See Tools => Options => Editor. Don't forget that you don't need line numbers for locating lines mentioned in error messages -- you can click them and Thonny shows you the line. * FIXED: Some bugs where Thonny couldn't prepare some programs for debugging. Older versions ============== See https://github.com/thonny/thonny/issues and https://github.com/thonny/thonny/commits thonny-3.3.14/CREDITS.rst000066400000000000000000000104461411757431400147640ustar00rootroot00000000000000======= Credits ======= Thonny is thankful to: Its home -------- Thonny grew up in University of Tartu (https://www.ut.ee), Institute of Computer Science (https://www.cs.ut.ee). Supporters ---------- * Development of several features in Thonny 3.0 and 3.3 was proposed and supported by Raspberry Pi Foundation (https://www.raspberrypi.org). * Since September 2018, development of Thonny is partially supported by Cybernetica AS (https://cyber.ee). Several companies and organizations have provided us with free hardware for testing Thonny (and for having fun): * Phidgets Education (https://www.phidgets.com/education/) * Adafruit (https://www.adafruit.com/) * Raspberry Pi Foundation (https://www.raspberrypi.org) * M5Stack (https://m5stack.com/) * Micro:bit educational foundation (https://microbit.org/) * Calliope (https://calliope.cc/en) Python ------ It's a really nice language for teaching programming. It also has some nice technical properties, that made Thonny's program animation features pleasure to implement. Libraries, resources and tools ------------------------------ * asttokens (https://github.com/gristlabs/asttokens) provides source locations to AST nodes. * jedi (http://jedi.readthedocs.io) is used for code completion, go to definition, etc. * pylint (https://www.pylint.org/) is used as one of the engines behind warnings presented by the Assistant. * mypy (http://mypy-lang.org/) is used, just like pylint, as a warning engine in the Assistant. * pyserial (https://github.com/pyserial/pyserial) is used for communicating with MicroPython devices. * docutils (http://docutils.sourceforge.net/) is used for parsing help content written in reStructuredText. * send2trash (https://github.com/hsoft/send2trash) is used by the Files view. * certifi (https://pypi.python.org/pypi/certifi) provides SSL certs for bundled Python in Linux and Mac. * distro (https://pypi.python.org/pypi/distro) is optionally used for detecting Linux version in About dialog. * paramiko (https://pypi.org/project/paramiko) is optionally used for writing and running code on remote machines. * websockets (https://pypi.org/project/websockets) is optionally used for communicating with MicroPython devices over WebREPL. * Most icons are taken from Eclipse project (https://www.eclipse.org/, https://github.com/eclipse/eclipse.platform.debug/tree/master/org.eclipse.debug.ui/icons/full/, https://github.com/eclipse/eclipse.platform.ui/tree/master/bundles/org.eclipse.ui/icons/full/, https://github.com/eclipse/eclipse.jdt.ui/tree/master/org.eclipse.jdt.ui/icons/full/), on Linux, some are overridden by Tango icons (http://tango.freedesktop.org/) * POEditor (https://poeditor.com/) is used for managing translations of UI strings. Source contributors, sponsors, advisors, translators and frequent bug-reporters ------------------------------------------------------------------------------- * adzierzanowski * Aivar Annamaa * Albin * Alar Leemet * Aleks ANDRÉ * Alex Hall * Algent Albrahimi * Anatoly Techtonik * Anders Pamdal * Andrew Scheller * André Roberge * Ankith * Antonio Carlos * Augene J. Pak * Austin Bart * Avag. sayan * badukaire * borpol * cefn * Celso Isayah Dias * Chad Purdy * codemee * cspaier * cubimon * Curtis Wang * Dominic Twyman * Dominik George * Donald Butt * Eliot Blennerhassett * Emanuel Angelo * Fabianus.c * Farshid Meidani * Filip Schouwenaars * Fizban * freddii * fstengel * Gabriel Slørdahl * Gagan Saksena * Georges Khaznadar * Hyungseok Choi * IhorNehrutsa * Ivanhercaz * Ivan.schamann * Илья Кругликов * Jarek Miszczak * Jens Diemer * Juan Falgueras * Jonathan Campbell * Jordan Williams * jose1711 * José Carlos García * Kauri Raba * Laszlo Kocsis * Lrasinen * M Burak Kalkan * Marcelo de Gomensoro Malheiros * Marko Ristin * Matt Iversen * Miro Hrončok * NathanBnm * Nicolas Despres * Pavel Minaev * Peter Marshall * Petr. moses * Phil Duby * phr0gger * Pop Vasile Alexandru * Radim * Rene Lehtma * Rune Langøy * sailslack * segalion * Simon Gijsen * Simon Long * sourceperl * Stefan Rothe * Suk-Hyung Hwang * Sven Duzont * Syed Nasim * Taavi Ilp * Toomas Mölder * Tusamten * Vytenis (svajoklis-1) * Xin Rong * YEON * 丁向阳 (Ding-XiangYang) * 涂紳騰 (Shen-Teng Tu) * 張文宏 (Wen-Hung, Chang) Please let us know if we have forgotten to add your name to this list! Also, let us know if you want to remove your name. thonny-3.3.14/LICENSE.txt000066400000000000000000000020711411757431400147530ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2021 Aivar Annamaa Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. thonny-3.3.14/MANIFEST.in000066400000000000000000000004751411757431400146740ustar00rootroot00000000000000include CHANGELOG.rst include CREDITS.rst include LICENSE.txt include README.rst include requirements.txt include licenses/ECLIPSE-ICONS-LICENSE.txt include packaging/linux/thonny.1 include packaging/icons/*.png include packaging/linux/org.thonny.Thonny.appdata.xml include packaging/linux/org.thonny.Thonny.desktop thonny-3.3.14/PKG-INFO000066400000000000000000000033071411757431400142300ustar00rootroot00000000000000Metadata-Version: 1.2 Name: thonny Version: 3.3.14 Summary: Python IDE for beginners Home-page: https://thonny.org Author: Aivar Annamaa and others Author-email: thonny@googlegroups.com License: MIT Project-URL: Source code, https://github.com/thonny/thonny Project-URL: Bug tracker, https://github.com/thonny/thonny/issues Description: Thonny is a simple Python IDE with features useful for learning programming. See https://thonny.org for more info. Keywords: IDE education debugger Platform: Windows Platform: macOS Platform: Linux Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: MacOS X Classifier: Environment :: Win32 (MS Windows) Classifier: Environment :: X11 Applications Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Education Classifier: Intended Audience :: End Users/Desktop Classifier: License :: Freeware Classifier: License :: OSI Approved :: MIT License Classifier: Natural Language :: English Classifier: Operating System :: MacOS Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Topic :: Education Classifier: Topic :: Software Development Classifier: Topic :: Software Development :: Debuggers Classifier: Topic :: Text Editors Requires-Python: >=3.5 thonny-3.3.14/README.rst000066400000000000000000000006411411757431400146200ustar00rootroot00000000000000====== Thonny ====== Thonny is a Python `IDE `_ meant for learning programming. End users --------- See https://thonny.org and `wiki `_ for more info. Contributors ------------ Contributions are welcome! See `CONTRIBUTING.rst `_ for more info. thonny-3.3.14/licenses/000077500000000000000000000000001411757431400147355ustar00rootroot00000000000000thonny-3.3.14/licenses/ECLIPSE-ICONS-LICENSE.txt000066400000000000000000000261231411757431400205170ustar00rootroot00000000000000# Several Thonny icons are taken from http://eclipse-icons.i24.cc ------------------------------ Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. thonny-3.3.14/packaging/000077500000000000000000000000001411757431400150545ustar00rootroot00000000000000thonny-3.3.14/packaging/icons/000077500000000000000000000000001411757431400161675ustar00rootroot00000000000000thonny-3.3.14/packaging/icons/thonny-128x128.png000066400000000000000000000030671411757431400211550ustar00rootroot00000000000000PNG  IHDRi7@bKGD̿ pHYs  tIME 6%IDATx_TU?Y+"kIX| &FaJQC KCж&Bpgfϝ{g9zgGs<}s~;      sfe0&I /nZ SR~ҌVf_[Zyʹf0"'y&_ Nw||ɰ^;h4/6fd\ Nt)-K/k23㬺gztі|dձ[8o6Ǩx݁Koy&~'E>Å):E+928D[gOC&:,)q++e8mn\"zyeЄ1q5ԡK|ŕ=hs wMZsoDNPr|!ew&ieW ٸHg 5i@.@j:&3lleDf\ zyZzJ{ 0V-gXS䛞iGk] 8╴(;xً^YGb&A6Ag=Xֳ0x77 *f6 A4$F706}4: uHMBE*SY_5-xhJS$ yL>Oՙ`"{RaICsh׆N}a0QgѮJ[eRLm"gD}1\~; fu @|>zZ~кeǰ+|گzS) B6wGcP=N~@KzhvG1|gBe2hӥԳQQߡ\J3 e'۾CAo`wle3%Z }&      ? M7BIENDB`thonny-3.3.14/packaging/icons/thonny-16x16.png000066400000000000000000000003261411757431400210000ustar00rootroot00000000000000PNG  IHDR7bKGD̿ pHYs  tIME agIDAT(ϭ (CMRD"Ag|}|ۖ@n uYjPHӐ6ɚĆn:hVZȺGNOBTt#5IENDB`thonny-3.3.14/packaging/icons/thonny-192x192.png000066400000000000000000000060051411757431400211520ustar00rootroot00000000000000PNG  IHDRդbKGD̿ pHYs  tIME;b IDATx]]lG]lݫ}zPiTTTP U%MRʛ[ו* D$JJ*ED2%ED}hԊЫ#vn;3;37{í/sf@ @ @ ]&Y+(1CC%\>f1wg(`$ ]|Gg=O"D 4 `1崙نkx'ZC@x}~X tI %uu ig@2+R n Y_a/1hۃxKgǏ)*F,߼r:L0W}㒯w:"!Cf5<]=-sfo{+ G~U/4i89\As bGCT< *oܱp>S*&ƽAp+yC*(^5#KkijF ÝDS`ۼcjMp<$Yu8gFDǒ;Ic.(o?:'`:~+md`2Jjw6Zߤ @N'Z7x j:zCP0ַM(# oizz=؅&MT)g: OM O&9T?cf$}{O  SAsZ/6R0K.){9i^Zu۽)WAt820~'13f瘛5cŠrAG=J+W.x@/:Cdg՝Muc.S7q6 G1mՙIajGTa\9JtqZczb7<lh̅|'tzR K K:zbۀZ*pBE)Z*tBG8`16S =q̽KZ$|D= wD8϶ cns)y$- )E&($ô{iBR「T/e0I}Bb.)#@( \I@6 63Ovsb;` ݜZ 8a8'4,§GkYpQ }%mh+ro惠6^< J<>3m]Tix ~D`dsPd3V=p*rͲHJW_dE_E|n0S_U|hd#_,]%e%E;֬A/aÜ염Z%y.a+X-9%[񌬙,OW#bSfT03tl:vBuRpm@#3%@~b} UUHV -C[-5mhy bnXǒcŘI.񿖛ҒhQѤAOAq rJ[ [g:%Ѹ1ꤚ(@$Tn(Ds 7&T9Pf3%TABLI 7$@h=G%p7=AQ U+SAs')cS"YVCrdc[>wkG9R0iqeFprO:-uaީCW=!XYQ@r$T]pi.x 9u*h! $:JQGNi(ZGff^U vd Ҿ~zLl܀L * %~  ;fVpx#Zwk= PQhZ,>Sp+S6_+g:fxPJ%L׺ wH^yVEߜi2FTf4C~IWT+x)55) knĬh[of4A|Mse&֡hs5kqQ#6ak3QAkbЄ`yIWmZ)9U 3Ka`g`S+j}swk:ChU.mSNY{ZHue[0nZ7$yrj%@kuެ[0nV=&lj%4Y59HJV[xdg.3⮧Qʒn$ R+^6yhPCSaʻl{"DS3@^ *RRtw`<+ӟq G < "O˚-=KULƖYݸV_Οo 1A~l/ӎI@Hp-k$ ڀJz\fawVՏ w'l"@lَ3mV#C7my.HF>lYH8Aek' {ɼ'!i A#tG JB+RGj#6`HiI,3PN4_ ,0r6|l(񽹲mTg?džo,6#0H1^͠\l/6/QQ}[Ҙsb*caWn#MHNPªl ZGUʪc"m:r`TmVo#HZS-hf#ib k*,gk#HFR֑2mLq܇>KsI~@ @ @ DY~j$OIENDB`thonny-3.3.14/packaging/icons/thonny-2.png000066400000000000000000000005041411757431400203520ustar00rootroot00000000000000PNG  IHDR7gAMA a cHRMz&u0`:pQ<bKGD̿tIME \MLIDAT(ϭO90Mo2PPm,^U$ܲ!&T'5v91'IJ:%tEXtdate:create2017-11-09T04:26:24-05:00xG%tEXtdate:modify2017-11-09T04:26:24-05:00%IENDB`thonny-3.3.14/packaging/icons/thonny-22x22.png000066400000000000000000000010361411757431400207710ustar00rootroot00000000000000PNG  IHDRnbKGD̿ pHYs  tIME 5.~\IDAT(ϕ=kA3r7#FP0`΀_"E"`(Qbr{Oݽܞoy? uʊELz2eXH$ʔQ4Pwjl]C0N9KX$Q;zvFzhem#z8$DDH )ښl r8Gb{K`ϹKg2,F\Xǝ .H6! kmH ,j +Q򐔀}aaRe!0{,˰0} Ժz~?PNNɻ? =|9rj nH2yGFX^!) ?*W_.[M|7E0 ͼ3=X%zguc i~+kKIENDB`thonny-3.3.14/packaging/icons/thonny-256x256.png000066400000000000000000000073571411757431400211670ustar00rootroot00000000000000PNG  IHDR{`gAMA a cHRMz&u0`:pQ<bKGD̿tIME \M IDATx_]EǿK[!Զ0& b "ARu'%(AM|4@"_[S&F16h`?»P] 53,:7??o؁&6y|B?(FAFn6Cs6[a|;df]F<:){/RMĥ86E.b;~Z)r-ފTMX+PR4#cfq3as?թ#Q\ʠޭ7,~يp--x ٟJ55?k)H8/M\Id]kx zڸfOxw r>"޽?IY]m w('I\UVDpM?C@1._[1oCK1Nh$#}/Ÿ0`.L"8t[E<ݘmyQHK#phh xO 5`mt꾾dOr i6_2U'U7 UFA|S|?`K,(f;zV)d6#IsG;CF$U^Wp-u:1%vGs$[>v? [, Tw\yaYEcUAR]׉CXU-hFqm[Uɱ [ jw\تYH||SJ{ ߱lt<2M|9BԗI46.x'8T`d `wch~P ھTC I/X[/O!Hz錍t~.m Dnlh/$ y;MKf $ !Ljht[8'l @U<#+{$>(ظN*03@nHb. ZN*o ~iV?E+H@|Db?@ a,o熏C&Y@}%,q9>&ĜdȲrb2`qͰʃAWȄz^N/B(,?2!6}bNrI>4#9 f:_'p-nB?a1JNBtdV܃pI)_c|o ~Iwf+# ԑn?X2(*:ȾZ)c]و'0:QlflM܆?︹d25,đN/ 1Z. ( Fy=}!N%* ,Up ;_9&",ݖǕhҨȖ@23RӑfU?-G <]eq,Y 9eMY.B*rOѾAJ)55WH脖J5BiYaI.D04MJ4fݚz;m՜<$>)7KRޅMIL\fMp\aW15;-\ ,[ΪezZH .-L@gJm-pRn 0 8nR`rUZ\,FSPTLe3t A@ި)ϕRh53E*I_E3˚j #]L9EU[w8N+ %ۡ]hm7Fa$>G˸fpZΌ!Khiճ ~wp<}@lE& |&]T u)r`:GvQY^->A3fD9r#krX5V|T͖D|x|vv3QqH@_kgcYYmEݜ6$MkIpV $$*[ Ê+z&&)5QH{k5~C#d2}Ms2oM457]Llq2/~ogFLx''ӡo2/wnNvL 5 'SlU{7<6@8lJujm(B꫼ |j )Ժ:uP8' !SmZW':eՑR4c{G:n\zDgdӰH}O4wF%kg0e ^jD4w-Vөrix8(U)Kw,usq9@#P>ww~ r Qʒrn544 q2(H9K44nʟM\QY4MM/IR{OĘ-jDϲ;CݢL븭Y.Ty^Gn%B%2ӏc~'"!u+ #S>=N@40b\+Ihj"ie~q1|Roi~]GA#3Df& )՚ 2(ɸdd6~Q}3g}LLr?GCQIwPUJ)u{W'Q&Mͤ`Psp\u/ns5|RgiYqCds^?!9k$6$_BHr)\ uf?!$c8W6L%dRz3ɏ{&`'@pnU` 7E!B!B!B!B!B!B!B!B!B!B!B!B!A4Y~O%tEXtdate:create2017-11-09T04:26:24-05:00xG%tEXtdate:modify2017-11-09T04:26:24-05:00%IENDB`thonny-3.3.14/packaging/icons/thonny-32x32.png000066400000000000000000000011601411757431400207710ustar00rootroot00000000000000PNG  IHDR sbKGD̿ pHYs  tIME 16 \ؽIDATH;kAg/1 !,DC *BDڊ` L#bc!h!hBBl e^Zb9gμ3{3k U<6e, c.$ŕYڧG.J`ܓB3\tsưѪX ?C ^_{Y5c& #x'퇼Fa-/|}ʦB 4VxU$ _cQ0)ҴN(M;1LIxN~5 0V 6CJK+6@uB\̜;rB !Sa *WBlu;)Vc_bNo1f]D2Ge&9郉UWHW*)tcd\Й=Pi%VsPŒ9XXc϶'AV6@ד9TX KQ'KURxVqc_2BlnRfmhw)v)6V'n2?@/濰W\gcIENDB`thonny-3.3.14/packaging/icons/thonny-48x48.png000066400000000000000000000016221411757431400210120ustar00rootroot00000000000000PNG  IHDR00 1 bKGD̿ pHYs  tIME "6|*#IDATXkw?3of7$nҒڭ/$65 (xH< "|AD)-4BPH%P(%bj1m63;_YήH/wo} ; apy Iմ,]<3RHis_$pby0%7fyH]a! asw@]w໮0pĬܠ+(@ťQI1O!,b{X)C Nx:\&2ٿ`3IdN`)Kh94NひoF+8}oJ3&`qybcZs{6q6z-sCy.Zh:+ TW#*+z)jIENDB`thonny-3.3.14/packaging/icons/thonny-64x64.png000066400000000000000000000016451411757431400210130ustar00rootroot00000000000000PNG  IHDR@@`UbKGD̿ pHYs  tIME "AA6IDAThIhAN& ACxIP! x0FAE o^rxA=(j<\&f!HQb .A4.=T86m' O!@|أPlC {(Si!,f"f!{Ix!rTAGE;/i+bT;lS?;*vތܗq@7XXW:{91 "K7SBC7_xG/_1LSjYfSٔծT!bWӕI6h S;G\EgEcJ$"Vi&0L`[z(DYZ]s󰌃J hN $QsI{Kb d<d#IRP?{?i&3)"O rWN@)LE?UjL.K Kb-'D_ڞE $ nGtDUgNHMQnWO$IB|F[m B,~^$]t `\!6>) nrv1N"+I:,;II8BT&:JI~r',%[ VI~($ ,3FoB@KQ|t%jHLC5blWM@&aO2(%qsȯ @`5ם^8]X°ܨ^p!uqǓSLVxg5|J^w7 CʈSX8{֪]u7Ѱyc_CݰK_O2=IeIENDB`thonny-3.3.14/packaging/linux/000077500000000000000000000000001411757431400162135ustar00rootroot00000000000000thonny-3.3.14/packaging/linux/org.thonny.Thonny.appdata.xml000066400000000000000000000053351411757431400237370ustar00rootroot00000000000000 org.thonny.Thonny.desktop MIT MIT Thonny Python IDE for beginners

Thonny is a simple Python IDE with features useful for learning programming. It comes with a debugger which is able to visualize all the conceptual steps taken to run a Python program (executing statements, evaluating expressions, maintaining the call stack). There is a GUI for installing 3rd party packages and special mode for learning about references.

See the homepage for more information, screenshots and a walk-through video.

Development Education Debugger IDE ComputerScience org.thonny.Thonny.desktop https://thonny.org https://github.com/thonny/thonny/issues https://github.com/thonny/thonny/wiki https://thonny.org/img/screenshot.png Thonny stepping through a recursive function thonny

This release fixes some minor bugs.

This is minor technical update over 3.3.12.

This is a bug-fix release.

This is a bug-fix release.

This is mainly a bug-fix release with one new feature -- the ability to install pip-compatible packages for MicroPython.

This is mainly a bug-fix release.

thonny-3.3.14/packaging/linux/org.thonny.Thonny.desktop000066400000000000000000000005231411757431400231710ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Thonny GenericName=Python IDE Exec=/usr/bin/thonny %F Comment=Python IDE for beginners Icon=thonny StartupWMClass=Thonny Terminal=false Categories=Development;IDE Keywords=programming;education MimeType=text/x-python; Actions=Edit; [Desktop Action Edit] Exec=/usr/bin/thonny %F Name=Edit with Thonny thonny-3.3.14/packaging/linux/thonny.1000066400000000000000000000017201411757431400176140ustar00rootroot00000000000000.TH THONNY 1 .SH NAME thonny \- Python IDE for beginners .SH SYNOPSIS .B thonny [\fIFILE...\fR] .SH DESCRIPTION Thonny is a Python IDE for learning and teaching programming. .SH BASIC USAGE On the first run you see a code editor and the Python shell. .PP Enter some Python code (eg. .B print("Hello world") ) into the editor and save the file with Ctrl+S. .PP Now run the code by pressing F5. You should see the output of the program in the Python shell. .PP You can also enter Python code directly into the shell. .SH USING THE DEBUGGER You can see the steps Python takes to run your code. For this you need to press Ctrl+F5 to run the program in debug mode. In this mode you can advance the program either with big steps (F6) or small steps (F7). If you want to see how the steps affect program variables, then open global variables pane (View => Variables). .SH MORE INFORMATION You can find more information, screenshots and a walk-through video at https://thonny.org. thonny-3.3.14/pyproject.toml000066400000000000000000000002301411757431400160370ustar00rootroot00000000000000[tool.black] line-length = 100 target_version = ['py34'] exclude = "api_stubs" [tool.isort] profile = "black" src_paths = ["thonny"] line_length = 100 thonny-3.3.14/requirements.txt000066400000000000000000000001601411757431400164110ustar00rootroot00000000000000jedi>=0.13 setuptools>=33.1 pyserial>=3.4 pylint>=1.9 docutils>=0.14 mypy>=0.670 asttokens>=1.1 Send2Trash>=1.4 thonny-3.3.14/setup.cfg000066400000000000000000000000461411757431400147510ustar00rootroot00000000000000[egg_info] tag_build = tag_date = 0 thonny-3.3.14/setup.py000066400000000000000000000061701411757431400146460ustar00rootroot00000000000000import os.path import sys from setuptools import find_packages, setup def recursive_files(directory): paths = [] for (path, _, filenames) in os.walk(directory): for filename in filenames: paths.append(os.path.join('..', path, filename)) return paths if sys.version_info < (3, 5): raise RuntimeError("Thonny requires Python 3.5 or later") setupdir = os.path.dirname(__file__) with open(os.path.join(setupdir, "thonny", "VERSION"), encoding="ASCII") as f: version = f.read().strip() requirements = [] for line in open(os.path.join(setupdir, "requirements.txt"), encoding="ASCII"): if line.strip() and not line.startswith("#"): requirements.append(line) setup( name="thonny", version=version, description="Python IDE for beginners", long_description="Thonny is a simple Python IDE with features useful for learning programming. See https://thonny.org for more info.", url="https://thonny.org", author="Aivar Annamaa and others", author_email="thonny@googlegroups.com", license="MIT", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: MacOS X", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: End Users/Desktop", "License :: Freeware", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Education", "Topic :: Software Development", "Topic :: Software Development :: Debuggers", "Topic :: Text Editors", ], keywords="IDE education debugger", project_urls={ "Source code": "https://github.com/thonny/thonny", "Bug tracker": "https://github.com/thonny/thonny/issues", }, platforms=["Windows", "macOS", "Linux"], install_requires=requirements, python_requires=">=3.5", packages=find_packages(), package_data={ "": ["VERSION", "defaults.ini", "res/*"] + recursive_files("thonny/locale"), "thonny.plugins.help": ["*.rst"], "thonny.plugins.pi": ["res/*.*"], "thonny.plugins.printing": ["*.html"], "thonny.plugins.micropython": ["api_stubs/*.*"], "thonny.plugins.circuitpython": ["api_stubs/*.*"], "thonny.plugins.microbit": ["api_stubs/*.*"], "thonny.plugins.esp": ["esp32_api_stubs/*.*", "esp_8266_api_stubs/*.*"], "thonny.plugins.mypy": ["typeshed_extras/*.pyi"], }, entry_points={"gui_scripts": ["thonny = thonny:launch"]}, ) thonny-3.3.14/thonny.egg-info/000077500000000000000000000000001411757431400161415ustar00rootroot00000000000000thonny-3.3.14/thonny.egg-info/PKG-INFO000066400000000000000000000033071411757431400172410ustar00rootroot00000000000000Metadata-Version: 1.2 Name: thonny Version: 3.3.14 Summary: Python IDE for beginners Home-page: https://thonny.org Author: Aivar Annamaa and others Author-email: thonny@googlegroups.com License: MIT Project-URL: Source code, https://github.com/thonny/thonny Project-URL: Bug tracker, https://github.com/thonny/thonny/issues Description: Thonny is a simple Python IDE with features useful for learning programming. See https://thonny.org for more info. Keywords: IDE education debugger Platform: Windows Platform: macOS Platform: Linux Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: MacOS X Classifier: Environment :: Win32 (MS Windows) Classifier: Environment :: X11 Applications Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Education Classifier: Intended Audience :: End Users/Desktop Classifier: License :: Freeware Classifier: License :: OSI Approved :: MIT License Classifier: Natural Language :: English Classifier: Operating System :: MacOS Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Topic :: Education Classifier: Topic :: Software Development Classifier: Topic :: Software Development :: Debuggers Classifier: Topic :: Text Editors Requires-Python: >=3.5 thonny-3.3.14/thonny.egg-info/SOURCES.txt000066400000000000000000000562471411757431400200430ustar00rootroot00000000000000CHANGELOG.rst CREDITS.rst LICENSE.txt MANIFEST.in README.rst pyproject.toml requirements.txt setup.py licenses/ECLIPSE-ICONS-LICENSE.txt packaging/icons/thonny-128x128.png packaging/icons/thonny-16x16.png packaging/icons/thonny-192x192.png packaging/icons/thonny-2.png packaging/icons/thonny-22x22.png packaging/icons/thonny-256x256.png packaging/icons/thonny-32x32.png packaging/icons/thonny-48x48.png packaging/icons/thonny-64x64.png packaging/linux/org.thonny.Thonny.appdata.xml packaging/linux/org.thonny.Thonny.desktop packaging/linux/thonny.1 thonny/VERSION thonny/__init__.py thonny/__main__.py thonny/assistance.py thonny/ast_utils.py thonny/backend.py thonny/base_file_browser.py thonny/codeview.py thonny/common.py thonny/config.py thonny/config_ui.py thonny/defaults.ini thonny/editors.py thonny/export.py thonny/first_run.py thonny/gridtable.py thonny/jedi_utils.py thonny/languages.py thonny/memory.py thonny/misc_utils.py thonny/roughparse.py thonny/rst_utils.py thonny/running.py thonny/shell.py thonny/terminal.py thonny/tktextext.py thonny/token_utils.py thonny/ui_utils.py thonny/workbench.py thonny/workdlg.py thonny.egg-info/PKG-INFO thonny.egg-info/SOURCES.txt thonny.egg-info/dependency_links.txt thonny.egg-info/entry_points.txt thonny.egg-info/requires.txt thonny.egg-info/top_level.txt thonny/locale/compile_mo.bat thonny/locale/thonny.pot thonny/locale/update_pot.bat thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo thonny/locale/cs_CZ/LC_MESSAGES/thonny.po thonny/locale/de_DE/LC_MESSAGES/thonny.mo thonny/locale/de_DE/LC_MESSAGES/thonny.po thonny/locale/el_GR/LC_MESSAGES/thonny.mo thonny/locale/el_GR/LC_MESSAGES/thonny.po thonny/locale/en_US/LC_MESSAGES/thonny.mo thonny/locale/en_US/LC_MESSAGES/thonny.po thonny/locale/es_ES/HELP_CONTENT/debuggers.rst thonny/locale/es_ES/HELP_CONTENT/debugging.rst thonny/locale/es_ES/HELP_CONTENT/errors.rst thonny/locale/es_ES/LC_MESSAGES/thonny.mo thonny/locale/es_ES/LC_MESSAGES/thonny.po thonny/locale/et_EE/LC_MESSAGES/thonny.mo thonny/locale/et_EE/LC_MESSAGES/thonny.po thonny/locale/fa_IR/LC_MESSAGES/thonny.mo thonny/locale/fa_IR/LC_MESSAGES/thonny.po thonny/locale/fi_FI/LC_MESSAGES/thonny.mo thonny/locale/fi_FI/LC_MESSAGES/thonny.po thonny/locale/fr_FR/HELP_CONTENT/birdseye.rst thonny/locale/fr_FR/HELP_CONTENT/debuggers.rst thonny/locale/fr_FR/HELP_CONTENT/debugging.rst thonny/locale/fr_FR/HELP_CONTENT/dock.rst thonny/locale/fr_FR/HELP_CONTENT/errors.rst thonny/locale/fr_FR/HELP_CONTENT/flask.rst thonny/locale/fr_FR/HELP_CONTENT/index.rst thonny/locale/fr_FR/HELP_CONTENT/modes.rst thonny/locale/fr_FR/HELP_CONTENT/packages.rst thonny/locale/fr_FR/HELP_CONTENT/plotter.rst thonny/locale/fr_FR/HELP_CONTENT/program_arguments.rst thonny/locale/fr_FR/HELP_CONTENT/shell.rst thonny/locale/fr_FR/HELP_CONTENT/turtle.rst thonny/locale/fr_FR/LC_MESSAGES/thonny.mo thonny/locale/fr_FR/LC_MESSAGES/thonny.po thonny/locale/hu_HU/LC_MESSAGES/thonny.mo thonny/locale/hu_HU/LC_MESSAGES/thonny.po thonny/locale/hy_AM/LC_MESSAGES/thonny.mo thonny/locale/hy_AM/LC_MESSAGES/thonny.po thonny/locale/it_IT/LC_MESSAGES/thonny.mo thonny/locale/it_IT/LC_MESSAGES/thonny.po thonny/locale/ja_JP/LC_MESSAGES/thonny.mo thonny/locale/ja_JP/LC_MESSAGES/thonny.po thonny/locale/ko_KR/HELP_CONTENT/birdseye.rst thonny/locale/ko_KR/HELP_CONTENT/debuggers.rst thonny/locale/ko_KR/HELP_CONTENT/debugging.rst thonny/locale/ko_KR/HELP_CONTENT/dock.rst thonny/locale/ko_KR/HELP_CONTENT/errors.rst thonny/locale/ko_KR/HELP_CONTENT/flask.rst thonny/locale/ko_KR/HELP_CONTENT/index.rst thonny/locale/ko_KR/HELP_CONTENT/modes.rst thonny/locale/ko_KR/HELP_CONTENT/packages.rst thonny/locale/ko_KR/HELP_CONTENT/plotter.rst thonny/locale/ko_KR/HELP_CONTENT/program_arguments.rst thonny/locale/ko_KR/HELP_CONTENT/shell.rst thonny/locale/ko_KR/HELP_CONTENT/turtle.rst thonny/locale/ko_KR/LC_MESSAGES/thonny.mo thonny/locale/ko_KR/LC_MESSAGES/thonny.po thonny/locale/lt_LT/LC_MESSAGES/thonny.mo thonny/locale/lt_LT/LC_MESSAGES/thonny.po thonny/locale/nb_NO/LC_MESSAGES/thonny.mo thonny/locale/nb_NO/LC_MESSAGES/thonny.po thonny/locale/nl_NL/LC_MESSAGES/thonny.mo thonny/locale/nl_NL/LC_MESSAGES/thonny.po thonny/locale/nn_NO/LC_MESSAGES/thonny.mo thonny/locale/nn_NO/LC_MESSAGES/thonny.po thonny/locale/pl_PL/LC_MESSAGES/thonny.mo thonny/locale/pl_PL/LC_MESSAGES/thonny.po thonny/locale/pt_BR/LC_MESSAGES/thonny.mo thonny/locale/pt_BR/LC_MESSAGES/thonny.po thonny/locale/pt_PT/LC_MESSAGES/thonny.mo thonny/locale/pt_PT/LC_MESSAGES/thonny.po thonny/locale/ro_RO/LC_MESSAGES/thonny.mo thonny/locale/ro_RO/LC_MESSAGES/thonny.po thonny/locale/ru_RU/LC_MESSAGES/thonny.mo thonny/locale/ru_RU/LC_MESSAGES/thonny.po thonny/locale/sk_SK/LC_MESSAGES/thonny.mo thonny/locale/sk_SK/LC_MESSAGES/thonny.po thonny/locale/sq_AL/LC_MESSAGES/thonny.mo thonny/locale/sq_AL/LC_MESSAGES/thonny.po thonny/locale/sv_SE/LC_MESSAGES/thonny.mo thonny/locale/sv_SE/LC_MESSAGES/thonny.po thonny/locale/tr_TR/LC_MESSAGES/thonny.mo thonny/locale/tr_TR/LC_MESSAGES/thonny.po thonny/locale/uk_UA/LC_MESSAGES/thonny.mo thonny/locale/uk_UA/LC_MESSAGES/thonny.po thonny/locale/zh_CN/LC_MESSAGES/thonny.mo thonny/locale/zh_CN/LC_MESSAGES/thonny.po thonny/locale/zh_TW/LC_MESSAGES/thonny.mo thonny/locale/zh_TW/LC_MESSAGES/thonny.po thonny/plugins/__init__.py thonny/plugins/about.py thonny/plugins/assistant_config_page.py thonny/plugins/ast_view.py thonny/plugins/autocomplete.py thonny/plugins/backend_config_page.py thonny/plugins/base_syntax_themes.py thonny/plugins/base_ui_themes.py thonny/plugins/birdseye_frontend.py thonny/plugins/cells.py thonny/plugins/clean_ui_themes.py thonny/plugins/coloring.py thonny/plugins/commenting_indenting.py thonny/plugins/common_editing_commands.py thonny/plugins/debugger.py thonny/plugins/dock_user_windows_frontend.py thonny/plugins/editor_config_page.py thonny/plugins/event_logging.py thonny/plugins/event_view.py thonny/plugins/files.py thonny/plugins/find_replace.py thonny/plugins/general_config_page.py thonny/plugins/goto_definition.py thonny/plugins/heap.py thonny/plugins/highlight_names.py thonny/plugins/locals_marker.py thonny/plugins/misc_analyzers.py thonny/plugins/notes.py thonny/plugins/object_inspector.py thonny/plugins/outline.py thonny/plugins/paren_matcher.py thonny/plugins/pgzero_frontend.py thonny/plugins/pip_gui.py thonny/plugins/remove_old_data_dir.py thonny/plugins/replayer.py thonny/plugins/run_debug_config_page.py thonny/plugins/shell_config_page.py thonny/plugins/shell_macro.py thonny/plugins/statement_boxes.py thonny/plugins/stdlib_error_helpers.py thonny/plugins/terminal_config_page.py thonny/plugins/theme_and_font_config_page.py thonny/plugins/thonny_folders.py thonny/plugins/tomorrow_syntax_theme.py thonny/plugins/variables.py thonny/plugins/backend/__init__.py thonny/plugins/backend/birdseye_backend.py thonny/plugins/backend/dock_user_windows_backend.py thonny/plugins/backend/flask_backend.py thonny/plugins/backend/matplotlib_backend.py thonny/plugins/backend/pgzero_backend.py thonny/plugins/circuitpython/__init__.py thonny/plugins/circuitpython/cirpy_backend.py thonny/plugins/cpython/__init__.py thonny/plugins/cpython/__main__.py thonny/plugins/cpython/cpython_backend.py thonny/plugins/cpython_ssh/__init__.py thonny/plugins/cpython_ssh/__main__.py thonny/plugins/cpython_ssh/ssh_cpython_backend.py thonny/plugins/esp/__init__.py thonny/plugins/esp/esp32_api_stubs/_boot.py thonny/plugins/esp/esp32_api_stubs/_onewire.py thonny/plugins/esp/esp32_api_stubs/_thread.py thonny/plugins/esp/esp32_api_stubs/_webrepl.py thonny/plugins/esp/esp32_api_stubs/apa106.py thonny/plugins/esp/esp32_api_stubs/array.py thonny/plugins/esp/esp32_api_stubs/binascii.py thonny/plugins/esp/esp32_api_stubs/btree.py thonny/plugins/esp/esp32_api_stubs/builtins.py thonny/plugins/esp/esp32_api_stubs/cmath.py thonny/plugins/esp/esp32_api_stubs/collections.py thonny/plugins/esp/esp32_api_stubs/dht.py thonny/plugins/esp/esp32_api_stubs/ds18x20.py thonny/plugins/esp/esp32_api_stubs/errno.py thonny/plugins/esp/esp32_api_stubs/esp.py thonny/plugins/esp/esp32_api_stubs/esp32.py thonny/plugins/esp/esp32_api_stubs/flashbdev.py thonny/plugins/esp/esp32_api_stubs/framebuf.py thonny/plugins/esp/esp32_api_stubs/gc.py thonny/plugins/esp/esp32_api_stubs/hashlib.py thonny/plugins/esp/esp32_api_stubs/heapq.py thonny/plugins/esp/esp32_api_stubs/inisetup.py thonny/plugins/esp/esp32_api_stubs/io.py thonny/plugins/esp/esp32_api_stubs/json.py thonny/plugins/esp/esp32_api_stubs/machine.py thonny/plugins/esp/esp32_api_stubs/math.py thonny/plugins/esp/esp32_api_stubs/micropython.py thonny/plugins/esp/esp32_api_stubs/neopixel.py thonny/plugins/esp/esp32_api_stubs/network.py thonny/plugins/esp/esp32_api_stubs/ntptime.py thonny/plugins/esp/esp32_api_stubs/onewire.py thonny/plugins/esp/esp32_api_stubs/os.py thonny/plugins/esp/esp32_api_stubs/random.py thonny/plugins/esp/esp32_api_stubs/re.py thonny/plugins/esp/esp32_api_stubs/select.py thonny/plugins/esp/esp32_api_stubs/socket.py thonny/plugins/esp/esp32_api_stubs/ssl.py thonny/plugins/esp/esp32_api_stubs/struct.py thonny/plugins/esp/esp32_api_stubs/sys.py thonny/plugins/esp/esp32_api_stubs/time.py thonny/plugins/esp/esp32_api_stubs/ubinascii.py thonny/plugins/esp/esp32_api_stubs/ucollections.py thonny/plugins/esp/esp32_api_stubs/uctypes.py thonny/plugins/esp/esp32_api_stubs/uerrno.py thonny/plugins/esp/esp32_api_stubs/uhashlib.py thonny/plugins/esp/esp32_api_stubs/uheapq.py thonny/plugins/esp/esp32_api_stubs/uio.py thonny/plugins/esp/esp32_api_stubs/ujson.py thonny/plugins/esp/esp32_api_stubs/uos.py thonny/plugins/esp/esp32_api_stubs/upip.py thonny/plugins/esp/esp32_api_stubs/upip_utarfile.py thonny/plugins/esp/esp32_api_stubs/upysh.py thonny/plugins/esp/esp32_api_stubs/urandom.py thonny/plugins/esp/esp32_api_stubs/ure.py thonny/plugins/esp/esp32_api_stubs/urequests.py thonny/plugins/esp/esp32_api_stubs/uselect.py thonny/plugins/esp/esp32_api_stubs/usocket.py thonny/plugins/esp/esp32_api_stubs/ussl.py thonny/plugins/esp/esp32_api_stubs/ustruct.py thonny/plugins/esp/esp32_api_stubs/utime.py thonny/plugins/esp/esp32_api_stubs/utimeq.py thonny/plugins/esp/esp32_api_stubs/uzlib.py thonny/plugins/esp/esp32_api_stubs/webrepl.py thonny/plugins/esp/esp32_api_stubs/webrepl_setup.py thonny/plugins/esp/esp32_api_stubs/websocket.py thonny/plugins/esp/esp32_api_stubs/websocket_helper.py thonny/plugins/esp/esp32_api_stubs/zlib.py thonny/plugins/help/__init__.py thonny/plugins/help/birdseye.rst thonny/plugins/help/debuggers.rst thonny/plugins/help/debugging.rst thonny/plugins/help/dock.rst thonny/plugins/help/errors.rst thonny/plugins/help/flask.rst thonny/plugins/help/index.rst thonny/plugins/help/modes.rst thonny/plugins/help/packages.rst thonny/plugins/help/plotter.rst thonny/plugins/help/program_arguments.rst thonny/plugins/help/shell.rst thonny/plugins/help/turtle.rst thonny/plugins/microbit/__init__.py thonny/plugins/microbit/api_stubs/antigravity.py thonny/plugins/microbit/api_stubs/array.py thonny/plugins/microbit/api_stubs/audio.py thonny/plugins/microbit/api_stubs/builtins.py thonny/plugins/microbit/api_stubs/collections.py thonny/plugins/microbit/api_stubs/gc.py thonny/plugins/microbit/api_stubs/love.py thonny/plugins/microbit/api_stubs/machine.py thonny/plugins/microbit/api_stubs/math.py thonny/plugins/microbit/api_stubs/microbit.py thonny/plugins/microbit/api_stubs/micropython.py thonny/plugins/microbit/api_stubs/music.py thonny/plugins/microbit/api_stubs/neopixel.py thonny/plugins/microbit/api_stubs/os.py thonny/plugins/microbit/api_stubs/radio.py thonny/plugins/microbit/api_stubs/random.py thonny/plugins/microbit/api_stubs/speech.py thonny/plugins/microbit/api_stubs/struct.py thonny/plugins/microbit/api_stubs/sys.py thonny/plugins/microbit/api_stubs/this.py thonny/plugins/microbit/api_stubs/time.py thonny/plugins/microbit/api_stubs/ucollections.py thonny/plugins/microbit/api_stubs/ustruct.py thonny/plugins/microbit/api_stubs/utime.py thonny/plugins/micropython/__init__.py thonny/plugins/micropython/backend.py thonny/plugins/micropython/bare_metal_backend.py thonny/plugins/micropython/connection.py thonny/plugins/micropython/minipip.py thonny/plugins/micropython/miniterm_wrapper.py thonny/plugins/micropython/os_mp_backend.py thonny/plugins/micropython/pip_gui.py thonny/plugins/micropython/serial_connection.py thonny/plugins/micropython/ssh_connection.py thonny/plugins/micropython/subprocess_connection.py thonny/plugins/micropython/uf2dialog.py thonny/plugins/micropython/webrepl_connection.py thonny/plugins/micropython/api_stubs/_onewire.py thonny/plugins/micropython/api_stubs/array.py thonny/plugins/micropython/api_stubs/binascii.py thonny/plugins/micropython/api_stubs/builtins.py thonny/plugins/micropython/api_stubs/cmath.py thonny/plugins/micropython/api_stubs/collections.py thonny/plugins/micropython/api_stubs/dht.py thonny/plugins/micropython/api_stubs/errno.py thonny/plugins/micropython/api_stubs/framebuf.py thonny/plugins/micropython/api_stubs/gc.py thonny/plugins/micropython/api_stubs/hashlib.py thonny/plugins/micropython/api_stubs/heapq.py thonny/plugins/micropython/api_stubs/io.py thonny/plugins/micropython/api_stubs/json.py thonny/plugins/micropython/api_stubs/lcd160cr.py thonny/plugins/micropython/api_stubs/machine.py thonny/plugins/micropython/api_stubs/math.py thonny/plugins/micropython/api_stubs/micropython.py thonny/plugins/micropython/api_stubs/network.py thonny/plugins/micropython/api_stubs/onewire.py thonny/plugins/micropython/api_stubs/os.py thonny/plugins/micropython/api_stubs/pyb.py thonny/plugins/micropython/api_stubs/random.py thonny/plugins/micropython/api_stubs/re.py thonny/plugins/micropython/api_stubs/select.py thonny/plugins/micropython/api_stubs/socket.py thonny/plugins/micropython/api_stubs/stm.py thonny/plugins/micropython/api_stubs/struct.py thonny/plugins/micropython/api_stubs/sys.py thonny/plugins/micropython/api_stubs/time.py thonny/plugins/micropython/api_stubs/ubinascii.py thonny/plugins/micropython/api_stubs/ucollections.py thonny/plugins/micropython/api_stubs/uctypes.py thonny/plugins/micropython/api_stubs/uerrno.py thonny/plugins/micropython/api_stubs/uhashlib.py thonny/plugins/micropython/api_stubs/uheapq.py thonny/plugins/micropython/api_stubs/uio.py thonny/plugins/micropython/api_stubs/ujson.py thonny/plugins/micropython/api_stubs/umachine.py thonny/plugins/micropython/api_stubs/uos.py thonny/plugins/micropython/api_stubs/urandom.py thonny/plugins/micropython/api_stubs/ure.py thonny/plugins/micropython/api_stubs/uselect.py thonny/plugins/micropython/api_stubs/usocket.py thonny/plugins/micropython/api_stubs/ustruct.py thonny/plugins/micropython/api_stubs/utime.py thonny/plugins/micropython/api_stubs/utimeq.py thonny/plugins/micropython/api_stubs/uzlib.py thonny/plugins/micropython/api_stubs/zlib.py thonny/plugins/mypy/__init__.py thonny/plugins/pi/__init__.py thonny/plugins/pi/res/_disabled_debug-run-cursor.png thonny/plugins/pi/res/_disabled_debug-run-cursor48.png thonny/plugins/pi/res/_disabled_debug-run.png thonny/plugins/pi/res/_disabled_debug-run48.png thonny/plugins/pi/res/_disabled_debug-step-into.png thonny/plugins/pi/res/_disabled_debug-step-into48.png thonny/plugins/pi/res/_disabled_debug-step-out.png thonny/plugins/pi/res/_disabled_debug-step-out48.png thonny/plugins/pi/res/_disabled_debug-step-over.png thonny/plugins/pi/res/_disabled_debug-step-over48.png thonny/plugins/pi/res/_disabled_document-new.png thonny/plugins/pi/res/_disabled_document-new48.png thonny/plugins/pi/res/_disabled_document-open.png thonny/plugins/pi/res/_disabled_document-open48.png thonny/plugins/pi/res/_disabled_document-save.png thonny/plugins/pi/res/_disabled_document-save48.png thonny/plugins/pi/res/_disabled_media-playback-start.png thonny/plugins/pi/res/_disabled_media-playback-start48.png thonny/plugins/pi/res/_disabled_process-stop.png thonny/plugins/pi/res/_disabled_process-stop48.png thonny/plugins/pi/res/_disabled_quit.png thonny/plugins/pi/res/_disabled_quit48.png thonny/plugins/pi/res/_disabled_resume.png thonny/plugins/pi/res/_disabled_resume48.png thonny/plugins/pi/res/_disabled_scrollbar-button-down-insens.png thonny/plugins/pi/res/_disabled_scrollbar-button-down.png thonny/plugins/pi/res/_disabled_scrollbar-button-left-insens.png thonny/plugins/pi/res/_disabled_scrollbar-button-left.png thonny/plugins/pi/res/_disabled_scrollbar-button-right-insens.png thonny/plugins/pi/res/_disabled_scrollbar-button-right.png thonny/plugins/pi/res/_disabled_scrollbar-button-up-insens.png thonny/plugins/pi/res/_disabled_scrollbar-button-up.png thonny/plugins/pi/res/_disabled_window-close-act.png thonny/plugins/pi/res/_disabled_window-close.png thonny/plugins/pi/res/_disabled_zoom.png thonny/plugins/pi/res/_disabled_zoom48.png thonny/plugins/pi/res/debug-run-cursor.png thonny/plugins/pi/res/debug-run-cursor48.png thonny/plugins/pi/res/debug-run.png thonny/plugins/pi/res/debug-run48.png thonny/plugins/pi/res/debug-step-into.png thonny/plugins/pi/res/debug-step-into48.png thonny/plugins/pi/res/debug-step-out.png thonny/plugins/pi/res/debug-step-out48.png thonny/plugins/pi/res/debug-step-over.png thonny/plugins/pi/res/debug-step-over48.png thonny/plugins/pi/res/document-new.png thonny/plugins/pi/res/document-new48.png thonny/plugins/pi/res/document-open.png thonny/plugins/pi/res/document-open48.png thonny/plugins/pi/res/document-save.png thonny/plugins/pi/res/document-save48.png thonny/plugins/pi/res/media-playback-start.png thonny/plugins/pi/res/media-playback-start48.png thonny/plugins/pi/res/process-stop.png thonny/plugins/pi/res/process-stop48.png thonny/plugins/pi/res/quit.png thonny/plugins/pi/res/quit48.png thonny/plugins/pi/res/resume.png thonny/plugins/pi/res/resume48.png thonny/plugins/pi/res/scrollbar-button-down-insens.png thonny/plugins/pi/res/scrollbar-button-down.png thonny/plugins/pi/res/scrollbar-button-left-insens.png thonny/plugins/pi/res/scrollbar-button-left.png thonny/plugins/pi/res/scrollbar-button-right-insens.png thonny/plugins/pi/res/scrollbar-button-right.png thonny/plugins/pi/res/scrollbar-button-up-insens.png thonny/plugins/pi/res/scrollbar-button-up.png thonny/plugins/pi/res/window-close-act.png thonny/plugins/pi/res/window-close.png thonny/plugins/pi/res/zoom.png thonny/plugins/pi/res/zoom48.png thonny/plugins/printing/__init__.py thonny/plugins/printing/template.html thonny/plugins/pylint/__init__.py thonny/plugins/pylint/messages.py thonny/plugins/rpi_pico/__init__.py thonny/plugins/rpi_pico/rpi_pico_backend.py thonny/plugins/system_shell/__init__.py thonny/plugins/system_shell/explain_environment.py thonny/res/16x16-blank.gif thonny/res/1x1-white.gif thonny/res/PrintLnkTarget.vbs thonny/res/_create_disabled_variants.py thonny/res/_disabled_16x16-blank.gif thonny/res/_disabled_1x1-white.gif thonny/res/_disabled_arrow-down.gif thonny/res/_disabled_birdseye.png thonny/res/_disabled_boxdot.png thonny/res/_disabled_boxdot_light.png thonny/res/_disabled_boxminus.png thonny/res/_disabled_boxminus_light.png thonny/res/_disabled_boxplus.png thonny/res/_disabled_boxplus_light.png thonny/res/_disabled_boxx.png thonny/res/_disabled_boxx_light.png thonny/res/_disabled_closed-folder.gif thonny/res/_disabled_debug-current-script.png thonny/res/_disabled_debug-current-script_2x.png thonny/res/_disabled_delete.gif thonny/res/_disabled_folder.gif thonny/res/_disabled_generic-file.gif thonny/res/_disabled_hard-drive.gif thonny/res/_disabled_harddisk.png thonny/res/_disabled_harddisk_2x.png thonny/res/_disabled_help.png thonny/res/_disabled_help_2x.png thonny/res/_disabled_information.png thonny/res/_disabled_information_2x.png thonny/res/_disabled_nav-backward.png thonny/res/_disabled_nav-backward_2x.png thonny/res/_disabled_nav-forward.png thonny/res/_disabled_nav-forward_2x.png thonny/res/_disabled_new-file.png thonny/res/_disabled_new-file_Linux.png thonny/res/_disabled_new-file_Linux_2x.png thonny/res/_disabled_open-file.png thonny/res/_disabled_open-file_Linux.png thonny/res/_disabled_open-file_Linux_2x.png thonny/res/_disabled_open_folder.gif thonny/res/_disabled_outline-class.png thonny/res/_disabled_outline-class_2x.png thonny/res/_disabled_outline-method.gif thonny/res/_disabled_python-file.gif thonny/res/_disabled_python-icon.gif thonny/res/_disabled_quit.png thonny/res/_disabled_quit_2x.png thonny/res/_disabled_resume.png thonny/res/_disabled_resume_2x.png thonny/res/_disabled_run-current-script.png thonny/res/_disabled_run-current-script_2x.png thonny/res/_disabled_run-to-cursor.png thonny/res/_disabled_run-to-cursor_2x.png thonny/res/_disabled_save-file.png thonny/res/_disabled_save-file_2x_alt.png thonny/res/_disabled_save-file_Linux.png thonny/res/_disabled_save-file_Linux_2x.png thonny/res/_disabled_save-file_alt.png thonny/res/_disabled_star.png thonny/res/_disabled_star_2x.png thonny/res/_disabled_step-into.png thonny/res/_disabled_step-into_2x.png thonny/res/_disabled_step-out.png thonny/res/_disabled_step-out_2x.png thonny/res/_disabled_step-over.png thonny/res/_disabled_step-over_2x.png thonny/res/_disabled_stop.png thonny/res/_disabled_stop_2x_alt.png thonny/res/_disabled_stop_alt.png thonny/res/_disabled_tab-close-active-clam-dark.gif thonny/res/_disabled_tab-close-active-clam.gif thonny/res/_disabled_tab-close-active.gif thonny/res/_disabled_tab-close-clam.gif thonny/res/_disabled_tab-close.gif thonny/res/_disabled_terminal.png thonny/res/_disabled_terminal_2x.png thonny/res/_disabled_text-file.gif thonny/res/_disabled_thonny.png thonny/res/_disabled_zoom.png thonny/res/arrow-down.gif thonny/res/birdseye.png thonny/res/boxdot.png thonny/res/boxdot_light.png thonny/res/boxminus.png thonny/res/boxminus_light.png thonny/res/boxplus.png thonny/res/boxplus_light.png thonny/res/boxx.png thonny/res/boxx_light.png thonny/res/broken.png thonny/res/closed-folder.gif thonny/res/debug-current-script.png thonny/res/debug-current-script_2x.png thonny/res/delete.gif thonny/res/folder.gif thonny/res/generic-file.gif thonny/res/hard-drive.gif thonny/res/harddisk.png thonny/res/harddisk_2x.png thonny/res/help.png thonny/res/help_2x.png thonny/res/information.png thonny/res/information_2x.png thonny/res/nav-backward.png thonny/res/nav-backward_2x.png thonny/res/nav-forward.png thonny/res/nav-forward_2x.png thonny/res/new-file.png thonny/res/new-file_Linux.png thonny/res/new-file_Linux_2x.png thonny/res/open-file.png thonny/res/open-file_Linux.png thonny/res/open-file_Linux_2x.png thonny/res/open_folder.gif thonny/res/outline-class.png thonny/res/outline-class_2x.png thonny/res/outline-method.gif thonny/res/python-file.gif thonny/res/python-icon.gif thonny/res/quit.png thonny/res/quit_2x.png thonny/res/resume.png thonny/res/resume_2x.png thonny/res/run-current-script.png thonny/res/run-current-script_2x.png thonny/res/run-to-cursor.png thonny/res/run-to-cursor_2x.png thonny/res/save-file.png thonny/res/save-file_2x_alt.png thonny/res/save-file_Linux.png thonny/res/save-file_Linux_2x.png thonny/res/save-file_alt.png thonny/res/star.png thonny/res/star_2x.png thonny/res/step-into.png thonny/res/step-into_2x.png thonny/res/step-out.png thonny/res/step-out_2x.png thonny/res/step-over.png thonny/res/step-over_2x.png thonny/res/stop.png thonny/res/stop_2x_alt.png thonny/res/stop_alt.png thonny/res/tab-close-active-clam-dark.gif thonny/res/tab-close-active-clam.gif thonny/res/tab-close-active.gif thonny/res/tab-close-clam.gif thonny/res/tab-close.gif thonny/res/terminal.png thonny/res/terminal_2x.png thonny/res/text-file.gif thonny/res/thonny.ico thonny/res/thonny.png thonny/res/thonny_small.ico thonny/res/zoom.png thonny/test/__init__.py thonny/test/test_common.py thonny/test/plugins/__init__.py thonny/test/plugins/test_locals_marker.py thonny/test/plugins/test_name_highlighter.pythonny-3.3.14/thonny.egg-info/dependency_links.txt000066400000000000000000000000011411757431400222070ustar00rootroot00000000000000 thonny-3.3.14/thonny.egg-info/entry_points.txt000066400000000000000000000000461411757431400214370ustar00rootroot00000000000000[gui_scripts] thonny = thonny:launch thonny-3.3.14/thonny.egg-info/requires.txt000066400000000000000000000001601411757431400205360ustar00rootroot00000000000000jedi>=0.13 setuptools>=33.1 pyserial>=3.4 pylint>=1.9 docutils>=0.14 mypy>=0.670 asttokens>=1.1 Send2Trash>=1.4 thonny-3.3.14/thonny.egg-info/top_level.txt000066400000000000000000000000071411757431400206700ustar00rootroot00000000000000thonny thonny-3.3.14/thonny/000077500000000000000000000000001411757431400144475ustar00rootroot00000000000000thonny-3.3.14/thonny/VERSION000066400000000000000000000000061411757431400155130ustar00rootroot000000000000003.3.14thonny-3.3.14/thonny/__init__.py000066400000000000000000000313331411757431400165630ustar00rootroot00000000000000import os.path import platform import logging import sys import traceback from typing import TYPE_CHECKING, Optional, cast SINGLE_INSTANCE_DEFAULT = True def _compute_thonny_user_dir(): if os.environ.get("THONNY_USER_DIR", ""): return os.path.expanduser(os.environ["THONNY_USER_DIR"]) elif is_portable(): if platform.system() == "Windows": root_dir = os.path.dirname(sys.executable) elif platform.system() == "Darwin": root_dir = os.path.join( os.path.dirname(sys.executable), "..", "..", "..", "..", "..", ".." ) else: root_dir = os.path.join(os.path.dirname(sys.executable), "..") return os.path.normpath(os.path.abspath(os.path.join(root_dir, "user_data"))) elif ( hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix or hasattr(sys, "real_prefix") and getattr(sys, "real_prefix") != sys.prefix ): # we're in a virtualenv or venv return os.path.join(sys.prefix, ".thonny") elif platform.system() == "Windows": from thonny import misc_utils return os.path.join(misc_utils.get_roaming_appdata_dir(), "Thonny") elif platform.system() == "Darwin": return os.path.expanduser("~/Library/Thonny") else: # https://specifications.freedesktop.org/basedir-spec/latest/ar01s02.html data_home = os.environ.get( "XDG_CONFIG_HOME", os.path.expanduser(os.path.join("~", ".config")) ) return os.path.join(data_home, "Thonny") def _read_configured_debug_mode(): if not os.path.exists(CONFIGURATION_FILE): return False try: with open(CONFIGURATION_FILE, encoding="utf-8") as fp: for line in fp: if "debug_mode" in line and "True" in line: return True return False except Exception: import traceback traceback.print_exc() return False def is_portable(): # it can be explicitly declared as portable or shared ... portable_marker_path = os.path.join(os.path.dirname(sys.executable), "portable_thonny.ini") shared_marker_path = os.path.join(os.path.dirname(sys.executable), "shared_thonny.ini") if os.path.exists(portable_marker_path) and not os.path.exists(shared_marker_path): return True elif not os.path.exists(portable_marker_path) and os.path.exists(shared_marker_path): return False # ... or it becomes implicitly portable if it's on a removable drive abs_location = os.path.abspath(__file__) if platform.system() == "Windows": drive = os.path.splitdrive(abs_location)[0] if drive.endswith(":"): from ctypes import windll return windll.kernel32.GetDriveTypeW(drive) == 2 # @UndefinedVariable else: return False elif platform.system() == "Darwin": # not exact heuristics return abs_location.startswith("/Volumes/") else: # not exact heuristics return abs_location.startswith("/media/") or abs_location.startswith("/mnt/") def get_version(): try: package_dir = os.path.dirname(sys.modules["thonny"].__file__) with open(os.path.join(package_dir, "VERSION"), encoding="ASCII") as fp: return fp.read().strip() except Exception: return "0.0.0" THONNY_USER_DIR = _compute_thonny_user_dir() CONFIGURATION_FILE = os.path.join(THONNY_USER_DIR, "configuration.ini") _CONFIGURED_DEBUG = _read_configured_debug_mode() _IPC_FILE = None def get_ipc_file_path(): global _IPC_FILE if _IPC_FILE: return _IPC_FILE from thonny import misc_utils if platform.system() == "Windows": base_dir = misc_utils.get_local_appdata_dir() else: base_dir = os.environ.get("XDG_RUNTIME_DIR") if not base_dir or not os.path.exists(base_dir): base_dir = os.environ.get("TMPDIR") if not base_dir or not os.path.exists(base_dir): base_dir = THONNY_USER_DIR for name in ("LOGNAME", "USER", "LNAME", "USERNAME"): if name in os.environ: username = os.environ.get(name) break else: username = os.path.basename(os.path.expanduser("~")) ipc_dir = os.path.join(base_dir, "thonny-%s" % username) os.makedirs(ipc_dir, exist_ok=True) if not platform.system() == "Windows": os.chmod(ipc_dir, 0o700) _IPC_FILE = os.path.join(ipc_dir, "ipc.sock") return _IPC_FILE def _check_welcome(): from thonny import misc_utils if not os.path.exists(CONFIGURATION_FILE) and not misc_utils.running_on_rpi(): from thonny.config import ConfigurationManager from thonny.first_run import FirstRunWindow mgr = ConfigurationManager(CONFIGURATION_FILE) win = FirstRunWindow(mgr) win.mainloop() return win.ok else: return True def launch(): import runpy import socket if sys.executable.endswith("thonny.exe"): # otherwise some library may try to run its subprocess with thonny.exe # NB! Must be pythonw.exe not python.exe, otherwise Runner thinks console # is already allocated. sys.executable = sys.executable[: -len("thonny.exe")] + "pythonw.exe" set_dpi_aware() try: runpy.run_module("thonny.customize", run_name="__main__") except ImportError: pass prepare_thonny_user_dir() _configure_frontend_logging() if not _check_welcome(): return 0 if _should_delegate(): try: _delegate_to_existing_instance(sys.argv[1:]) print("Delegated to an existing Thonny instance. Exiting now.") return 0 except Exception: import traceback traceback.print_exc() # Did not or could not delegate try: from thonny import workbench bench = workbench.Workbench() try: bench.mainloop() except SystemExit: bench.destroy() return 0 except SystemExit as e: from tkinter import messagebox, _default_root messagebox.showerror("System exit", str(e), master=_default_root) return -1 except Exception: from logging import exception import traceback exception("Internal launch or mainloop error") from thonny import ui_utils dlg = ui_utils.LongTextDialog("Internal error", traceback.format_exc()) ui_utils.show_dialog(dlg, get_workbench()) return -1 finally: runner = get_runner() if runner is not None: runner.destroy_backend() return 0 def prepare_thonny_user_dir(): if not os.path.exists(THONNY_USER_DIR): os.makedirs(THONNY_USER_DIR, mode=0o700, exist_ok=True) # user_dir_template is a post-installation means for providing # alternative default user environment in multi-user setups template_dir = os.path.join(os.path.dirname(__file__), "user_dir_template") if os.path.isdir(template_dir): import shutil def copy_contents(src_dir, dest_dir): # I want the copy to have current user permissions for name in os.listdir(src_dir): src_item = os.path.join(src_dir, name) dest_item = os.path.join(dest_dir, name) if os.path.isdir(src_item): os.makedirs(dest_item, mode=0o700) copy_contents(src_item, dest_item) else: shutil.copyfile(src_item, dest_item) os.chmod(dest_item, 0o600) copy_contents(template_dir, THONNY_USER_DIR) def _should_delegate(): if not os.path.exists(get_ipc_file_path()): # no previous instance return False from thonny.config import try_load_configuration configuration_manager = try_load_configuration(CONFIGURATION_FILE) configuration_manager.set_default("general.single_instance", SINGLE_INSTANCE_DEFAULT) return configuration_manager.get_option("general.single_instance") def _delegate_to_existing_instance(args): import socket from thonny import workbench transformed_args = [] for arg in args: if not arg.startswith("-"): arg = os.path.abspath(arg) transformed_args.append(arg) try: sock, secret = _create_client_socket() except Exception: # Maybe the lock is abandoned or the content is corrupted try: os.remove(get_ipc_file_path()) except Exception: import traceback traceback.print_exc() raise data = repr((secret, transformed_args)).encode(encoding="utf_8") sock.settimeout(2.0) sock.sendall(data) sock.shutdown(socket.SHUT_WR) response = bytes([]) while len(response) < len(workbench.SERVER_SUCCESS): new_data = sock.recv(2) if len(new_data) == 0: break else: response += new_data if response.decode("UTF-8") != workbench.SERVER_SUCCESS: raise RuntimeError("Unsuccessful delegation") def _create_client_socket(): import socket timeout = 2.0 if platform.system() == "Windows": with open(get_ipc_file_path(), "r") as fp: port = int(fp.readline().strip()) secret = fp.readline().strip() # "localhost" can be much slower than "127.0.0.1" client_socket = socket.create_connection(("127.0.0.1", port), timeout=timeout) else: client_socket = socket.socket(socket.AF_UNIX) # @UndefinedVariable client_socket.settimeout(timeout) client_socket.connect(get_ipc_file_path()) secret = "" return client_socket, secret def _configure_frontend_logging() -> None: _configure_logging("frontend.log") def configure_backend_logging() -> None: _configure_logging("backend.log", logging.WARNING) def _configure_logging(filename, console_level=None): logFormatter = logging.Formatter("%(levelname)-7s %(name)s: %(message)s") # NB! Don't mess with the root logger, because (CPython) backend runs user code thonny_root_logger = logging.getLogger("thonny") thonny_root_logger.setLevel(_choose_logging_level()) thonny_root_logger.propagate = False # otherwise it will be also reported by IDE-s root logger log_file = os.path.join(THONNY_USER_DIR, filename) file_handler = logging.FileHandler(log_file, encoding="UTF-8", mode="w") file_handler.setFormatter(logFormatter) thonny_root_logger.addHandler(file_handler) console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(logFormatter) if console_level is None: console_level = _choose_logging_level() console_handler.setLevel(console_level) thonny_root_logger.addHandler(console_handler) thonny_root_logger.info("Thonny version: %s", get_version()) import faulthandler fault_out = open(os.path.join(THONNY_USER_DIR, "frontend_faults.log"), mode="w") faulthandler.enable(fault_out) def set_dpi_aware(): # https://stackoverflow.com/questions/36134072/setprocessdpiaware-seems-not-to-work-under-windows-10 # https://bugs.python.org/issue33656 # https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx # https://github.com/python/cpython/blob/master/Lib/idlelib/pyshell.py if sys.platform == "win32": try: import ctypes PROCESS_SYSTEM_DPI_AWARE = 1 ctypes.OleDLL("shcore").SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) except (ImportError, AttributeError, OSError): pass if TYPE_CHECKING: # Following imports are required for MyPy # http://mypy.readthedocs.io/en/stable/common_issues.html#import-cycles import thonny.workbench from thonny.running import Runner from thonny.shell import ShellView from thonny.workbench import Workbench _workbench = None # type: Optional[Workbench] def get_workbench() -> "Workbench": return cast("Workbench", _workbench) _runner = None # type: Optional[Runner] def set_logging_level(level=None): if level is None: level = _choose_logging_level() logging.getLogger("thonny").setLevel(level) def _choose_logging_level(): if in_debug_mode(): return logging.DEBUG else: return logging.INFO def in_debug_mode() -> bool: # Value may be something other than string when it is set in Python code return ( os.environ.get("THONNY_DEBUG", False) in [ "1", 1, "True", True, "true", ] or _CONFIGURED_DEBUG ) def get_runner() -> "Runner": return cast("Runner", _runner) def get_shell() -> "ShellView": return cast("ShellView", get_workbench().get_view("ShellView")) thonny-3.3.14/thonny/__main__.py000066400000000000000000000000441411757431400165370ustar00rootroot00000000000000from thonny import launch launch() thonny-3.3.14/thonny/assistance.py000066400000000000000000001036231411757431400171630ustar00rootroot00000000000000import ast import datetime import logging import os.path import subprocess import sys import textwrap import tkinter as tk from collections import namedtuple from tkinter import messagebox, ttk from typing import Dict # pylint disable=unused-import from typing import List # pylint disable=unused-import from typing import Optional # pylint disable=unused-import from typing import Tuple # pylint disable=unused-import from typing import Type # pylint disable=unused-import from typing import Union # pylint disable=unused-import from typing import Iterable import thonny from thonny import get_runner, get_workbench, rst_utils, tktextext, ui_utils from thonny.common import ToplevelResponse, read_source from thonny.languages import tr from thonny.misc_utils import levenshtein_damerau_distance, running_on_mac_os from thonny.ui_utils import CommonDialog, scrollbar_style logger = logging.getLogger(__name__) Suggestion = namedtuple("Suggestion", ["symbol", "title", "body", "relevance"]) _program_analyzer_classes = [] # type: List[Type[ProgramAnalyzer]] _last_feedback_timestamps = {} # type: Dict[str, str] _error_helper_classes = {} # type: Dict[str, List[Type[ErrorHelper]]] class AssistantView(tktextext.TextFrame): def __init__(self, master): tktextext.TextFrame.__init__( self, master, text_class=AssistantRstText, vertical_scrollbar_style=scrollbar_style("Vertical"), horizontal_scrollbar_style=scrollbar_style("Horizontal"), horizontal_scrollbar_class=ui_utils.AutoScrollbar, read_only=True, wrap="word", font="TkDefaultFont", # cursor="arrow", padx=10, pady=0, insertwidth=0, ) self._analyzer_instances = [] self._snapshots_per_main_file = {} self._current_snapshot = None self._accepted_warning_sets = [] self.text.tag_configure( "section_title", spacing3=5, font="BoldTkDefaultFont", # foreground=get_syntax_options_for_tag("stderr")["foreground"] ) self.text.tag_configure( "intro", # font="ItalicTkDefaultFont", spacing3=10, ) self.text.tag_configure("relevant_suggestion_title", font="BoldTkDefaultFont") self.text.tag_configure("suggestion_title", lmargin2=16, spacing1=5, spacing3=5) self.text.tag_configure("suggestion_body", lmargin1=16, lmargin2=16) self.text.tag_configure("body", font="ItalicTkDefaultFont") main_font = tk.font.nametofont("TkDefaultFont") # Underline on font looks better than underline on tag italic_underline_font = main_font.copy() italic_underline_font.configure(slant="italic", size=main_font.cget("size"), underline=True) self.text.tag_configure("feedback_link", justify="right", font=italic_underline_font) self.text.tag_bind("feedback_link", "", self._ask_feedback, True) self.text.tag_configure("python_errors_link", justify="right", font=italic_underline_font) self.text.tag_bind( "python_errors_link", "", lambda e: get_workbench().open_url("errors.rst"), True, ) get_workbench().bind("ToplevelResponse", self.handle_toplevel_response, True) add_error_helper("*", GenericErrorHelper) def handle_toplevel_response(self, msg: ToplevelResponse) -> None: # Can be called by event system or by Workbench # (if Assistant wasn't created yet but an error came) if not msg.get("user_exception") and msg.get("command_name") in [ "execute_system_command", "execute_source", ]: # Shell commands may be used to investigate the problem, don't clear assistance return self._clear() from thonny.plugins.cpython import CPythonProxy if not isinstance(get_runner().get_backend_proxy(), CPythonProxy): # TODO: add some support for MicroPython as well return # prepare for snapshot key = msg.get("filename", "") self._current_snapshot = { "timestamp": datetime.datetime.now().isoformat()[:19], "main_file_path": key, } self._snapshots_per_main_file.setdefault(key, []) self._snapshots_per_main_file[key].append(self._current_snapshot) if msg.get("user_exception"): if not msg["user_exception"].get("message", None): msg["user_exception"]["message"] = "" self._exception_info = msg["user_exception"] self._explain_exception(msg["user_exception"]) if get_workbench().get_option("assistance.open_assistant_on_errors"): get_workbench().show_view("AssistantView", set_focus=False) else: self._exception_info = None if msg.get("filename") and os.path.exists(msg["filename"]): self.main_file_path = msg["filename"] source = read_source(msg["filename"]) self._start_program_analyses( msg["filename"], source, _get_imported_user_files(msg["filename"], source) ) else: self.main_file_path = None self._present_conclusion() def _explain_exception(self, error_info): rst = ( self._get_rst_prelude() + rst_utils.create_title( error_info["type_name"] + ": " + rst_utils.escape(error_info["message"]) ) + "\n" ) if ( error_info.get("lineno") is not None and error_info.get("filename") and os.path.exists(error_info["filename"]) ): rst += "`%s, line %d <%s>`__\n\n" % ( os.path.basename(error_info["filename"]), error_info["lineno"], self._format_file_url(error_info), ) helpers = [] for helper_class in ( _error_helper_classes.get(error_info["type_name"], []) + _error_helper_classes["*"] ): try: helpers.append(helper_class(error_info)) except HelperNotSupportedError: pass except Exception as e: logger.exception("Could not create helper %s", helper_class, exc_info=e) best_intro = helpers[0] for helper in helpers: if helper.intro_confidence > best_intro.intro_confidence: best_intro = helper # intro if best_intro.intro_text: rst += ( ".. note::\n" + " " + best_intro.intro_text.strip().replace("\n", "\n\n ") + "\n\n" ) suggestions = [ suggestion for helper in helpers for suggestion in helper.suggestions if suggestion is not None ] suggestions = sorted(suggestions, key=lambda s: s.relevance, reverse=True) if suggestions[0].relevance > 1 or best_intro.intro_confidence > 1: relevance_threshold = 2 else: # use relevance 1 only when there is nothing better relevance_threshold = 1 suggestions = [s for s in suggestions if s.relevance >= relevance_threshold] for i, suggestion in enumerate(suggestions): rst += self._format_suggestion( suggestion, i == len(suggestions) - 1, # TODO: is it good if first is preopened? # It looks cleaner if it is not. False, # i==0 ) self._current_snapshot["exception_suggestions"] = [ dict(sug._asdict()) for sug in suggestions ] self.text.append_rst(rst) self._append_text("\n") self._current_snapshot["exception_type_name"] = error_info["type_name"] self._current_snapshot["exception_message"] = error_info["message"] self._current_snapshot["exception_file_path"] = error_info["filename"] self._current_snapshot["exception_lineno"] = error_info["lineno"] self._current_snapshot["exception_rst"] = rst # for debugging purposes def _format_suggestion(self, suggestion, last, initially_open): return ( # assuming that title is already in rst format ".. topic:: " + suggestion.title + "\n" + " :class: toggle%s%s\n" % (", open" if initially_open else "", ", tight" if not last else "") + " \n" + textwrap.indent(suggestion.body, " ") + "\n\n" ) def _append_text(self, chars, tags=()): self.text.direct_insert("end", chars, tags=tags) def _clear(self): self._accepted_warning_sets.clear() for wp in self._analyzer_instances: wp.cancel_analysis() self._analyzer_instances = [] self.text.clear() def _start_program_analyses(self, main_file_path, main_file_source, imported_file_paths): for cls in _program_analyzer_classes: analyzer = cls(self._accept_warnings) if analyzer.is_enabled(): self._analyzer_instances.append(analyzer) if not self._analyzer_instances: return self._append_text("\nAnalyzing your code ...", ("em",)) # save snapshot of current source self._current_snapshot["main_file_path"] = main_file_path self._current_snapshot["main_file_source"] = main_file_source self._current_snapshot["imported_files"] = { name: read_source(name) for name in imported_file_paths } # start the analysis for analyzer in self._analyzer_instances: analyzer.start_analysis(main_file_path, imported_file_paths) def _accept_warnings(self, analyzer, warnings): if analyzer.cancelled: return self._accepted_warning_sets.append(warnings) if len(self._accepted_warning_sets) == len(self._analyzer_instances): self._present_warnings() self._present_conclusion() def _present_conclusion(self): if not self.text.get("1.0", "end").strip(): if self.main_file_path is not None and os.path.exists(self.main_file_path): self._append_text("\n") self.text.append_rst( "The code in `%s <%s>`__ looks good.\n\n" % ( os.path.basename(self.main_file_path), self._format_file_url({"filename": self.main_file_path}), ) ) self.text.append_rst( "If it is not working as it should, " + "then consider using some general " + "`debugging techniques `__.\n\n", ("em",), ) if self.text.get("1.0", "end").strip(): self._append_feedback_link() if self._exception_info: self._append_text( "General advice on dealing with errors.\n", ("a", "python_errors_link") ) def _present_warnings(self): warnings = [w for ws in self._accepted_warning_sets for w in ws] self.text.direct_delete("end-2l linestart", "end-1c lineend") if not warnings: return if self._exception_info is None: intro = "May be ignored if you are happy with your program." else: intro = "May help you find the cause of the error." rst = ( self._get_rst_prelude() + rst_utils.create_title("Warnings") + ":remark:`%s`\n\n" % intro ) by_file = {} for warning in warnings: if warning["filename"] not in by_file: by_file[warning["filename"]] = [] if warning not in by_file[warning["filename"]]: # Pylint may give double warnings (eg. when module imports itself) by_file[warning["filename"]].append(warning) for filename in by_file: rst += "`%s <%s>`__\n\n" % ( os.path.basename(filename), self._format_file_url(dict(filename=filename)), ) file_warnings = sorted( by_file[filename], key=lambda x: (x.get("lineno", 0), -x.get("relevance", 1)) ) for i, warning in enumerate(file_warnings): rst += self._format_warning(warning, i == len(file_warnings) - 1) + "\n" rst += "\n" self.text.append_rst(rst) # save snapshot self._current_snapshot["warnings_rst"] = rst self._current_snapshot["warnings"] = warnings if get_workbench().get_option("assistance.open_assistant_on_warnings"): get_workbench().show_view("AssistantView") def _format_warning(self, warning, last): title = rst_utils.escape(warning["msg"].splitlines()[0]) if warning.get("lineno") is not None: url = self._format_file_url(warning) if warning.get("lineno"): title = "`Line %d <%s>`__ : %s" % (warning["lineno"], url, title) if warning.get("explanation_rst"): explanation_rst = warning["explanation_rst"] elif warning.get("explanation"): explanation_rst = rst_utils.escape(warning["explanation"]) else: explanation_rst = "" if warning.get("more_info_url"): explanation_rst += "\n\n`More info online <%s>`__" % warning["more_info_url"] explanation_rst = explanation_rst.strip() topic_class = "toggle" if explanation_rst else "empty" if not explanation_rst: explanation_rst = "n/a" return ( ".. topic:: %s\n" % title + " :class: " + topic_class + ("" if last else ", tight") + "\n" + " \n" + textwrap.indent(explanation_rst, " ") + "\n\n" ) def _append_feedback_link(self): self._append_text("Was it helpful or confusing?\n", ("a", "feedback_link")) def _format_file_url(self, atts): return format_file_url(atts["filename"], atts.get("lineno"), atts.get("col_offset")) def _ask_feedback(self, event=None): all_snapshots = self._snapshots_per_main_file[self._current_snapshot["main_file_path"]] # TODO: select only snapshots which are not sent yet snapshots = all_snapshots ui_utils.show_dialog(FeedbackDialog(get_workbench(), self.main_file_path, snapshots)) def _get_rst_prelude(self): return ".. default-role:: code\n\n" + ".. role:: light\n\n" + ".. role:: remark\n\n" class AssistantRstText(rst_utils.RstText): def configure_tags(self): super().configure_tags() main_font = tk.font.nametofont("TkDefaultFont") italic_font = main_font.copy() italic_font.configure(slant="italic", size=main_font.cget("size")) h1_font = main_font.copy() h1_font.configure(weight="bold", size=main_font.cget("size")) self.tag_configure("h1", font=h1_font, spacing3=0, spacing1=10) self.tag_configure("topic_title", font="TkDefaultFont") self.tag_configure("topic_body", font=italic_font, spacing1=10, lmargin1=25, lmargin2=25) self.tag_raise("sel") class Helper: def get_intro(self) -> Tuple[str, int]: raise NotImplementedError() def get_suggestions(self) -> Iterable[Suggestion]: raise NotImplementedError() class ErrorHelper(Helper): def __init__(self, error_info): # TODO: don't repeat all this for all error helpers self.error_info = error_info self.last_frame = error_info["stack"][-1] self.last_frame_ast = None if self.last_frame.source: try: self.last_frame_ast = ast.parse(self.last_frame.source, self.last_frame.filename) except SyntaxError: pass self.last_frame_module_source = None self.last_frame_module_ast = None if self.last_frame.code_name == "": self.last_frame_module_source = self.last_frame.source self.last_frame_module_ast = self.last_frame_ast elif self.last_frame.filename is not None: try: self.last_frame_module_source = read_source(self.last_frame.filename) self.last_frame_module_ast = ast.parse(self.last_frame_module_source) except Exception: pass self.intro_confidence = 1 self.intro_text = "" self.suggestions = [] class GenericErrorHelper(ErrorHelper): def __init__(self, error_info): super().__init__(error_info) self.intro_text = "No specific suggestions for this error (yet)." self.intro_confidence = 1 self.suggestions = [ Suggestion( "ask-for-specific-support", "Let Thonny developers know", "Click on the feedback link at the bottom of this panel to let Thonny developers know " + "about your problem. They may add support for " + "such cases in future Thonny versions.", 1, ) ] if error_info["message"].lower() != "invalid syntax": self.suggestions.append( Suggestion( "generic-search-the-web", "Search the web", "Try performing a web search for\n\n``Python %s: %s``" % ( self.error_info["type_name"], rst_utils.escape(self.error_info["message"].replace("\n", " ").strip()), ), 1, ) ) class ProgramAnalyzer: def __init__(self, on_completion): self.completion_handler = on_completion self.cancelled = False def is_enabled(self): return True def start_analysis(self, main_file_path, imported_file_paths): raise NotImplementedError() def cancel_analysis(self): pass class SubprocessProgramAnalyzer(ProgramAnalyzer): def __init__(self, on_completion): super().__init__(on_completion) self._proc = None def cancel_analysis(self): self.cancelled = True if self._proc is not None: self._proc.kill() class LibraryErrorHelper(ErrorHelper): """Explains exceptions, which doesn't happen in user code""" def get_intro(self): return "This error happened in library code. This may mean a bug in " def get_suggestions(self): return [] class FeedbackDialog(CommonDialog): def __init__(self, master, main_file_path, all_snapshots): super().__init__(master=master) main_frame = ttk.Frame(self) main_frame.grid(row=0, column=0, sticky="nsew") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.main_file_path = main_file_path self.snapshots = self._select_unsent_snapshots(all_snapshots) self.title("Send feedback for Assistant") padx = 15 intro_label = ttk.Label( main_frame, text="Below are the messages Assistant gave you in response to " + ( "using the shell" if self._happened_in_shell() else "testing '" + os.path.basename(main_file_path) + "'" ) + " since " + self._get_since_str() + ".\n\n" + "In order to improve this feature, Thonny developers would love to know how " + "useful or confusing these messages were. We will only collect version " + "information and the data you enter or approve on this form.", wraplength=550, ) intro_label.grid(row=1, column=0, columnspan=3, sticky="nw", padx=padx, pady=(15, 15)) tree_label = ttk.Label( main_frame, text="Which messages were helpful (H) or confusing (C)? Click on [ ] to mark!", ) tree_label.grid(row=2, column=0, columnspan=3, sticky="nw", padx=padx, pady=(15, 0)) tree_frame = ui_utils.TreeFrame( main_frame, columns=["helpful", "confusing", "title", "group", "symbol"], displaycolumns=["helpful", "confusing", "title"], height=10, borderwidth=1, relief="groove", ) tree_frame.grid(row=3, column=0, columnspan=3, sticky="nsew", padx=padx) self.tree = tree_frame.tree self.tree.column("helpful", width=35, anchor=tk.CENTER, stretch=False) self.tree.column("confusing", width=35, anchor=tk.CENTER, stretch=False) self.tree.column("title", width=350, anchor=tk.W, stretch=True) self.tree.heading("helpful", text="H", anchor=tk.CENTER) self.tree.heading("confusing", text="C", anchor=tk.CENTER) self.tree.heading("title", text="Group / Message", anchor=tk.W) self.tree["show"] = ("headings",) self.tree.bind("<1>", self._on_tree_click, True) main_font = tk.font.nametofont("TkDefaultFont") bold_font = main_font.copy() bold_font.configure(weight="bold", size=main_font.cget("size")) self.tree.tag_configure("group", font=bold_font) self.include_thonny_id_var = tk.IntVar(value=1) include_thonny_id_check = ttk.Checkbutton( main_frame, variable=self.include_thonny_id_var, onvalue=1, offvalue=0, text="Include Thonny's installation time (allows us to group your submissions)", ) include_thonny_id_check.grid( row=4, column=0, columnspan=3, sticky="nw", padx=padx, pady=(5, 0) ) self.include_snapshots_var = tk.IntVar(value=1) include_snapshots_check = ttk.Checkbutton( main_frame, variable=self.include_snapshots_var, onvalue=1, offvalue=0, text="Include snapshots of the code and Assistant responses at each run", ) include_snapshots_check.grid( row=5, column=0, columnspan=3, sticky="nw", padx=padx, pady=(0, 0) ) comments_label = ttk.Label(main_frame, text="Any comments? Enhancement ideas?") comments_label.grid(row=6, column=0, columnspan=3, sticky="nw", padx=padx, pady=(15, 0)) self.comments_text_frame = tktextext.TextFrame( main_frame, vertical_scrollbar_style=scrollbar_style("Vertical"), horizontal_scrollbar_style=scrollbar_style("Horizontal"), horizontal_scrollbar_class=ui_utils.AutoScrollbar, wrap="word", font="TkDefaultFont", # cursor="arrow", padx=5, pady=5, height=4, borderwidth=1, relief="groove", ) self.comments_text_frame.grid(row=7, column=0, columnspan=3, sticky="nsew", padx=padx) url_font = tk.font.nametofont("TkDefaultFont").copy() url_font.configure(underline=1, size=url_font.cget("size")) preview_link = ttk.Label( main_frame, text="(Preview the data to be sent)", style="Url.TLabel", cursor="hand2", font=url_font, ) preview_link.bind("<1>", self._preview_submission_data, True) preview_link.grid(row=8, column=0, sticky="nw", padx=15, pady=15) submit_button = ttk.Button(main_frame, text="Submit", width=10, command=self._submit_data) submit_button.grid(row=8, column=0, sticky="ne", padx=0, pady=15) cancel_button = ttk.Button(main_frame, text="Cancel", width=7, command=self._close) cancel_button.grid(row=8, column=1, sticky="ne", padx=(10, 15), pady=15) self.protocol("WM_DELETE_WINDOW", self._close) self.bind("", self._close, True) main_frame.columnconfigure(0, weight=1) main_frame.rowconfigure(3, weight=3) main_frame.rowconfigure(6, weight=2) self._empty_box = "[ ]" self._checked_box = "[X]" self._populate_tree() def _happened_in_shell(self): return self.main_file_path is None or self.main_file_path.lower() == "" def _populate_tree(self): groups = {} for snap in self.snapshots: if snap.get("exception_message") and snap.get("exception_suggestions"): group = snap["exception_type_name"] groups.setdefault(group, set()) for sug in snap["exception_suggestions"]: groups[group].add((sug["symbol"], sug["title"])) # warnings group if snap.get("warnings"): group = "Warnings" groups.setdefault(group, set()) for w in snap["warnings"]: groups[group].add((w["symbol"], w["msg"])) for group in sorted(groups.keys(), key=lambda x: x.replace("Warnings", "z")): group_id = self.tree.insert("", "end", open=True, tags=("group",)) self.tree.set(group_id, "title", group) for symbol, title in sorted(groups[group], key=lambda m: m[1]): item_id = self.tree.insert("", "end") self.tree.set(item_id, "helpful", self._empty_box) self.tree.set(item_id, "confusing", self._empty_box) self.tree.set(item_id, "title", title) self.tree.set(item_id, "symbol", symbol) self.tree.set(item_id, "group", group) self.tree.see("") def _on_tree_click(self, event): item_id = self.tree.identify("item", event.x, event.y) column = self.tree.identify_column(event.x) if not item_id or not column: return value_index = int(column[1:]) - 1 values = list(self.tree.item(item_id, "values")) if values[value_index] == self._empty_box: values[value_index] = self._checked_box elif values[value_index] == self._checked_box: values[value_index] = self._empty_box else: return # update values self.tree.item(item_id, values=tuple(values)) def _preview_submission_data(self, event=None): import tempfile temp_path = os.path.join( tempfile.mkdtemp(dir=get_workbench().get_temp_dir()), "ThonnyAssistantFeedback_" + datetime.datetime.now().isoformat().replace(":", ".")[:19] + ".txt", ) data = self._collect_submission_data() with open(temp_path, "w", encoding="ascii") as fp: fp.write(data) if running_on_mac_os(): subprocess.Popen(["open", "-e", temp_path]) else: import webbrowser webbrowser.open(temp_path) def _collect_submission_data(self): import json tree_data = [] for iid in self.tree.get_children(): values = self.tree.item(iid, "values") tree_data.append( { "helpful": values[0] == self._checked_box, "confusing": values[1] == self._checked_box, "message": values[2], "group": values[3], "symbol": values[4], } ) submission = { "feedback_format_version": 1, "thonny_version": thonny.get_version(), "python_version": ".".join(map(str, sys.version_info[:3])), "message_feedback": tree_data, "comments": self.comments_text_frame.text.get("1.0", "end"), } try: import mypy.version submission["mypy_version"] = str(mypy.version.__version__) except ImportError: logging.exception("Could not get MyPy version") try: import pylint submission["pylint_version"] = str(pylint.__version__) except ImportError: logging.exception("Could not get Pylint version") if self.include_snapshots_var.get(): submission["snapshots"] = self.snapshots if self.include_thonny_id_var.get(): submission["thonny_timestamp"] = get_workbench().get_option( "general.configuration_creation_timestamp" ) return json.dumps(submission, indent=2) def _submit_data(self): import gzip import urllib.request json_data = self._collect_submission_data() compressed_data = gzip.compress(json_data.encode("ascii")) def do_work(): try: handle = urllib.request.urlopen( "https://thonny.org/store_assistant_feedback.php", data=compressed_data, timeout=10, ) return handle.read() except Exception as e: return str(e) result = ui_utils.run_with_waiting_dialog(self, do_work, description="Uploading") if result == b"OK": if self.snapshots: last_timestamp = self.snapshots[-1]["timestamp"] _last_feedback_timestamps[self.main_file_path] = last_timestamp messagebox.showinfo( "Done!", "Thank you for the feedback!\n\nLet us know again when Assistant\nhelps or confuses you!", master=self.master, ) self._close() else: messagebox.showerror( "Problem", "Something went wrong:\n%s\n\nIf you don't mind, then try again later!" % result[:1000], master=self, ) def _select_unsent_snapshots(self, all_snapshots): if self.main_file_path not in _last_feedback_timestamps: return all_snapshots else: return [ s for s in all_snapshots if s["timestamp"] > _last_feedback_timestamps[self.main_file_path] ] def _close(self, event=None): self.destroy() def _get_since_str(self): if not self.snapshots: assert self.main_file_path in _last_feedback_timestamps since = datetime.datetime.strptime( _last_feedback_timestamps[self.main_file_path], "%Y-%m-%dT%H:%M:%S" ) else: since = datetime.datetime.strptime(self.snapshots[0]["timestamp"], "%Y-%m-%dT%H:%M:%S") if since.date() == datetime.date.today() or ( datetime.datetime.now() - since ) <= datetime.timedelta(hours=5): since_str = since.strftime("%X") else: # date and time without yer since_str = since.strftime("%c").replace(str(datetime.date.today().year), "") # remove seconds if since_str.count(":") == 2: i = since_str.rfind(":") if ( i > 0 and len(since_str[i + 1 : i + 3]) == 2 and since_str[i + 1 : i + 3].isnumeric() ): since_str = since_str[:i] + since_str[i + 3 :] return since_str.strip() def name_similarity(a, b): # TODO: tweak the result values a = a.replace("_", "") b = b.replace("_", "") minlen = min(len(a), len(b)) if a.replace("0", "O").replace("1", "l") == b.replace("0", "O").replace("1", "l"): if minlen >= 4: return 7 else: return 6 a = a.lower() b = b.lower() if a == b: if minlen >= 4: return 7 else: return 6 if minlen <= 2: return 0 # if names differ at final isolated digits, # then they are probably different vars, even if their # distance is small (eg. location_1 and location_2) if a[-1].isdigit() and not a[-2].isdigit() and b[-1].isdigit() and not b[-2].isdigit(): return 0 # same thing with _ + single char suffixes # (eg. location_a and location_b) if a[-2] == "_" and b[-2] == "_": return 0 distance = levenshtein_damerau_distance(a, b, 5) if minlen <= 5: return max(8 - distance * 2, 0) elif minlen <= 10: return max(9 - distance * 2, 0) else: return max(10 - distance * 2, 0) def _get_imported_user_files(main_file, source=None): assert os.path.isabs(main_file) if source is None: source = read_source(main_file) try: root = ast.parse(source, main_file) except SyntaxError: return set() main_dir = os.path.dirname(main_file) module_names = set() # TODO: at the moment only considers non-package modules for node in ast.walk(root): if isinstance(node, ast.Import): for item in node.names: module_names.add(item.name) elif isinstance(node, ast.ImportFrom): module_names.add(node.module) imported_files = set() for file in {name + ext for ext in [".py", ".pyw"] for name in module_names}: possible_path = os.path.join(main_dir, file) if os.path.exists(possible_path): imported_files.add(possible_path) return imported_files # TODO: add recursion def add_program_analyzer(cls): _program_analyzer_classes.append(cls) def add_error_helper(error_type_name, helper_class): _error_helper_classes.setdefault(error_type_name, []) _error_helper_classes[error_type_name].append(helper_class) def format_file_url(filename, lineno, col_offset): s = "thonny-editor://" + rst_utils.escape(filename).replace(" ", "%20") if lineno is not None: s += "#" + str(lineno) if col_offset is not None: s += ":" + str(col_offset) return s class HelperNotSupportedError(RuntimeError): pass def init(): get_workbench().set_default("assistance.open_assistant_on_errors", True) get_workbench().set_default("assistance.open_assistant_on_warnings", False) get_workbench().set_default("assistance.disabled_checks", []) get_workbench().add_view(AssistantView, tr("Assistant"), "se", visible_by_default=False) thonny-3.3.14/thonny/ast_utils.py000066400000000000000000000140671411757431400170400ustar00rootroot00000000000000# -*- coding: utf-8 -*- import ast from typing import Union def extract_text_range(source, text_range): if isinstance(source, bytes): # TODO: may be wrong encoding source = source.decode("utf-8") lines = source.splitlines(True) # get relevant lines lines = lines[text_range.lineno - 1 : text_range.end_lineno] # trim last and first lines lines[-1] = lines[-1][: text_range.end_col_offset] lines[0] = lines[0][text_range.col_offset :] return "".join(lines) def find_expression(start_node, text_range): for node in ast.walk(start_node): if ( isinstance(node, ast.expr) and node.lineno == text_range.lineno and node.col_offset == text_range.col_offset and node.end_lineno == text_range.end_lineno and node.end_col_offset == text_range.end_col_offset ): return node return None def parse_source(source: bytes, filename="", mode="exec", fallback_to_one_char=False): root = ast.parse(source, filename, mode) mark_text_ranges(root, source, fallback_to_one_char) return root def get_last_child(node, skip_incorrect=True): """Returns last focusable child expression or child statement""" def ok_node(node): if node is None: return None assert isinstance(node, (ast.expr, ast.stmt)) if skip_incorrect and getattr(node, "incorrect_range", False): return None return node def last_ok(nodes): for i in range(len(nodes) - 1, -1, -1): if ok_node(nodes[i]): node = nodes[i] if isinstance(node, ast.Starred): if ok_node(node.value): return node.value else: return None else: return nodes[i] return None if isinstance(node, ast.Call): # TODO: take care of Python 3.5 updates (Starred etc.) if hasattr(node, "kwargs") and ok_node(node.kwargs): return node.kwargs elif hasattr(node, "starargs") and ok_node(node.starargs): return node.starargs else: kw_values = list(map(lambda x: x.value, node.keywords)) last_ok_kw = last_ok(kw_values) if last_ok_kw: return last_ok_kw elif last_ok(node.args): return last_ok(node.args) else: return ok_node(node.func) elif isinstance(node, ast.BoolOp): return last_ok(node.values) elif isinstance(node, ast.BinOp): if ok_node(node.right): return node.right else: return ok_node(node.left) elif isinstance(node, ast.Compare): return last_ok(node.comparators) elif isinstance(node, ast.UnaryOp): return ok_node(node.operand) elif isinstance(node, (ast.Tuple, ast.List, ast.Set)): return last_ok(node.elts) elif isinstance(node, ast.Dict): # TODO: actually should pairwise check last value, then last key, etc. return last_ok(node.values) elif isinstance( node, (ast.Index, ast.Return, ast.Assign, ast.AugAssign, ast.Yield, ast.YieldFrom) ): return ok_node(node.value) elif isinstance(node, ast.Delete): return last_ok(node.targets) elif isinstance(node, ast.Expr): return ok_node(node.value) elif isinstance(node, ast.Assert): if ok_node(node.msg): return node.msg else: return ok_node(node.test) elif isinstance(node, ast.Slice): # [:] if ok_node(node.step): return node.step elif ok_node(node.upper): return node.upper else: return ok_node(node.lower) elif isinstance(node, ast.ExtSlice): # [:,:] for dim in reversed(node.dims): result = get_last_child(dim, skip_incorrect) assert result is None or isinstance(result, ast.expr) if result is not None: return result return None elif isinstance(node, ast.Subscript): result = get_last_child(node.slice, skip_incorrect) if result is not None: return result else: return node.value elif isinstance(node, ast.Raise): if ok_node(node.cause): return node.cause elif ok_node(node.exc): return node.exc elif isinstance(node, (ast.For, ast.While, ast.If, ast.With)): return True # There is last child, but I don't know which it will be # TODO: pick more cases from here: """ (isinstance(node, (ast.IfExp, ast.ListComp, ast.SetComp, ast.DictComp, ast.GeneratorExp)) # or isinstance(node, ast.FunctionDef, ast.Lambda) and len(node.args.defaults) > 0 and (node.dest is not None or len(node.values) > 0)) #"TODO: Import ja ImportFrom" # TODO: what about ClassDef ??? """ return None def mark_text_ranges(node, source: Union[bytes, str], fallback_to_one_char=False): """ Node is an AST, source is corresponding source as string. Function adds recursively attributes end_lineno and end_col_offset to each node which has attributes lineno and col_offset. """ from asttokens.asttokens import ASTTokens if isinstance(source, bytes): source = source.decode("utf8") ASTTokens(source, tree=node) for child in ast.walk(node): if hasattr(child, "last_token"): child.end_lineno, child.end_col_offset = child.last_token.end if hasattr(child, "lineno"): # Fixes problems with some nodes like binop child.lineno, child.col_offset = child.first_token.start # some nodes stay without end info if ( hasattr(child, "lineno") and (not hasattr(child, "end_lineno") or not hasattr(child, "end_col_offset")) and fallback_to_one_char ): child.end_lineno = child.lineno child.end_col_offset = child.col_offset + 2 thonny-3.3.14/thonny/backend.py000066400000000000000000000564151411757431400164230ustar00rootroot00000000000000# -*- coding: utf-8 -*- import _thread import io import logging import os.path import pathlib import queue import shlex import stat import sys import threading import time import traceback from abc import abstractmethod, ABC from typing import BinaryIO, Callable, List, Dict, Optional, Iterable, Union, Any from thonny.common import ( BackendEvent, EOFCommand, InlineCommand, InlineResponse, InputSubmission, ToplevelCommand, ToplevelResponse, parse_message, serialize_message, ImmediateCommand, MessageFromBackend, CommandToBackend, universal_dirname, ) from thonny.common import IGNORED_FILES_AND_DIRS # TODO: try to get rid of this from thonny.common import ConnectionClosedException NEW_DIR_MODE = 0o755 logger = logging.getLogger(__name__) class BaseBackend(ABC): """Methods for both MainBackend and forwarding backend""" def __init__(self): self._current_command = None self._incoming_message_queue = queue.Queue() # populated by the reader thread self._interrupt_lock = threading.Lock() self._last_progress_reporting_time = 0 self._init_command_reader() def _init_command_reader(self): # Don't use threading for creating a management thread, because I don't want them # to be affected by threading.settrace _thread.start_new_thread(self._read_incoming_messages, ()) def mainloop(self): try: while self._should_keep_going(): try: try: msg = self._fetch_next_incoming_message(timeout=0.01) except queue.Empty: self._perform_idle_tasks() else: if isinstance(msg, InputSubmission): self._handle_user_input(msg) elif isinstance(msg, EOFCommand): self._handle_eof_command(msg) else: self._current_command = msg self._handle_normal_command(msg) except KeyboardInterrupt: self._send_output("KeyboardInterrupt", "stderr") # CPython idle REPL does this self.send_message(ToplevelResponse()) except ConnectionClosedException: sys.exit(0) def _current_command_is_interrupted(self): return getattr(self._current_command, "interrupted", False) def _fetch_next_incoming_message(self, timeout=None): return self._incoming_message_queue.get(timeout=timeout) def _report_progress( self, cmd, description: Optional[str], value: float, maximum: float ) -> None: # Don't notify too often (unless it's the final notification) if value != maximum and time.time() - self._last_progress_reporting_time < 0.2: return self.send_message( BackendEvent( event_type="InlineProgress", command_id=cmd["id"], value=value, maximum=maximum, description=description, ) ) self._last_progress_reporting_time = time.time() def _report_current_action(self, cmd, description: str) -> None: self.send_message( BackendEvent( event_type="InlineProgress", command_id=cmd["id"], description=description, ) ) def _read_incoming_messages(self): # works in a separate thread while self._should_keep_going(): if not self._read_one_incoming_message(): break def _read_one_incoming_message(self): line = self._read_incoming_msg_line() if line == "": return False msg = parse_message(line) if isinstance(msg, ImmediateCommand): # This will be handled right away self._handle_immediate_command(msg) else: self._incoming_message_queue.put(msg) return True def _prepare_command_response( self, response: Union[MessageFromBackend, Dict, None], command: CommandToBackend ) -> MessageFromBackend: if response is None: response = {} if "id" in command and "command_id" not in response: response["command_id"] = command["id"] if isinstance(response, MessageFromBackend): if "command_name" not in response: response["command_name"] = command["name"] return response else: if isinstance(response, dict): args = response else: args = {} if isinstance(command, ToplevelCommand): return ToplevelResponse(command_name=command.name, **args) else: assert isinstance(command, InlineCommand) return InlineResponse(command_name=command.name, **args) def send_message(self, msg: MessageFromBackend) -> None: sys.stdout.write(serialize_message(msg) + "\n") sys.stdout.flush() def _send_output(self, data, stream_name): if not data: return data = self._transform_output(data, stream_name) msg = BackendEvent(event_type="ProgramOutput", stream_name=stream_name, data=data) self.send_message(msg) def _transform_output(self, data, stream_name): return data def _read_incoming_msg_line(self) -> str: return sys.stdin.readline() def _perform_idle_tasks(self): """Executed when there is no commands in queue""" pass def _report_internal_exception(self, exception=None): logger.exception("PROBLEM WITH THONNY'S BACK-END", exc_info=exception) def _report_internal_error(self, message): print("PROBLEM WITH THONNY'S BACK-END:\n" + message + "\n", file=sys.stderr) @abstractmethod def _should_keep_going(self) -> bool: """Returns False when there is no point in processing more commands (eg. connection to the target process is lost or target process has exited)""" @abstractmethod def _handle_user_input(self, msg: InputSubmission) -> None: pass @abstractmethod def _handle_eof_command(self, msg: EOFCommand) -> None: pass @abstractmethod def _handle_normal_command(self, cmd: CommandToBackend) -> None: pass @abstractmethod def _handle_immediate_command(self, cmd: ImmediateCommand) -> None: """Command handler will be executed in command reading thread, right after receiving the command""" class MainBackend(BaseBackend, ABC): """Backend which does not forward to another backend""" def __init__(self): BaseBackend.__init__(self) def _cmd_get_dirs_children_info(self, cmd): """Provides information about immediate children of paths opened in a file browser""" data = { path: self._get_filtered_dir_children_info(path, cmd["include_hidden"]) for path in cmd["paths"] } return {"node_id": cmd["node_id"], "dir_separator": self._get_sep(), "data": data} def _cmd_prepare_upload(self, cmd): """Returns info about items to be overwritten or merged by cmd.paths""" return {"existing_items": self._get_paths_info(cmd.target_paths, recurse=False)} def _cmd_prepare_download(self, cmd): assert "id" in cmd """Returns info about all items under and including cmd.paths""" return {"all_items": self._get_paths_info(cmd.source_paths, recurse=True)} def _get_paths_info(self, paths: List[str], recurse: bool) -> Dict[str, Dict]: result = {} for path in paths: info = self._get_path_info(path) if info is not None: info["anchor"] = path result[path] = info if recurse and info is not None and info["kind"] == "dir": desc_infos = self._get_dir_descendants_info(path) for key in desc_infos: desc_infos[key]["anchor"] = path result.update(desc_infos) return result def _get_dir_descendants_info(self, path: str, include_hidden: bool = False) -> Dict[str, Dict]: """Assumes path is dir. Dict is keyed by full path""" result = {} children_info = self._get_filtered_dir_children_info(path, include_hidden) for child_name, child_info in children_info.items(): full_child_path = path + self._get_sep() + child_name result[full_child_path] = child_info if child_info["kind"] == "dir": result.update(self._get_dir_descendants_info(full_child_path)) return result def _get_filtered_dir_children_info( self, path: str, include_hidden: bool = False ) -> Optional[Dict[str, Dict]]: children = self._get_dir_children_info(path, include_hidden) if children is None: return None return {name: children[name] for name in children if name not in IGNORED_FILES_AND_DIRS} @abstractmethod def _get_path_info(self, path: str) -> Optional[Dict]: """Returns information about this path or None if it doesn't exist""" @abstractmethod def _get_dir_children_info(self, path: str) -> Optional[Dict[str, Dict]]: """For existing dirs returns Dict[child_short_name, Dict of its information]. Returns None if path doesn't exist or is not a dir. """ @abstractmethod def _get_sep(self) -> str: """Returns symbol for combining parent directory path and child name""" class UploadDownloadMixin(ABC): """Backend, which runs on a local process and talks to a nonlocal system, and therefore is able to upload/download""" def _cmd_download(self, cmd): errors = self._transfer_files_and_dirs( cmd.items, self._ensure_local_directory, self._download_file, cmd, pathlib.Path ) return {"errors": errors} def _cmd_upload(self, cmd): errors = self._transfer_files_and_dirs( cmd.items, self._ensure_remote_directory, self._upload_file, cmd, pathlib.PurePosixPath, ) return {"errors": errors} def _cmd_read_file(self, cmd): def callback(completed, total): self._report_progress(cmd, cmd["path"], completed, total) try: with io.BytesIO() as fp: self._read_file(cmd["path"], fp, callback) fp.seek(0) content_bytes = fp.read() error = None except Exception as e: self._report_internal_exception() error = str(e) content_bytes = None return {"content_bytes": content_bytes, "path": cmd["path"], "error": error} def _cmd_write_file(self, cmd): def callback(completed, total): self._report_progress(cmd, cmd["path"], completed, total) try: with io.BytesIO() as fp: fp.write(cmd["content_bytes"]) fp.seek(0) self._write_file(fp, cmd["path"], len(cmd["content_bytes"]), callback) error = None except Exception as e: self._report_internal_exception() error = str(e) return InlineResponse( command_name="write_file", path=cmd["path"], editor_id=cmd.get("editor_id"), error=error ) def _supports_directories(self) -> bool: return True def _transfer_files_and_dirs( self, items: Iterable[Dict], ensure_dir_fun: Callable[[str], None], transfer_file_fun: Callable, cmd, target_path_class, ) -> List[str]: total_cost = 0 for item in items: if item["kind"] == "file": total_cost += item["size"] + self._get_file_fixed_cost() else: total_cost += self._get_dir_transfer_cost() completed_cost = 0 errors = [] ensured_dirs = set() def ensure_dir(path): if path in ensured_dirs: return ensure_dir_fun(path) ensured_dirs.add(path) for item in sorted(items, key=lambda x: x["source_path"]): self._report_progress(cmd, "Starting", completed_cost, total_cost) def copy_bytes_notifier(completed_bytes, total_bytes): completed = completed_cost + completed_bytes desc = str(round(completed / total_cost * 100)) + "%" self._report_progress(cmd, desc, completed, total_cost) try: if item["kind"] == "dir": ensure_dir(item["target_path"]) completed_cost += self._get_dir_transfer_cost() else: if self._supports_directories(): ensure_dir(self._get_parent_directory(item["target_path"])) print("%s (%d bytes)" % (item["source_path"], item["size"])) transfer_file_fun(item["source_path"], item["target_path"], copy_bytes_notifier) completed_cost += self._get_file_fixed_cost() + item["size"] except OSError as e: errors.append( "Could not copy %s to %s: %s" % (item["source_path"], item["target_path"], str(e)) ) return errors def _download_file(self, source_path, target_path, callback): with open(target_path, "bw") as target_fp: self._read_file(source_path, target_fp, callback) def _upload_file(self, source_path, target_path, callback): with open(source_path, "br") as source_fp: self._write_file( source_fp, target_path, os.path.getsize(source_path), callback, ) def _get_dir_transfer_cost(self): # Validating and maybe creating a directory is taken to be equal to copying this number of bytes return 1000 def _get_file_fixed_cost(self): # Creating or overwriting a file is taken to be equal to copying this number of bytes return 100 def _get_parent_directory(self, path: str): return universal_dirname(path) def _ensure_local_directory(self, path: str) -> None: os.makedirs(path, NEW_DIR_MODE, exist_ok=True) def _ensure_remote_directory(self, path: str) -> None: # assuming remote system is Posix ensure_posix_directory(path, self._get_stat_mode_for_upload, self._mkdir_for_upload) @abstractmethod def _get_stat_mode_for_upload(self, path: str) -> Optional[int]: "returns None if path doesn't exist" @abstractmethod def _mkdir_for_upload(self, path: str) -> None: raise NotImplementedError() @abstractmethod def _write_file( self, source_fp: BinaryIO, target_path: str, file_size: int, callback: Callable[[int, int], None], ) -> None: raise NotImplementedError() @abstractmethod def _read_file( self, source_path: str, target_fp: BinaryIO, callback: Callable[[int, int], None] ) -> None: raise NotImplementedError() @abstractmethod def _report_internal_exception(self): raise NotImplementedError() @abstractmethod def _report_progress( self, cmd, description: Optional[str], value: float, maximum: float ) -> None: raise NotImplementedError() class RemoteProcess: """Modelled after subprocess.Popen""" def __init__(self, client, channel, stdin, stdout, pid): self._client = client self._channel = channel self.stdin = stdin self.stdout = stdout self.pid = pid self.returncode = None def poll(self): if self._channel.exit_status_ready(): self.returncode = self._channel.recv_exit_status() return self.returncode else: return None def wait(self): self.returncode = self._channel.recv_exit_status() return self.returncode def kill(self): _, stdout, _ = self._client.exec_command("kill -9 %s" % self.pid) # wait until completion stdout.channel.recv_exit_status() class SshMixin(UploadDownloadMixin): def __init__(self, host, user, password, interpreter, cwd): # UploadDownloadMixin.__init__(self) try: import paramiko from paramiko.client import SSHClient, AutoAddPolicy except ImportError: print( "\nThis back-end requires an extra package named 'paramiko'." " Install it from 'Tools => Manage plug-ins' or via your system package manager.", file=sys.stderr, ) sys.exit() self._host = host self._user = user self._password = password self._remote_interpreter = interpreter self._cwd = cwd self._proc = None # type: Optional[RemoteProcess] self._sftp = None # type: Optional[paramiko.SFTPClient] self._client = SSHClient() self._client.load_system_host_keys() self._client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy()) # TODO: does it get closed properly after process gets killed? self._connect() def _connect(self): from paramiko.ssh_exception import AuthenticationException import socket from paramiko import SSHException try: self._client.connect( hostname=self._host, username=self._user, password=self._password, passphrase=self._password, ) except (SSHException, OSError) as e: print( "\nCan't connect to '%s' with user '%s': %s" % (self._host, self._user, str(e)), file=sys.stderr, ) print("Re-check your host, authentication method, password or keys.", file=sys.stderr) delete_stored_ssh_password() sys.exit(1) def _create_remote_process(self, cmd_items: List[str], cwd: str, env: Dict) -> RemoteProcess: # Before running the main thing: # * print process id (so that we can kill it later) # http://redes-privadas-virtuales.blogspot.com/2013/03/getting-hold-of-remote-pid-through.html # * change to desired directory # # About -onlcr: https://stackoverflow.com/q/35887380/261181 cmd_line_str = ( "echo $$ ; stty -echo ; stty -onlcr ; " + (" cd %s 2> /dev/null ;" % shlex.quote(cwd) if cwd else "") + (" exec " + " ".join(map(shlex.quote, cmd_items))) ) stdin, stdout, _ = self._client.exec_command( cmd_line_str, bufsize=0, get_pty=True, environment=env ) # stderr gets directed to stdout because of pty pid = stdout.readline().strip() channel = stdout.channel return RemoteProcess(self._client, channel, stdin, stdout, pid) def _handle_immediate_command(self, cmd: ImmediateCommand) -> None: if cmd.name == "kill": self._kill() elif cmd.name == "interrupt": self._interrupt() else: raise RuntimeError("Unknown immediateCommand %s" % cmd.name) def _kill(self): if self._proc is None or self._proc.poll() is not None: return self._proc.kill() def _interrupt(self): pass def _get_sftp(self, fresh: bool): if fresh and self._sftp is not None: self._sftp.close() self._sftp = None if self._sftp is None: import paramiko # TODO: does it get closed properly after process gets killed? self._sftp = paramiko.SFTPClient.from_transport(self._client.get_transport()) return self._sftp def _read_file( self, source_path: str, target_fp: BinaryIO, callback: Callable[[int, int], None] ) -> None: self._perform_sftp_operation_with_retry( lambda sftp: sftp.getfo(source_path, target_fp, callback) ) def _write_file( self, source_fp: BinaryIO, target_path: str, file_size: int, callback: Callable[[int, int], None], ) -> None: self._perform_sftp_operation_with_retry( lambda sftp: sftp.putfo(source_fp, target_path, callback) ) def _perform_sftp_operation_with_retry(self, operation) -> Any: try: return operation(self._get_sftp(fresh=False)) except OSError: # It looks like SFTPClient gets stale after a while. # Try again with fresh SFTPClient return operation(self._get_sftp(fresh=True)) def _get_stat_mode_for_upload(self, path: str) -> Optional[int]: try: return self._perform_sftp_operation_with_retry(lambda sftp: sftp.stat(path).st_mode) except OSError as e: return None def _mkdir_for_upload(self, path: str) -> None: self._perform_sftp_operation_with_retry(lambda sftp: sftp.mkdir(path, NEW_DIR_MODE)) def _longest_common_path_prefix(str_paths, path_class): assert str_paths if len(str_paths) == 1: return str_paths[0] list_of_parts = [] for str_path in str_paths: list_of_parts.append(path_class(str_path).parts) first = list_of_parts[0] rest = list_of_parts[1:] i = 0 while i < len(first): item_i = first[i] if not all([len(x) > i and x[i] == item_i for x in rest]): break else: i += 1 if i == 0: return "" result = path_class(first[0]) for j in range(1, i): result = result.joinpath(first[j]) return str(result) def ensure_posix_directory( path: str, stat_mode_fun: Callable[[str], Optional[int]], mkdir_fun: Callable[[str], None] ) -> None: assert path.startswith("/") if path == "/": return for step in list(reversed(list(map(str, pathlib.PurePosixPath(path).parents)))) + [path]: if step != "/": mode = stat_mode_fun(step) if mode is None: mkdir_fun(step) elif not stat.S_ISDIR(mode): raise AssertionError("'%s' is file, not a directory" % step) def interrupt_local_process() -> None: """Meant to be executed from a background thread""" import signal if hasattr(signal, "raise_signal"): # Python 3.8 and later signal.raise_signal(signal.SIGINT) elif sys.platform == "win32": # https://stackoverflow.com/a/51122690/261181 import ctypes ucrtbase = ctypes.CDLL("ucrtbase") c_raise = ucrtbase["raise"] c_raise(signal.SIGINT) else: # Does not give KeyboardInterrupt in Windows os.kill(os.getpid(), signal.SIGINT) def get_ssh_password_file_path(): from thonny import THONNY_USER_DIR return os.path.join(THONNY_USER_DIR, "ssh_password") def delete_stored_ssh_password(): if os.path.exists(get_ssh_password_file_path()): # invalidate stored password os.remove(get_ssh_password_file_path()) if __name__ == "__main__": # print(_closest_common_directory(["C:\\kala\\pala", "C:\\kala", "D:\\kuku"], pathlib.PureWindowsPath)) print(_longest_common_path_prefix(["C:\\kala\\pala", "C:\\kala"], pathlib.PureWindowsPath)) print(_longest_common_path_prefix(["C:\\kala\\pala"], pathlib.PureWindowsPath)) thonny-3.3.14/thonny/base_file_browser.py000066400000000000000000001326661411757431400205130ustar00rootroot00000000000000import datetime import logging import os.path import subprocess import time import tkinter as tk from tkinter import messagebox, ttk from thonny import get_runner, get_workbench, misc_utils, tktextext from thonny.common import InlineCommand, get_dirs_children_info from thonny.languages import tr from thonny.misc_utils import running_on_windows, sizeof_fmt, running_on_mac_os from thonny.ui_utils import ( CommonDialog, create_string_var, lookup_style_option, scrollbar_style, show_dialog, ask_string, ask_one_from_choices, ) _dummy_node_text = "..." _LOCAL_FILES_ROOT_TEXT = "" # needs to be initialized later ROOT_NODE_ID = "" HIDDEN_FILES_OPTION = "file.show_hidden_files" logger = logging.getLogger(__name__) class BaseFileBrowser(ttk.Frame): def __init__(self, master, show_expand_buttons=True): self.show_expand_buttons = show_expand_buttons self._cached_child_data = {} self.path_to_highlight = None ttk.Frame.__init__(self, master, borderwidth=0, relief="flat") self.vert_scrollbar = ttk.Scrollbar( self, orient=tk.VERTICAL, style=scrollbar_style("Vertical") ) self.vert_scrollbar.grid(row=0, column=1, sticky=tk.NSEW, rowspan=3) tktextext.fixwordbreaks(tk._default_root) self.building_breadcrumbs = False self.init_header(row=0, column=0) spacer = ttk.Frame(self, height=1) spacer.grid(row=1, sticky="nsew") self.tree = ttk.Treeview( self, columns=["#0", "kind", "path", "name", "modified", "size"], displaycolumns=( # 4, # 5 ), yscrollcommand=self.vert_scrollbar.set, selectmode="extended", ) self.tree.grid(row=2, column=0, sticky=tk.NSEW) self.vert_scrollbar["command"] = self.tree.yview self.columnconfigure(0, weight=1) self.rowconfigure(2, weight=1) self.tree["show"] = "tree" self.tree.bind("<3>", self.on_secondary_click, True) if misc_utils.running_on_mac_os(): self.tree.bind("<2>", self.on_secondary_click, True) self.tree.bind("", self.on_secondary_click, True) self.tree.bind("", self.on_double_click, True) self.tree.bind("<>", self.on_open_node) wb = get_workbench() self.folder_icon = wb.get_image("folder") self.python_file_icon = wb.get_image("python-icon") self.text_file_icon = wb.get_image("text-file") self.generic_file_icon = wb.get_image("generic-file") self.hard_drive_icon = wb.get_image("hard-drive") self.tree.column("#0", width=200, anchor=tk.W) self.tree.heading("#0", text=tr("Name"), anchor=tk.W) self.tree.column("modified", width=60, anchor=tk.W) self.tree.heading("modified", text=tr("Modified"), anchor=tk.W) self.tree.column("size", width=40, anchor=tk.E) self.tree.heading("size", text=tr("Size (bytes)"), anchor=tk.E) self.tree.column("kind", width=30, anchor=tk.W) # self.tree.heading("kind", text="Kind") # self.tree.column("path", width=300, anchor=tk.W) # self.tree.heading("path", text="path") # self.tree.column("name", width=60, anchor=tk.W) # self.tree.heading("name", text="name") # set-up root node self.tree.set(ROOT_NODE_ID, "kind", "root") self.menu = tk.Menu(self.tree, tearoff=False) self.current_focus = None def init_header(self, row, column): header_frame = ttk.Frame(self, style="ViewToolbar.TFrame") header_frame.grid(row=row, column=column, sticky="nsew") header_frame.columnconfigure(0, weight=1) self.path_bar = tktextext.TweakableText( header_frame, borderwidth=0, relief="flat", height=1, font="TkDefaultFont", wrap="word", padx=6, pady=5, insertwidth=0, highlightthickness=0, background=lookup_style_option("ViewToolbar.TFrame", "background"), ) self.path_bar.grid(row=0, column=0, sticky="nsew") self.path_bar.set_read_only(True) self.path_bar.bind("", self.resize_path_bar, True) self.path_bar.tag_configure( "dir", foreground=lookup_style_option("Url.TLabel", "foreground") ) self.path_bar.tag_configure("underline", underline=True) def get_dir_range(event): mouse_index = self.path_bar.index("@%d,%d" % (event.x, event.y)) return self.path_bar.tag_prevrange("dir", mouse_index + "+1c") def dir_tag_motion(event): self.path_bar.tag_remove("underline", "1.0", "end") dir_range = get_dir_range(event) if dir_range: range_start, range_end = dir_range self.path_bar.tag_add("underline", range_start, range_end) def dir_tag_enter(event): self.path_bar.config(cursor="hand2") def dir_tag_leave(event): self.path_bar.config(cursor="") self.path_bar.tag_remove("underline", "1.0", "end") def dir_tag_click(event): mouse_index = self.path_bar.index("@%d,%d" % (event.x, event.y)) lineno = int(float(mouse_index)) if lineno == 1: self.request_focus_into("") else: assert lineno == 2 dir_range = get_dir_range(event) if dir_range: _, end_index = dir_range path = self.path_bar.get("2.0", end_index) if path.endswith(":"): path += "\\" self.request_focus_into(path) self.path_bar.tag_bind("dir", "<1>", dir_tag_click) self.path_bar.tag_bind("dir", "", dir_tag_enter) self.path_bar.tag_bind("dir", "", dir_tag_leave) self.path_bar.tag_bind("dir", "", dir_tag_motion) # self.menu_button = ttk.Button(header_frame, text="≡ ", style="ViewToolbar.Toolbutton") self.menu_button = ttk.Button( header_frame, text=" ≡ ", style="ViewToolbar.Toolbutton", command=self.post_button_menu ) # self.menu_button.grid(row=0, column=1, sticky="ne") self.menu_button.place(anchor="ne", rely=0, relx=1) def clear(self): self.clear_error() self.invalidate_cache() self.path_bar.direct_delete("1.0", "end") self.tree.set_children("") self.current_focus = None def request_focus_into(self, path): return self.focus_into(path) def focus_into(self, path): self.clear_error() self.invalidate_cache() # clear self.tree.set_children(ROOT_NODE_ID) self.tree.set(ROOT_NODE_ID, "path", path) self.building_breadcrumbs = True self.path_bar.direct_delete("1.0", "end") self.path_bar.direct_insert("1.0", self.get_root_text(), ("dir",)) if path and path != "/": self.path_bar.direct_insert("end", "\n") def create_spacer(): return ttk.Frame(self.path_bar, height=1, width=4, style="ViewToolbar.TFrame") parts = self.split_path(path) for i, part in enumerate(parts): if i > 0: if parts[i - 1] != "": self.path_bar.window_create("end", window=create_spacer()) self.path_bar.direct_insert("end", self.get_dir_separator()) self.path_bar.window_create("end", window=create_spacer()) self.path_bar.direct_insert("end", part, tags=("dir",)) self.building_breadcrumbs = False self.resize_path_bar() self.render_children_from_cache() self.scroll_to_top() self.current_focus = path def scroll_to_top(self): children = self.tree.get_children() if children: self.tree.see(children[0]) def split_path(self, path): return path.split(self.get_dir_separator()) def get_root_text(self): return get_local_files_root_text() def on_open_node(self, event): node_id = self.get_selected_node() path = self.tree.set(node_id, "path") if path: # and path not in self._cached_child_data: self.render_children_from_cache(node_id) # self.request_dirs_child_data(node_id, [path]) # else: def resize_path_bar(self, event=None): if self.building_breadcrumbs: return height = self.tk.call((self.path_bar, "count", "-update", "-displaylines", "1.0", "end")) self.path_bar.configure(height=height) def _cleaned_selection(self): # In some cases (eg. Python 3.6.9 and Tk 8.6.8 in Ubuntu when selecting a range with shift), # nodes may contain collapsed children. # In most cases this does no harm, because the command would apply to children as well, # but dummy dir marker nodes may cause confusion nodes = self.tree.selection() return [node for node in nodes if self.tree.item(node, "text") != _dummy_node_text] def get_selected_node(self): """Returns single node (or nothing)""" nodes = self._cleaned_selection() if len(nodes) == 1: return nodes[0] elif len(nodes) > 1: return self.tree.focus() or None else: return None def get_selected_nodes(self, notify_if_empty=False): """Can return several nodes""" result = self._cleaned_selection() if not result and notify_if_empty: self.notify_missing_selection() return result def get_selection_info(self, notify_if_empty=False): nodes = self.get_selected_nodes(notify_if_empty) if not nodes: return None elif len(nodes) == 1: description = "'" + self.tree.set(nodes[0], "name") + "'" else: description = tr("%d items") % len(nodes) paths = [self.tree.set(node, "path") for node in nodes] kinds = [self.tree.set(node, "kind") for node in nodes] return {"description": description, "nodes": nodes, "paths": paths, "kinds": kinds} def get_selected_path(self): return self.get_selected_value("path") def get_selected_kind(self): return self.get_selected_value("kind") def get_selected_name(self): return self.get_selected_value("name") def get_extension_from_name(self, name): if name is None: return None if "." in name: return "." + name.split(".")[-1].lower() else: return name.lower() def get_selected_value(self, key): node_id = self.get_selected_node() if node_id: return self.tree.set(node_id, key) else: return None def get_active_directory(self): path = self.tree.set(ROOT_NODE_ID, "path") return path def request_dirs_child_data(self, node_id, paths): raise NotImplementedError() def show_fs_info(self): path = self.get_selected_path() if path is None: path = self.current_focus self.request_fs_info(path) def request_fs_info(self, path): raise NotImplementedError() def present_fs_info(self, info): total_str = "?" if info["total"] is None else sizeof_fmt(info["total"]) used_str = "?" if info["used"] is None else sizeof_fmt(info["used"]) free_str = "?" if info["free"] is None else sizeof_fmt(info["free"]) text = tr("Storage space on this drive or filesystem") + ":\n\n" " %s: %s\n" % ( tr("total space"), total_str, ) + " %s: %s\n" % (tr("used space"), used_str) + " %s: %s\n" % ( tr("free space"), free_str, ) if info.get("comment"): text += "\n" + info["comment"] messagebox.showinfo(tr("Storage info"), text, master=self) def cache_dirs_child_data(self, data): from copy import deepcopy data = deepcopy(data) for parent_path in data: children_data = data[parent_path] if isinstance(children_data, dict): for child_name in children_data: child_data = children_data[child_name] assert isinstance(child_data, dict) if "label" not in child_data: child_data["label"] = child_name if "isdir" not in child_data: child_data["isdir"] = child_data.get("size", 0) is None else: assert children_data is None self._cached_child_data.update(data) def file_exists_in_cache(self, path): for parent_path in self._cached_child_data: # hard to split because it may not be in this system format name = path[len(parent_path) :] if name[0:1] in ["/", "\\"]: name = name[1:] if name in self._cached_child_data[parent_path]: return True return False def select_path_if_visible(self, path, node_id=""): for child_id in self.tree.get_children(node_id): if self.tree.set(child_id, "path") == path: self.tree.selection_set(child_id) return if self.tree.item(child_id, "open"): self.select_path_if_visible(path, child_id) def get_open_paths(self, node_id=ROOT_NODE_ID): if self.tree.set(node_id, "kind") == "file": return set() elif node_id == ROOT_NODE_ID or self.tree.item(node_id, "open"): result = {self.tree.set(node_id, "path")} for child_id in self.tree.get_children(node_id): result.update(self.get_open_paths(child_id)) return result else: return set() def invalidate_cache(self, paths=None): if paths is None: self._cached_child_data.clear() else: for path in paths: if path in self._cached_child_data: del self._cached_child_data[path] def render_children_from_cache(self, node_id=""): """This node is supposed to be a directory and its contents needs to be shown and/or refreshed""" path = self.tree.set(node_id, "path") if path not in self._cached_child_data: self.request_dirs_child_data(node_id, self.get_open_paths() | {path}) # leave it as is for now, it will be updated later return children_data = self._cached_child_data[path] if children_data in ["file", "missing"]: # path used to be a dir but is now a file or does not exist # if browser is focused into this path if node_id == "": self.show_error("Directory " + path + " does not exist anymore", node_id) elif children_data == "missing": self.tree.delete(node_id) else: assert children_data == "file" self.tree.set_children(node_id) # clear the list of children self.tree.item(node_id, open=False) elif children_data is None: raise RuntimeError("None data for %s" % path) else: fs_children_names = children_data.keys() tree_children_ids = self.tree.get_children(node_id) # recollect children children = {} # first the ones, which are present already in tree for child_id in tree_children_ids: name = self.tree.set(child_id, "name") if name in fs_children_names: children[name] = child_id self.update_node_data(child_id, name, children_data[name]) # add missing children for name in fs_children_names: if name not in children: child_id = self.tree.insert(node_id, "end") children[name] = child_id self.tree.set(children[name], "path", self.join(path, name)) self.update_node_data(child_id, name, children_data[name]) def file_order(name): # items in a folder should be ordered so that # folders come first and names are ordered case insensitively return ( not children_data[name]["isdir"], # prefer directories not ":" in name, # prefer drives name.upper(), name, ) # update tree ids_sorted_by_name = list( map(lambda key: children[key], sorted(children.keys(), key=file_order)) ) self.tree.set_children(node_id, *ids_sorted_by_name) # recursively update open children for child_id in ids_sorted_by_name: if self.tree.item(child_id, "open"): self.render_children_from_cache(child_id) def show_error(self, msg, node_id=""): if not node_id: # clear tree self.tree.set_children("") err_id = self.tree.insert(node_id, "end") self.tree.item(err_id, text=msg) self.tree.set_children(node_id, err_id) def clear_error(self): "TODO:" def update_node_data(self, node_id, name, data): assert node_id != "" path = self.tree.set(node_id, "path") if data.get("modified"): try: # modification time is Unix epoch time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(data["modified"]))) except Exception: time_str = "" else: time_str = "" self.tree.set(node_id, "modified", time_str) if data["isdir"]: self.tree.set(node_id, "kind", "dir") self.tree.set(node_id, "size", "") # Ensure that expand button is visible # unless we know it doesn't have children children_ids = self.tree.get_children(node_id) if ( self.show_expand_buttons and len(children_ids) == 0 and (path not in self._cached_child_data or self._cached_child_data[path]) ): self.tree.insert(node_id, "end", text=_dummy_node_text) if path.endswith(":") or path.endswith(":\\"): img = self.hard_drive_icon else: img = self.folder_icon else: self.tree.set(node_id, "kind", "file") self.tree.set(node_id, "size", data["size"]) # Make sure it doesn't have children self.tree.set_children(node_id) if ( path.lower().endswith(".py") or path.lower().endswith(".pyw") or path.lower().endswith(".pyi") ): img = self.python_file_icon elif self.should_open_name_in_thonny(name): img = self.text_file_icon else: img = self.generic_file_icon self.tree.set(node_id, "name", name) self.tree.item(node_id, text=" " + data["label"], image=img) def join(self, parent, child): if parent == "": if self.get_dir_separator() == "/": return "/" + child else: return child if parent.endswith(self.get_dir_separator()): return parent + child else: return parent + self.get_dir_separator() + child def get_dir_separator(self): return os.path.sep def on_double_click(self, event): # TODO: don't act when the click happens below last item path = self.get_selected_path() kind = self.get_selected_kind() name = self.get_selected_name() if kind == "file": if self.should_open_name_in_thonny(name): self.open_file(path) else: self.open_path_with_system_app(path) elif kind == "dir": self.request_focus_into(path) return "break" def open_file(self, path): pass def open_path_with_system_app(self, path): pass def on_secondary_click(self, event): node_id = self.tree.identify_row(event.y) if node_id: if node_id not in self.tree.selection(): # replace current selection self.tree.selection_set(node_id) self.tree.focus(node_id) else: self.tree.selection_set() self.path_bar.focus_set() self.tree.update() self.refresh_menu(context="item") self.menu.tk_popup(event.x_root, event.y_root) def post_button_menu(self): self.refresh_menu(context="button") self.menu.tk_popup( self.menu_button.winfo_rootx(), self.menu_button.winfo_rooty() + self.menu_button.winfo_height(), ) def refresh_menu(self, context): self.menu.delete(0, "end") self.add_first_menu_items(context) self.menu.add_separator() self.add_middle_menu_items(context) self.menu.add_separator() self.add_last_menu_items(context) def is_active_browser(self): return False def add_first_menu_items(self, context): if context == "item": selected_path = self.get_selected_path() selected_kind = self.get_selected_kind() else: selected_path = self.get_active_directory() selected_kind = "dir" if context == "button": self.menu.add_command(label=tr("Refresh"), command=self.cmd_refresh_tree) self.menu.add_command( label=tr("Open in system file manager"), command=lambda: self.open_path_with_system_app(selected_path), ) hidden_files_label = ( tr("Hide hidden files") if show_hidden_files() else tr("Show hidden files") ) self.menu.add_command(label=hidden_files_label, command=self.toggle_hidden_files) else: if selected_kind == "dir": self.menu.add_command( label=tr("Focus into"), command=lambda: self.request_focus_into(selected_path) ) else: self.menu.add_command( label=tr("Open in Thonny"), command=lambda: self.open_file(selected_path) ) if self.is_active_browser(): self.menu.add_command( label=tr("Open in system default app"), command=lambda: self.open_path_with_system_app(selected_path), ) if selected_kind == "file": ext = self.get_extension_from_name(self.get_selected_name()) self.menu.add_command( label=tr("Configure %s files") % ext + "...", command=lambda: self.open_extension_dialog(ext), ) def toggle_hidden_files(self): get_workbench().set_option( HIDDEN_FILES_OPTION, not get_workbench().get_option(HIDDEN_FILES_OPTION) ) self.refresh_tree() def cmd_refresh_tree(self): self.refresh_tree() def open_extension_dialog(self, extension: str) -> None: system_choice = tr("Open in system default app") thonny_choice = tr("Open in Thonny's text editor") current_index = ( 1 if get_workbench().get_option(get_file_handler_conf_key(extension)) == "thonny" else 0 ) choice = ask_one_from_choices( title=tr("Configure %s files") % extension, question=tr( "What to do with a %s file when you double-click it in Thonny's file browser?" ) % extension, choices=[system_choice, thonny_choice], initial_choice_index=current_index, master=self.winfo_toplevel(), ) if not choice: return get_workbench().set_option( get_file_handler_conf_key(extension), "system" if choice == system_choice else "thonny", ) # update icons self.refresh_tree() def add_middle_menu_items(self, context): if self.supports_trash(): if running_on_windows(): trash_label = tr("Move to Recycle Bin") else: trash_label = tr("Move to Trash") self.menu.add_command(label=trash_label, command=self.move_to_trash) else: self.menu.add_command(label=tr("Delete"), command=self.delete) if self.supports_directories(): self.menu.add_command(label=tr("New directory") + "...", command=self.mkdir) def add_last_menu_items(self, context): self.menu.add_command(label=tr("Properties"), command=self.show_properties) if context == "button": self.menu.add_command(label=tr("Storage space"), command=self.show_fs_info) def show_properties(self): node_id = self.get_selected_node() if node_id is None: self.notify_missing_selection() return values = self.tree.set(node_id) text = tr("Path") + ":\n " + values["path"] + "\n\n" if values["kind"] == "dir": title = tr("Directory properties") else: title = tr("File properties") size_fmt_str = sizeof_fmt(int(values["size"])) bytes_str = str(values["size"]) + " " + tr("bytes") text += ( tr("Size") + ":\n " + ( bytes_str if size_fmt_str.endswith(" B") else size_fmt_str + " (" + bytes_str + ")" ) + "\n\n" ) if values["modified"].strip(): text += tr("Modified") + ":\n " + values["modified"] + "\n\n" messagebox.showinfo(title, text.strip(), master=self) def refresh_tree(self, paths_to_invalidate=None): self.invalidate_cache(paths_to_invalidate) if self.winfo_ismapped(): self.render_children_from_cache("") if self.path_to_highlight: self.select_path_if_visible(self.path_to_highlight) self.path_to_highlight = None def create_new_file(self): selected_node_id = self.get_selected_node() if selected_node_id: selected_path = self.tree.set(selected_node_id, "path") selected_kind = self.tree.set(selected_node_id, "kind") if selected_kind == "dir": parent_path = selected_path else: parent_id = self.tree.parent(selected_node_id) parent_path = self.tree.set(parent_id, "path") else: parent_path = self.current_focus name = ask_string( "File name", "Provide filename", initial_value="", master=self.winfo_toplevel() ) if not name: return None path = self.join(parent_path, name) if name in self._cached_child_data[parent_path]: # TODO: ignore case in windows messagebox.showerror("Error", "The file '" + path + "' already exists", master=self) return self.create_new_file() else: self.open_file(path) return path def delete(self): selection = self.get_selection_info(True) if not selection: return confirmation = "Are you sure want to delete %s?" % selection["description"] confirmation += "\n\nNB! Recycle bin won't be used (no way to undelete)!" if "dir" in selection["kinds"]: confirmation += "\n" + "Directories will be deleted with content." if not messagebox.askyesno("Are you sure?", confirmation, master=self): return self.perform_delete(selection["paths"], tr("Deleting %s") % selection["description"]) self.refresh_tree() def move_to_trash(self): assert self.supports_trash() selection = self.get_selection_info(True) if not selection: return trash = tr("Recycle Bin") if running_on_windows() else tr("Trash") if not messagebox.askokcancel( tr("Moving to %s") % trash, tr("Move %s to %s?") % (selection["description"], trash), icon="info", master=self, ): return self.perform_move_to_trash( selection["paths"], tr("Moving %s to %s") % (selection["description"], trash) ) self.refresh_tree() def supports_trash(self): return False def mkdir(self): parent = self.get_selected_path() if parent is None: parent = self.current_focus else: if self.get_selected_kind() == "file": # dirname does the right thing even if parent is Linux path and running on Windows parent = os.path.dirname(parent) name = ask_string( tr("New directory"), tr("Enter name for new directory under\n%s") % parent, master=self.winfo_toplevel(), ) if not name or not name.strip(): return self.perform_mkdir(parent, name.strip()) self.refresh_tree() def perform_delete(self, paths, description): raise NotImplementedError() def perform_move_to_trash(self, paths, description): raise NotImplementedError() def supports_directories(self): return True def perform_mkdir(self, parent_dir, name): raise NotImplementedError() def notify_missing_selection(self): messagebox.showerror( tr("Nothing selected"), tr("Select an item and try again!"), master=self ) def should_open_name_in_thonny(self, name): ext = self.get_extension_from_name(name) return get_workbench().get_option(get_file_handler_conf_key(ext), "system") == "thonny" class BaseLocalFileBrowser(BaseFileBrowser): def __init__(self, master, show_expand_buttons=True): super().__init__(master, show_expand_buttons=show_expand_buttons) get_workbench().bind("WindowFocusIn", self.on_window_focus_in, True) get_workbench().bind("LocalFileOperation", self.on_local_file_operation, True) def destroy(self): super().destroy() get_workbench().unbind("WindowFocusIn", self.on_window_focus_in) get_workbench().unbind("LocalFileOperation", self.on_local_file_operation) def request_dirs_child_data(self, node_id, paths): self.cache_dirs_child_data(get_dirs_children_info(paths, show_hidden_files())) self.render_children_from_cache(node_id) def split_path(self, path): parts = super().split_path(path) if running_on_windows() and path.startswith("\\\\"): # Don't split a network name! sep = self.get_dir_separator() for i in reversed(range(len(parts))): prefix = sep.join(parts[: i + 1]) if os.path.ismount(prefix): return [prefix] + parts[i + 1 :] # Could not find the prefix corresponding to mount return [path] else: return parts def open_file(self, path): get_workbench().get_editor_notebook().show_file(path) def open_path_with_system_app(self, path): try: open_with_default_app(path) except Exception as e: logger.error("Could not open %r in system app", path, exc_info=e) messagebox.showerror( "Error", "Could not open '%s' in system app\nError: %s" % (path, e), parent=self.winfo_toplevel(), ) def on_window_focus_in(self, event=None): self.refresh_tree() def on_local_file_operation(self, event): if event["operation"] in ["save", "delete"]: self.refresh_tree() self.select_path_if_visible(event["path"]) def request_fs_info(self, path): if path == "": self.notify_missing_selection() else: if not os.path.isdir(path): path = os.path.dirname(path) import shutil self.present_fs_info(shutil.disk_usage(path)._asdict()) def perform_delete(self, paths, description): # Deprecated. moving to trash should be used instead raise NotImplementedError() def perform_move_to_trash(self, paths, description): # TODO: do it with subprocess dialog import send2trash for path in paths: send2trash.send2trash(path) def perform_mkdir(self, parent_dir, name): os.mkdir(os.path.join(parent_dir, name), mode=0o700) def supports_trash(self): try: import send2trash # @UnusedImport return True except ImportError: return False class BaseRemoteFileBrowser(BaseFileBrowser): def __init__(self, master, show_expand_buttons=True): super().__init__(master, show_expand_buttons=show_expand_buttons) self.dir_separator = "/" get_workbench().bind("get_dirs_children_info_response", self.update_dir_data, True) get_workbench().bind("get_fs_info_response", self.present_fs_info, True) get_workbench().bind("RemoteFileOperation", self.on_remote_file_operation, True) def destroy(self): super().destroy() get_workbench().unbind("get_dirs_children_info_response", self.update_dir_data) get_workbench().unbind("get_fs_info_response", self.present_fs_info) get_workbench().unbind("RemoteFileOperation", self.on_remote_file_operation) def get_root_text(self): runner = get_runner() if runner: return runner.get_node_label() return "Back-end" def request_dirs_child_data(self, node_id, paths): if get_runner(): get_runner().send_command( InlineCommand( "get_dirs_children_info", node_id=node_id, paths=paths, include_hidden=show_hidden_files(), ) ) def request_fs_info(self, path): if get_runner(): get_runner().send_command(InlineCommand("get_fs_info", path=path)) def get_dir_separator(self): return self.dir_separator def update_dir_data(self, msg): if msg.get("error"): self.show_error(msg["error"]) else: self.dir_separator = msg["dir_separator"] self.cache_dirs_child_data(msg["data"]) self.render_children_from_cache(msg["node_id"]) if self.path_to_highlight: self.select_path_if_visible(self.path_to_highlight) self.path_to_highlight = None def open_file(self, path): get_workbench().get_editor_notebook().show_remote_file(path) def open_path_with_system_app(self, path): messagebox.showinfo( "Not supported", "Opening remote files in system app is not supported.\n\n" + "Please download the file to a local directory and open it from there!", master=self, ) def supports_directories(self): runner = get_runner() if not runner: return False proxy = runner.get_backend_proxy() if not proxy: return False return proxy.supports_remote_directories() def on_remote_file_operation(self, event): path = event["path"] exists_in_cache = self.file_exists_in_cache(path) if ( event["operation"] == "save" and exists_in_cache or event["operation"] == "delete" and not exists_in_cache ): # No need to refresh return if "/" in path: parent = path[: path.rfind("/")] if not parent: parent = "/" else: parent = "" self.refresh_tree([parent]) self.path_to_highlight = path def perform_delete(self, paths, description): get_runner().send_command_and_wait( InlineCommand("delete", paths=paths, description=description), dialog_title=tr("Deleting"), ) def perform_mkdir(self, parent_dir, name): path = (parent_dir + self.get_dir_separator() + name).replace("//", "/") get_runner().send_command_and_wait( InlineCommand("mkdir", path=path), dialog_title=tr("Creating directory"), ) def supports_trash(self): return get_runner().get_backend_proxy().supports_trash() def request_focus_into(self, path): if not get_runner().ready_for_remote_file_operations(show_message=True): return False # super().request_focus_into(path) if not get_runner().supports_remote_directories(): assert path == "" self.focus_into(path) elif self.current_focus == path: # refreshes self.focus_into(path) else: self.request_new_focus(path) return True def request_new_focus(self, path): # Overridden in active browser self.focus_into(path) def cmd_refresh_tree(self): if not get_runner().ready_for_remote_file_operations(show_message=True): return super().cmd_refresh_tree() class DialogRemoteFileBrowser(BaseRemoteFileBrowser): def __init__(self, master, dialog): super().__init__(master, show_expand_buttons=False) self.dialog = dialog self.tree["show"] = ("tree", "headings") self.tree.configure(displaycolumns=(5,)) self.tree.configure(height=10) def open_file(self, path): self.dialog.double_click_file(path) def should_open_name_in_thonny(self, name): # In dialog, all file types are to be opened in Thonny return True class BackendFileDialog(CommonDialog): def __init__(self, master, kind, initial_dir): super().__init__(master=master) self.result = None self.updating_selection = False self.kind = kind if kind == "open": self.title(tr("Open from %s") % get_runner().get_node_label()) else: assert kind == "save" self.title(tr("Save to %s") % get_runner().get_node_label()) background = ttk.Frame(self) background.grid(row=0, column=0, sticky="nsew") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.browser = DialogRemoteFileBrowser(background, self) self.browser.grid(row=0, column=0, columnspan=4, sticky="nsew", pady=20, padx=20) self.browser.configure(borderwidth=1, relief="groove") self.browser.tree.configure(selectmode="browse") self.name_label = ttk.Label(background, text=tr("File name:")) self.name_label.grid(row=1, column=0, pady=(0, 20), padx=20, sticky="w") self.name_var = create_string_var("") self.name_entry = ttk.Entry( background, textvariable=self.name_var, state="normal" if kind == "save" else "disabled" ) self.name_entry.grid(row=1, column=1, pady=(0, 20), padx=(0, 20), sticky="we") self.name_entry.bind("", self.on_name_edit, True) self.ok_button = ttk.Button(background, text=tr("OK"), command=self.on_ok) self.ok_button.grid(row=1, column=2, pady=(0, 20), padx=(0, 20), sticky="e") self.cancel_button = ttk.Button(background, text=tr("Cancel"), command=self.on_cancel) self.cancel_button.grid(row=1, column=3, pady=(0, 20), padx=(0, 20), sticky="e") background.rowconfigure(0, weight=1) background.columnconfigure(1, weight=1) self.bind("", self.on_cancel, True) self.bind("", self.on_ok, True) self.protocol("WM_DELETE_WINDOW", self.on_cancel) self.tree_select_handler_id = self.browser.tree.bind( "<>", self.on_tree_select, True ) self.browser.request_focus_into(initial_dir) self.name_entry.focus_set() def on_ok(self, event=None): tree = self.browser.tree name = self.name_var.get() if not name: messagebox.showerror(tr("Error"), tr("You need to select a file!"), master=self) return for node_id in tree.get_children(""): if name and name == tree.set(node_id, "name"): break else: node_id = None if node_id is not None: node_kind = tree.set(node_id, "kind") if node_kind != "file": messagebox.showerror(tr("Error"), tr("You need to select a file!"), master=self) return elif self.kind == "save": if not messagebox.askyesno( tr("Overwrite?"), tr("Do you want to overwrite '%s' ?") % name, master=self ): return parent_path = tree.set("", "path") if parent_path == "" or parent_path.endswith("/"): self.result = parent_path + name else: self.result = parent_path + "/" + name self.destroy() def on_cancel(self, event=None): self.result = None self.destroy() def on_tree_select(self, event=None): if self.updating_selection: return if self.browser.get_selected_kind() == "file": name = self.browser.get_selected_name() if name: self.name_var.set(name) def on_name_edit(self, event=None): self.updating_selection = True tree = self.browser.tree if self.tree_select_handler_id: tree.unbind("<>", self.tree_select_handler_id) self.tree_select_handler_id = None name = self.name_var.get() for node_id in tree.get_children(""): if name == tree.set(node_id, "name"): tree.selection_add(node_id) else: tree.selection_remove(node_id) self.updating_selection = False self.tree_select_handler_id = tree.bind("<>", self.on_tree_select, True) def double_click_file(self, path): assert path.endswith(self.name_var.get()) self.on_ok() class NodeChoiceDialog(CommonDialog): def __init__(self, master, prompt): super().__init__(master=master) self.result = None self.title(prompt) background = ttk.Frame(self) background.grid(row=0, column=0, sticky="nsew") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) local_caption = get_local_files_root_text() remote_caption = get_runner().get_node_label() button_width = max(len(local_caption), len(remote_caption)) + 10 self.local_button = ttk.Button( background, text=" \n" + local_caption + "\n ", width=button_width, command=self.on_local, ) self.local_button.grid(row=0, column=0, pady=20, padx=20) self.remote_button = ttk.Button( background, text=" \n" + remote_caption + "\n ", width=button_width, command=self.on_remote, ) self.remote_button.grid(row=1, column=0, pady=(0, 20), padx=20) self.local_button.focus_set() self.bind("", self.on_cancel, True) self.bind("", self.on_return, True) self.bind("", self.on_down, True) self.bind("", self.on_up, True) self.protocol("WM_DELETE_WINDOW", self.on_cancel) def on_local(self, event=None): self.result = "local" self.destroy() def on_remote(self, event=None): self.result = "remote" self.destroy() def on_return(self, event=None): if self.focus_get() == self.local_button: self.on_local(event) elif self.focus_get() == self.remote_button: self.on_remote(event) def on_down(self, event=None): if self.focus_get() == self.local_button: self.remote_button.focus_set() def on_up(self, event=None): if self.focus_get() == self.remote_button: self.local_button.focus_set() def on_cancel(self, event=None): self.result = None self.destroy() def ask_backend_path(master, dialog_kind): proxy = get_runner().get_backend_proxy() if not proxy: return None assert proxy.supports_remote_files() dlg = BackendFileDialog(master, dialog_kind, proxy.get_cwd()) show_dialog(dlg, master) return dlg.result def choose_node_for_file_operations(master, prompt): if get_runner().supports_remote_files(): dlg = NodeChoiceDialog(master, prompt) show_dialog(dlg, master) if dlg.result == "remote" and not get_runner().ready_for_remote_file_operations( show_message=True ): return None return dlg.result else: return "local" def get_local_files_root_text(): global _LOCAL_FILES_ROOT_TEXT if not _LOCAL_FILES_ROOT_TEXT: # translation can't be done in module load time _LOCAL_FILES_ROOT_TEXT = tr("This computer") return _LOCAL_FILES_ROOT_TEXT def open_with_default_app(path): if running_on_windows(): os.startfile(path) elif running_on_mac_os(): subprocess.run(["open", path]) else: subprocess.run(["xdg-open", path]) def get_file_handler_conf_key(extension): return "file_default_handlers.%s" % extension def show_hidden_files(): return get_workbench().get_option(HIDDEN_FILES_OPTION) thonny-3.3.14/thonny/codeview.py000066400000000000000000000507401411757431400166340ustar00rootroot00000000000000# -*- coding: utf-8 -*- import codecs import io import os import re import sys import tkinter as tk from tkinter import messagebox from typing import Dict, Union # @UnusedImport from thonny import get_workbench, roughparse, tktextext, ui_utils from thonny.common import TextRange from thonny.tktextext import EnhancedText from thonny.ui_utils import EnhancedTextWithLogging, scrollbar_style, ask_string _syntax_options = {} # type: Dict[str, Union[str, int]] # BREAKPOINT_SYMBOL = "•" # Bullet # BREAKPOINT_SYMBOL = "○" # White circle BREAKPOINT_SYMBOL = "●" # Black circle OLD_MAC_LINEBREAK = re.compile("\r(?!\n)") UNIX_LINEBREAK = re.compile("(?", self._toggle_breakpoint, True) # self.text.tag_configure("breakpoint_line", background="pink") self._gutter.tag_configure("breakpoint", foreground="crimson") editor_font = tk.font.nametofont("EditorFont") spacer_font = editor_font.copy() spacer_font.configure(size=editor_font.cget("size") // 4) self._gutter.tag_configure("spacer", font=spacer_font) self._gutter.tag_configure("active", font="BoldEditorFont") self._gutter.tag_raise("spacer") def get_content(self): return self.text.get("1.0", "end-1c") # -1c because Text always adds a newline itself def detect_encoding(self, data): enc = self.detect_encoding_without_check(data) try: codecs.lookup(enc) return enc except LookupError: messagebox.showerror( "Error", "Unknown encoding '%s'. Using utf-8 instead" % enc, master=self ) return "utf-8" def detect_encoding_without_check(self, data): if self.text.is_python_text(): import tokenize encoding, _ = tokenize.detect_encoding(io.BytesIO(data).readline) return encoding else: ENCODING_MARKER = re.compile( br"(charset|coding)[\t ]*[=: ][\t ]*[\"\']?([a-z][0-9a-z-_ ]*[0-9a-z])[\"\'\n\r\t ]?", re.IGNORECASE, ) for line in data[:1024].splitlines(): match = ENCODING_MARKER.search(line) if match and len(match.group(2)) > 2: return match.group(2).decode("ascii", errors="replace") return "UTF-8" def set_file_type(self, file_type): self.text.set_file_type(file_type) def get_content_as_bytes(self): content = self.get_content() for callback in get_workbench().iter_save_hooks(): content = callback(self, content=content) # convert all linebreaks to original format content = OLD_MAC_LINEBREAK.sub(self._original_newlines, content) content = WINDOWS_LINEBREAK.sub(self._original_newlines, content) content = UNIX_LINEBREAK.sub(self._original_newlines, content) return content.encode(self.detect_encoding(content.encode("ascii", errors="replace"))) def set_content_as_bytes(self, data, keep_undo=False): encoding = self.detect_encoding(data) while True: try: chars = data.decode(encoding) if self.looks_like_text(chars): self.set_content(chars, keep_undo) return True except UnicodeDecodeError: pass encoding = ask_string( "Bad encoding", "Could not read as %s text.\nYou could try another encoding" % encoding, initial_value=encoding, options=get_proposed_encodings(), master=self.winfo_toplevel(), ) if not encoding: return False def looks_like_text(self, chars): if not chars: return True non_text_char_count = 0 for ch in chars: if ch in NON_TEXT_CHARS: non_text_char_count += 1 return non_text_char_count / len(chars) < 0.01 def set_content(self, content, keep_undo=False): content, self._original_newlines = tweak_newlines(content) for callback in get_workbench().iter_load_hooks(): content = callback(self, content=content) self.text.direct_delete("1.0", tk.END) self.text.direct_insert("1.0", content) if not keep_undo: self.text.edit_reset() def _toggle_breakpoint(self, event): index = "@%d,%d" % (event.x, event.y) start_index = index + " linestart" end_index = index + " lineend" if self.text.tag_nextrange("breakpoint_line", start_index, end_index): self.text.tag_remove("breakpoint_line", start_index, end_index) else: line_content = self.text.get(start_index, end_index).strip() if line_content and line_content[0] != "#": self.text.tag_add("breakpoint_line", start_index, end_index) self.update_gutter(clean=True) def _clean_selection(self): self.text.tag_remove("sel", "1.0", "end") self._gutter.tag_remove("sel", "1.0", "end") def _text_changed(self, event): self.update_gutter( clean=self.text._last_event_changed_line_count and self.text.tag_ranges("breakpoint_line") ) def compute_gutter_line(self, lineno, plain=False): if plain: yield str(lineno) + " ", () else: visual_line_number = self._first_line_number + lineno - 1 linestart = str(visual_line_number) + ".0" yield str(lineno), () if self.text.tag_nextrange("breakpoint_line", linestart, linestart + " lineend"): yield BREAKPOINT_SYMBOL, ("breakpoint",) else: yield " ", () def select_range(self, text_range): self.text.tag_remove("sel", "1.0", tk.END) if text_range: if isinstance(text_range, int): # it's line number start = str(text_range - self._first_line_number + 1) + ".0" end = str(text_range - self._first_line_number + 1) + ".end" elif isinstance(text_range, TextRange): start = "%s.%s" % ( text_range.lineno - self._first_line_number + 1, text_range.col_offset, ) end = "%s.%s" % ( text_range.end_lineno - self._first_line_number + 1, text_range.end_col_offset, ) else: assert isinstance(text_range, tuple) start, end = text_range self.text.tag_add("sel", start, end) if isinstance(text_range, int): self.text.mark_set("insert", end) self.text.see("%s -1 lines" % start) def get_breakpoint_line_numbers(self): result = set() for num_line in self._gutter.get("1.0", "end").splitlines(): if BREAKPOINT_SYMBOL in num_line: result.add(int(num_line.replace(BREAKPOINT_SYMBOL, ""))) return result def get_selected_range(self): if self.text.has_selection(): lineno, col_offset = map(int, self.text.index(tk.SEL_FIRST).split(".")) end_lineno, end_col_offset = map(int, self.text.index(tk.SEL_LAST).split(".")) else: lineno, col_offset = map(int, self.text.index(tk.INSERT).split(".")) end_lineno, end_col_offset = lineno, col_offset return TextRange(lineno, col_offset, end_lineno, end_col_offset) def destroy(self): super().destroy() get_workbench().unbind("SyntaxThemeChanged", self._reload_theme_options) def _reload_gutter_theme_options(self, event=None): # super()._reload_gutter_theme_options(event) if "GUTTER" in _syntax_options: opts = _syntax_options["GUTTER"].copy() if "background" in opts and "selectbackground" not in opts: opts["selectbackground"] = opts["background"] opts["inactiveselectbackground"] = opts["background"] if "foreground" in opts and "selectforeground" not in opts: opts["selectforeground"] = opts["foreground"] self._gutter.configure(opts) if "background" in opts: background = opts["background"] self._margin_line.configure(background=background) self._gutter.tag_configure("sel", background=background) if "breakpoint" in _syntax_options: self._gutter.tag_configure("breakpoint", _syntax_options["breakpoint"]) def set_syntax_options(syntax_options): global _syntax_options _syntax_options = syntax_options get_workbench().event_generate("SyntaxThemeChanged") def get_syntax_options_for_tag(tag, **base_options): global _syntax_options if tag in _syntax_options: base_options.update(_syntax_options[tag]) return base_options def tweak_newlines(content): cr_count = len(OLD_MAC_LINEBREAK.findall(content)) lf_count = len(UNIX_LINEBREAK.findall(content)) crlf_count = len(WINDOWS_LINEBREAK.findall(content)) if cr_count > 0 and lf_count == 0 and crlf_count == 0: original_newlines = "\r" elif crlf_count > 0 and lf_count == 0 and cr_count == 0: original_newlines = "\r\n" elif lf_count > 0 and crlf_count == 0 and cr_count == 0: original_newlines = "\n" else: original_newlines = os.linesep content = OLD_MAC_LINEBREAK.sub("\n", content) content = WINDOWS_LINEBREAK.sub("\n", content) return content, original_newlines def perform_python_return(text: EnhancedText, event): # copied from idlelib.EditorWindow (Python 3.4.2) # slightly modified # pylint: disable=lost-exception assert text is event.widget assert isinstance(text, EnhancedText) try: # delete selection first, last = text.get_selection_indices() if first and last: text.delete(first, last) text.mark_set("insert", first) # Strip whitespace after insert point # (ie. don't carry whitespace from the right of the cursor over to the new line) while text.get("insert") in [" ", "\t"]: text.delete("insert") left_part = text.get("insert linestart", "insert") # locate first non-white character i = 0 n = len(left_part) while i < n and left_part[i] in " \t": i = i + 1 # is it only whitespace? if i == n: # start the new line with the same whitespace text.insert("insert", "\n" + left_part) return "break" # Turned out the left part contains visible chars # Remember the indent indent = left_part[:i] # Strip whitespace before insert point # (ie. after inserting the linebreak this line doesn't have trailing whitespace) while text.get("insert-1c", "insert") in [" ", "\t"]: text.delete("insert-1c", "insert") # start new line text.insert("insert", "\n") # adjust indentation for continuations and block # open/close first need to find the last stmt lno = tktextext.index2line(text.index("insert")) y = roughparse.RoughParser(text.indent_width, text.tabwidth) for context in roughparse.NUM_CONTEXT_LINES: startat = max(lno - context, 1) startatindex = repr(startat) + ".0" rawtext = text.get(startatindex, "insert") y.set_str(rawtext) bod = y.find_good_parse_start( False, roughparse._build_char_in_string_func(startatindex) ) if bod is not None or startat == 1: break y.set_lo(bod or 0) c = y.get_continuation_type() if c != roughparse.C_NONE: # The current stmt hasn't ended yet. if c == roughparse.C_STRING_FIRST_LINE: # after the first line of a string; do not indent at all pass elif c == roughparse.C_STRING_NEXT_LINES: # inside a string which started before this line; # just mimic the current indent text.insert("insert", indent) elif c == roughparse.C_BRACKET: # line up with the first (if any) element of the # last open bracket structure; else indent one # level beyond the indent of the line with the # last open bracket text._reindent_to(y.compute_bracket_indent()) elif c == roughparse.C_BACKSLASH: # if more than one line in this stmt already, just # mimic the current indent; else if initial line # has a start on an assignment stmt, indent to # beyond leftmost =; else to beyond first chunk of # non-whitespace on initial line if y.get_num_lines_in_stmt() > 1: text.insert("insert", indent) else: text._reindent_to(y.compute_backslash_indent()) else: assert 0, "bogus continuation type %r" % (c,) return "break" # This line starts a brand new stmt; indent relative to # indentation of initial line of closest preceding # interesting stmt. indent = y.get_base_indent_string() text.insert("insert", indent) if y.is_block_opener(): text.perform_smart_tab(event) elif indent and y.is_block_closer(): text.perform_smart_backspace(event) return "break" finally: text.see("insert") text.event_generate("<>") return "break" def perform_simple_return(text: EnhancedText, event): assert text is event.widget assert isinstance(text, EnhancedText) text._log_keypress_for_undo(event) try: # delete selection first, last = text.get_selection_indices() if first and last: text.delete(first, last) text.mark_set("insert", first) # Strip whitespace after insert point # (ie. don't carry whitespace from the right of the cursor over to the new line) while text.get("insert") in [" ", "\t"]: text.delete("insert") left_part = text.get("insert linestart", "insert") # locate first non-white character i = 0 n = len(left_part) while i < n and left_part[i] in " \t": i = i + 1 # start the new line with the same whitespace text.insert("insert", "\n" + left_part[:i]) return "break" finally: text.see("insert") text.event_generate("<>") return "break" class BinaryFileException(RuntimeError): pass def get_proposed_encodings(): # https://w3techs.com/technologies/overview/character_encoding result = [ "UTF-8", "ISO-8859-1", "Windows-1251", "Windows-1252", "GB2312", "Shift JIS", "GBK", "EUC-KR", "ISO-8859-9", "Windows-1254", "EUC-JP", "Big5", "ISO-8859-2 ", "Windows-1250", "Windows-874", "Windows-1256", "ISO-8859-15", "US-ASCII", "Windows-1255", "TIS-620", "ISO-8859-7", "Windows-1253", "UTF-16", "KOI8-R", "GB18030", "Windows-1257", "KS C 5601", "UTF-7", "ISO-8859-8", "Windows-31J", "ISO-8859-5", "ISO-8859-6", "ISO-8859-4", "ANSI_X3.110-1983", "ISO-8859-3", "KOI8-U", "Big5 HKSCS", "ISO-2022-JP", "Windows-1258", "ISO-8859-13", "ISO-8859-14", "Windows-949", "ISO-8859-10", "ISO-8859-11", "ISO-8859-16", ] sys_enc = sys.getdefaultencoding() for item in result[:]: if item.lower() == sys_enc.lower(): result.remove(item) sys_enc = item result.insert(0, sys_enc) return result thonny-3.3.14/thonny/common.py000066400000000000000000000475331411757431400163250ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ Classes used both by front-end and back-end """ import ast import logging import os.path import platform import site import subprocess import sys from collections import namedtuple from typing import List, Optional, Dict, Iterable, Tuple # @UnusedImport logger = logging.getLogger(__name__) MESSAGE_MARKER = "\x02" OBJECT_LINK_START = "[object_link_for_thonny=%d]" OBJECT_LINK_END = "[/object_link_for_thonny]" IGNORED_FILES_AND_DIRS = [ "System Volume Information", "._.Trashes", ".Trashes", "__MACOSX", ".DS_Store", ] ValueInfo = namedtuple("ValueInfo", ["id", "repr"]) FrameInfo = namedtuple( "FrameInfo", [ "id", "filename", "module_name", "code_name", "source", "lineno", "firstlineno", "in_library", "locals", "globals", "freevars", "event", "focus", "node_tags", "current_statement", "current_root_expression", "current_evaluations", ], ) TextRange = namedtuple("TextRange", ["lineno", "col_offset", "end_lineno", "end_col_offset"]) class Record: def __init__(self, **kw): self.__dict__.update(kw) def update(self, e, **kw): self.__dict__.update(e, **kw) def setdefault(self, **kw): "updates those fields that are not yet present (similar to dict.setdefault)" for key in kw: if not hasattr(self, key): setattr(self, key, kw[key]) def get(self, key, default=None): return self.__dict__.get(key, default) def __getitem__(self, key): return self.__dict__[key] def __delitem__(self, key): self.__dict__.__delitem__(key) def __setitem__(self, key, value): self.__dict__[key] = value def __contains__(self, key): return key in self.__dict__ def __repr__(self): keys = self.__dict__.keys() items = ("{}={}".format(k, repr(self.__dict__[k])) for k in keys) return "{}({})".format(self.__class__.__name__, ", ".join(items)) def __str__(self): keys = sorted(self.__dict__.keys()) items = ("{}={}".format(k, repr(self.__dict__[k])) for k in keys) return "{}({})".format(self.__class__.__name__, ", ".join(items)) def __eq__(self, other): # pylint: disable=unidiomatic-typecheck if type(self) != type(other): return False if len(self.__dict__) != len(other.__dict__): return False for key in self.__dict__: if not hasattr(other, key): return False self_value = getattr(self, key) other_value = getattr(other, key) if type(self_value) != type(other_value) or self_value != other_value: return False return True def __ne__(self, other): return not self.__eq__(other) def __hash__(self): return hash(repr(self)) def range_contains_smaller(one: TextRange, other: TextRange) -> bool: this_start = (one.lineno, one.col_offset) this_end = (one.end_lineno, one.end_col_offset) other_start = (other.lineno, other.col_offset) other_end = (other.end_lineno, other.end_col_offset) return ( this_start < other_start and this_end > other_end or this_start == other_start and this_end > other_end or this_start < other_start and this_end == other_end ) def range_contains_smaller_or_equal(one: TextRange, other: TextRange) -> bool: return range_contains_smaller(one, other) or one == other class InputSubmission(Record): """For sending data to backend's stdin""" def __init__(self, data: str, **kw) -> None: super().__init__(**kw) self.data = data class CommandToBackend(Record): """Command meant for the back-end""" def __init__(self, name: str, **kw) -> None: super().__init__(**kw) self.name = name class ImmediateCommand(CommandToBackend): pass class EOFCommand(CommandToBackend): def __init__(self, **kw) -> None: if "name" in kw: del kw["name"] super().__init__("eof", **kw) class ToplevelCommand(CommandToBackend): def __init__(self, name: str, argv: List[str] = [], **kw) -> None: super().__init__(name, **kw) self.argv = argv class DebuggerCommand(CommandToBackend): pass class InlineCommand(CommandToBackend): """ Can be used both during debugging and in waiting_toplevel_command state (eg. for sending variable and heap info requests) """ pass class MessageFromBackend(Record): def __init__(self, **kw) -> None: self.event_type = type(self).__name__ # allow event_type to be overridden by kw super().__init__(**kw) if not hasattr(self, "sequence"): self.sequence = self.event_type class ToplevelResponse(MessageFromBackend): pass class DebuggerResponse(MessageFromBackend): pass class BackendEvent(MessageFromBackend): def __init__(self, event_type: str, **kw) -> None: super().__init__(**kw) self.event_type = event_type class InlineResponse(MessageFromBackend): def __init__(self, command_name: str, **kw) -> None: super().__init__(**kw) self.command_name = command_name self.event_type = self.command_name + "_response" def serialize_message(msg: Record) -> str: # I want to transfer only ASCII chars because encodings are not reliable # (eg. can't find a way to specify PYTHONIOENCODING for cx_freeze'd program) return MESSAGE_MARKER + ascii(msg) def parse_message(msg_string: str) -> Record: # DataFrames may have nan # pylint: disable=unused-variable nan = float("nan") # @UnusedVariable assert msg_string[0] == MESSAGE_MARKER return eval(msg_string[1:]) def normpath_with_actual_case(name: str) -> str: """In Windows return the path with the case it is stored in the filesystem""" if not os.path.exists(name): return os.path.normpath(name) assert os.path.isabs(name) or os.path.ismount(name), "Not abs nor mount: " + name assert os.path.exists(name), "Not exists: " + name if os.name == "nt": # https://stackoverflow.com/questions/2113822/python-getting-filename-case-as-stored-in-windows/2114975 name = os.path.normpath(name) from ctypes import create_unicode_buffer, windll buf = create_unicode_buffer(512) # GetLongPathNameW alone doesn't fix filename part windll.kernel32.GetShortPathNameW(name, buf, 512) # @UndefinedVariable windll.kernel32.GetLongPathNameW(buf.value, buf, 512) # @UndefinedVariable result = buf.value if result.casefold() != name.casefold(): # Sometimes GetShortPathNameW + GetLongPathNameW doesn't work # see eg. https://github.com/thonny/thonny/issues/925 windll.kernel32.GetLongPathNameW(name, buf, 512) # @UndefinedVariable result = buf.value if result.casefold() != name.casefold(): result = name if result[1] == ":": # ensure drive letter is capital return result[0].upper() + result[1:] else: return result else: # easy on Linux # too difficult on mac # https://stackoverflow.com/questions/14515073/in-python-on-osx-with-hfs-how-can-i-get-the-correct-case-of-an-existing-filenam # Hopefully only correct case comes into Thonny (eg. via open dialog) return os.path.normpath(name) def is_same_path(name1: str, name2: str) -> bool: return os.path.normpath(os.path.normcase(name1)) == os.path.normpath(os.path.normcase(name2)) def path_startswith(child_name: str, dir_name: str) -> bool: normchild = os.path.normpath(os.path.normcase(child_name)) normdir = os.path.normpath(os.path.normcase(dir_name)) return normdir == normchild or normchild.startswith(normdir.rstrip(os.path.sep) + os.path.sep) def read_source(filename): import tokenize with tokenize.open(filename) as fp: return fp.read() def get_exe_dirs(): result = [] if site.ENABLE_USER_SITE: if platform.system() == "Windows": if site.getusersitepackages(): result.append(site.getusersitepackages().replace("site-packages", "Scripts")) else: if site.getuserbase(): result.append(site.getuserbase() + "/bin") main_scripts = os.path.join(sys.prefix, "Scripts") if os.path.isdir(main_scripts) and main_scripts not in result: result.append(main_scripts) if os.path.dirname(sys.executable) not in result: result.append(os.path.dirname(sys.executable)) # These entries are used by Anaconda for part in [ "Library/mingw-w64/bin", "Library/usr/bin", "Library/bin", "Scripts", "bin", "condabin", ]: dirpath = os.path.join(sys.prefix, part.replace("/", os.sep)) if os.path.isdir(dirpath) and dirpath not in result: result.append(dirpath) if platform.system() != "Windows" and "/usr/local/bin" not in result: # May be missing on macOS, when started as bundle # (yes, more may be missing, but this one is most useful) result.append("/usr/local/bin") return result def get_site_dir(symbolic_name, executable=None): if not executable or executable == sys.executable: result = getattr(site, symbolic_name, "") else: result = ( subprocess.check_output( [executable, "-m", "site", "--" + symbolic_name.lower().replace("_", "-")], universal_newlines=True, ) .decode() .strip() ) return result if result else None def get_base_executable(): if sys.exec_prefix == sys.base_exec_prefix: return sys.executable if platform.system() == "Windows": result = sys.base_exec_prefix + "\\" + os.path.basename(sys.executable) result = normpath_with_actual_case(result) else: result = sys.executable.replace(sys.exec_prefix, sys.base_exec_prefix) if not os.path.isfile(result): raise RuntimeError("Can't locate base executable") return result def get_augmented_system_path(extra_dirs): path_items = os.environ.get("PATH", "").split(os.pathsep) for d in reversed(extra_dirs): if d not in path_items: path_items.insert(0, d) return os.pathsep.join(path_items) def update_system_path(env, value): # in Windows, env keys are not case sensitive # this is important if env is a dict (not os.environ) if platform.system() == "Windows": found = False for key in env: if key.upper() == "PATH": found = True env[key] = value if not found: env["PATH"] = value else: env["PATH"] = value class UserError(RuntimeError): """Errors of this class are meant to be presented without stacktrace""" pass def is_hidden_or_system_file(path: str) -> bool: if os.path.basename(path).startswith("."): return True elif platform.system() == "Windows": from ctypes import windll FILE_ATTRIBUTE_HIDDEN = 0x2 FILE_ATTRIBUTE_SYSTEM = 0x4 return bool( windll.kernel32.GetFileAttributesW(path) # @UndefinedVariable & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM) ) else: return False def get_dirs_children_info( paths: List[str], include_hidden: bool = False ) -> Dict[str, Optional[Dict[str, Dict]]]: return {path: get_single_dir_child_data(path, include_hidden) for path in paths} def get_single_dir_child_data(path: str, include_hidden: bool = False) -> Optional[Dict[str, Dict]]: if path == "": if platform.system() == "Windows": return {**get_windows_volumes_info(), **get_windows_network_locations()} else: return get_single_dir_child_data("/", include_hidden) elif os.path.isdir(path) or os.path.ismount(path): result = {} try: for child in os.listdir(path): full_child_path = os.path.join(path, child) if not os.path.exists(full_child_path): # must be broken link continue full_child_path = normpath_with_actual_case(full_child_path) hidden = is_hidden_or_system_file(full_child_path) if not hidden or include_hidden: name = os.path.basename(full_child_path) st = os.stat(full_child_path, dir_fd=None, follow_symlinks=True) result[name] = { "size": None if os.path.isdir(full_child_path) else st.st_size, "modified": st.st_mtime, "hidden": hidden, } except PermissionError: result[""] = { "kind": "error", "size": -1, "modified": None, "hidden": None, } return result else: return None def get_windows_volumes_info(): # http://stackoverflow.com/a/2288225/261181 # http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939%28v=vs.85%29.aspx import string from ctypes import windll all_drive_types = [ "DRIVE_UNKNOWN", "DRIVE_NO_ROOT_DIR", "DRIVE_REMOVABLE", "DRIVE_FIXED", "DRIVE_REMOTE", "DRIVE_CDROM", "DRIVE_RAMDISK", ] required_drive_types = ["DRIVE_REMOVABLE", "DRIVE_FIXED", "DRIVE_REMOTE", "DRIVE_RAMDISK"] result = {} bitmask = windll.kernel32.GetLogicalDrives() # @UndefinedVariable for letter in string.ascii_uppercase: if not bitmask & 1: pass else: drive_type = all_drive_types[ windll.kernel32.GetDriveTypeW("%s:\\" % letter) ] # @UndefinedVariable # NB! Drive A can be present in bitmask but actually missing. # In this case querying information about it would freeze the UI # for several seconds. # One solution is to uninstall the device in device manager, # but OS may restore the drive later. # Therefore it is safest to skip A drive (user can access it via Open dialog) if drive_type in required_drive_types and ( letter != "A" or drive_type != "DRIVE_REMOVABLE" ): drive = letter + ":" path = drive + "\\" try: st = os.stat(path) volume_name = get_windows_volume_name(path) if not volume_name: volume_name = "Disk" label = volume_name + " (" + drive + ")" result[path] = { "label": label, "size": None, "modified": max(st.st_mtime, st.st_ctime), } except OSError as e: logger.warning("Could not get information for %s", path, exc_info=e) bitmask >>= 1 return result def get_windows_volume_name(path): # https://stackoverflow.com/a/12056414/261181 import ctypes kernel32 = ctypes.windll.kernel32 volume_name_buffer = ctypes.create_unicode_buffer(1024) file_system_name_buffer = ctypes.create_unicode_buffer(1024) serial_number = None max_component_length = None file_system_flags = None result = kernel32.GetVolumeInformationW( ctypes.c_wchar_p(path), volume_name_buffer, ctypes.sizeof(volume_name_buffer), serial_number, max_component_length, file_system_flags, file_system_name_buffer, ctypes.sizeof(file_system_name_buffer), ) if result: return volume_name_buffer.value else: return None def get_windows_network_locations(): import ctypes.wintypes CSIDL_NETHOOD = 0x13 SHGFP_TYPE_CURRENT = 0 buf = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) ctypes.windll.shell32.SHGetFolderPathW(0, CSIDL_NETHOOD, 0, SHGFP_TYPE_CURRENT, buf) shortcuts_dir = buf.value result = {} for entry in os.scandir(shortcuts_dir): # full_path = normpath_with_actual_case(entry.path) lnk_path = os.path.join(entry.path, "target.lnk") if os.path.exists(lnk_path): try: target = get_windows_lnk_target(lnk_path) result[target] = { "label": entry.name + " (" + target + ")", "size": None, "modified": None, } except Exception: logger.error("Can't get target from %s", lnk_path, exc_info=True) return result def get_windows_lnk_target(lnk_file_path): import thonny script_path = os.path.join(os.path.dirname(thonny.__file__), "res", "PrintLnkTarget.vbs") cmd = ["cscript", "/NoLogo", script_path, lnk_file_path] result = subprocess.check_output(cmd, universal_newlines=True, timeout=3) return result.strip() def execute_system_command(cmd, cwd=None, disconnect_stdin=False): logger.debug("execute_system_command, cmd=%r, cwd=%s", cmd, cwd) env = dict(os.environ).copy() encoding = "utf-8" env["PYTHONIOENCODING"] = encoding # Make sure this python interpreter and its scripts are available # in PATH update_system_path(env, get_augmented_system_path(get_exe_dirs())) popen_kw = dict( env=env, universal_newlines=True, bufsize=0, ) if cwd and os.path.isdir(cwd): popen_kw["cwd"] = cwd if disconnect_stdin: popen_kw["stdin"] = subprocess.DEVNULL if sys.version_info >= (3, 6): popen_kw["errors"] = "replace" popen_kw["encoding"] = encoding if isinstance(cmd.cmd_line, str) and cmd.cmd_line.startswith("!"): cmd_line = cmd.cmd_line[1:] popen_kw["shell"] = True else: assert isinstance(cmd.cmd_line, list) cmd_line = cmd.cmd_line logger.debug("Popen(%r, ...)", cmd_line) proc = subprocess.Popen(cmd_line, **popen_kw) proc.communicate() return proc.wait() def universal_dirname(path: str) -> str: if "/" in path: sep = "/" elif "\\" in path: sep = "\\" else: # micro:bit return "" path = path.rstrip(sep) result = path[: path.rindex(sep)] if not result: return sep else: return result def universal_relpath(path: str, context: str) -> str: """Tries to give relative path""" if "/" in path: import pathlib p = pathlib.PurePosixPath(path) try: return str(p.relative_to(context)) except ValueError: return path else: return os.path.relpath(path, context) def get_python_version_string(version_info: Optional[Tuple] = None, maxsize=None): result = ".".join(map(str, sys.version_info[:3])) if sys.version_info[3] != "final": result += "-" + sys.version_info[3] if maxsize is not None: result += " (" + ("64" if sys.maxsize > 2 ** 32 else "32") + " bit)" return result def try_load_modules_with_frontend_sys_path(module_names): try: frontend_sys_path = ast.literal_eval(os.environ["THONNY_FRONTEND_SYS_PATH"]) assert isinstance(frontend_sys_path, list) except Exception as e: logger.warning("Could not get THONNY_FRONTEND_SYS_PATH", exc_info=e) return from importlib import import_module old_sys_path = sys.path.copy() sys.path = sys.path + frontend_sys_path try: for name in module_names: try: import_module(name) except ImportError: pass finally: sys.path = old_sys_path class ConnectionFailedException(Exception): pass class ConnectionClosedException(Exception): pass thonny-3.3.14/thonny/config.py000066400000000000000000000200641411757431400162700ustar00rootroot00000000000000# -*- coding: utf-8 -*- import ast import configparser import datetime import logging import os.path import sys import tkinter as tk from configparser import ConfigParser from logging import exception from thonny import THONNY_USER_DIR logger = logging.getLogger(__name__) _manager_cache = {} def try_load_configuration(filename): if filename in _manager_cache: return _manager_cache[filename] try: # use cache so Workbench doesn't create duplicate manager # when FirstRunWindow already created one mgr = ConfigurationManager(filename) _manager_cache[filename] = mgr return mgr except configparser.Error: from tkinter import messagebox if os.path.exists(filename) and messagebox.askyesno( "Problem", "Thonny's configuration file can't be read. It may be corrupt.\n\n" + "Do you want to discard the file and open Thonny with default settings?", master=tk._default_root, ): os.replace(filename, filename + "_corrupt") # For some reasons Thonny styles are not loaded properly once messagebox has been shown before main window (At least Windows Py 3.5) raise SystemExit("Configuration file has been discarded. Please restart Thonny!") else: raise class ConfigurationManager: def __init__(self, filename): self._ini = ConfigParser(interpolation=None) self._filename = filename self._defaults = {} self._defaults_overrides_str = {} self._variables = {} # Tk variables if os.path.exists(self._filename): with open(self._filename, "r", encoding="UTF-8") as fp: self._ini.read_file(fp) else: # For migration to new conf directory # only if not in venv if not ( hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix or hasattr(sys, "real_prefix") and getattr(sys, "real_prefix") != sys.prefix ): old_user_dir = os.path.join(os.path.expanduser("~"), ".thonny") old_config_file = os.path.join(old_user_dir, "configuration.ini") if os.path.exists(old_config_file): with open(old_config_file, "r", encoding="UTF-8") as fp: self._ini.read_file(fp) self.set_option("run.backend_name", "SameAsFrontend") # migrate user_logs # (I know, it's not proper place for this code, but ...) old_user_logs = os.path.join(old_user_dir, "user_logs") new_user_logs = os.path.join(THONNY_USER_DIR, "user_logs") if os.path.exists(old_user_logs) and not os.path.exists(new_user_logs): try: import shutil shutil.copytree(old_user_logs, new_user_logs) except Exception as e: logger.exception("Problem migrating user logs", exc_info=e) if not self.get_option("general.configuration_creation_timestamp"): self.set_option( "general.configuration_creation_timestamp", datetime.datetime.now().isoformat() ) # print(prefs_filename, self.sections()) self._init_default_overrides() def _init_default_overrides(self): overrides_path = os.path.join(os.path.dirname(__file__), "defaults.ini") if not os.path.isfile(overrides_path): return defparser = configparser.ConfigParser() defparser.read(overrides_path, "utf-8") for section in defparser.sections(): for key in defparser[section]: # leave parsing until base default value is known self._defaults_overrides_str[section + "." + key] = defparser[section][key] def get_option(self, name, secondary_default=None): section, option = self._parse_name(name) name = section + "." + option # variable may have more recent value if name in self._variables: return self._variables[name].get() try: val = self._ini.get(section, option) # if option's data type is str (inferred from the default value) # then don't try to parse anything (unless it's None) if val == "None": return None elif isinstance(self._defaults.get(name), str): return val else: return self._parse_value(val) except Exception: if name in self._defaults: return self._defaults[name] else: return secondary_default def has_option(self, name): return name in self._defaults def set_option(self, name, value): section, option = self._parse_name(name) name = section + "." + option if not self._ini.has_section(section): self._ini.add_section(section) if isinstance(value, str): self._ini.set(section, option, value) else: self._ini.set(section, option, repr(value)) # update variable if name in self._variables: self._variables[name].set(value) def set_default(self, name, primary_default_value): # normalize name section, option = self._parse_name(name) name = section + "." + option self._defaults[name] = primary_default_value if name in self._defaults_overrides_str: if isinstance(primary_default_value, str): value = self._defaults_overrides_str[name] else: value = self._parse_value(self._defaults_overrides_str[name]) else: value = primary_default_value self._defaults[name] = value def get_variable(self, name: str) -> tk.Variable: section, option = self._parse_name(name) name = section + "." + option if name in self._variables: return self._variables[name] else: value = self.get_option(name) if isinstance(value, bool): var = tk.BooleanVar(value=value) # type: tk.Variable elif isinstance(value, int): var = tk.IntVar(value=value) elif isinstance(value, str): var = tk.StringVar(value=value) elif isinstance(value, float): var = tk.StringVar(value=value) else: raise KeyError( "Can't create Tk Variable for " + name + ". Type is " + str(type(value)) ) self._variables[name] = var return var def save(self): # save all tk variables for name in self._variables: self.set_option(name, self._variables[name].get()) # store if not os.path.exists(self._filename): os.makedirs(os.path.dirname(self._filename), mode=0o700, exist_ok=True) # Normal saving occasionally creates corrupted file: # https://bitbucket.org/plas/thonny/issues/167/configuration-file-occasionally-gets # Now I'm saving the configuration to a temp file # and if the save is successful, I replace configuration file with it temp_filename = self._filename + ".temp" with open(temp_filename, "w", encoding="UTF-8") as fp: self._ini.write(fp) try: ConfigurationManager(temp_filename) # temp file was created successfully os.chmod(temp_filename, 0o600) os.replace(temp_filename, self._filename) os.chmod(self._filename, 0o600) except Exception: exception("Could not save configuration file. Reverting to previous file.") def _parse_name(self, name): if "." in name: return name.split(".", 1) else: return "general", name def _parse_value(self, value): try: return ast.literal_eval(value) except Exception: return value thonny-3.3.14/thonny/config_ui.py000066400000000000000000000124721411757431400167710ustar00rootroot00000000000000import logging import tkinter as tk from tkinter import ttk from typing import Optional from thonny import get_workbench, ui_utils from thonny.languages import tr from thonny.ui_utils import CommonDialog, ems_to_pixels logger = logging.getLogger(__name__) class ConfigurationDialog(CommonDialog): last_shown_tab_index = 0 def __init__(self, master, page_records_with_order): super().__init__(master) width = ems_to_pixels(59) height = ems_to_pixels(43) self.geometry("%dx%d" % (width, height)) self.title(tr("Thonny options")) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.backend_restart_required = False self.gui_restart_required = False main_frame = ttk.Frame(self) # otherwise there is wrong color background with clam main_frame.grid(row=0, column=0, sticky=tk.NSEW) main_frame.columnconfigure(0, weight=1) main_frame.rowconfigure(0, weight=1) self._notebook = ttk.Notebook(main_frame) self._notebook.grid(row=0, column=0, columnspan=3, sticky=tk.NSEW, padx=10, pady=10) self._ok_button = ttk.Button(main_frame, text=tr("OK"), command=self._ok, default="active") self._cancel_button = ttk.Button(main_frame, text=tr("Cancel"), command=self._cancel) self._ok_button.grid(row=1, column=1, padx=(0, 11), pady=(0, 10)) self._cancel_button.grid(row=1, column=2, padx=(0, 11), pady=(0, 10)) self._page_records = [] for key, title, page_class, _ in sorted( page_records_with_order, key=lambda r: (r[3], r[0]) ): try: spacer = ttk.Frame(self) spacer.rowconfigure(0, weight=1) spacer.columnconfigure(0, weight=1) page = page_class(spacer) page.key = key page.dialog = self self._page_records.append((key, title, page)) page.grid(sticky=tk.NSEW, pady=(15, 10), padx=15) self._notebook.add(spacer, text=title) except Exception as e: logger.exception("Could not create configuration page %s", key, exc_info=e) self.bind("", self._ok, True) self.bind("", self._cancel, True) self._notebook.select(self._notebook.tabs()[ConfigurationDialog.last_shown_tab_index]) def select_page(self, key): for i, tab in enumerate(self._notebook.tabs()): if self._page_records[i][0] == key: self._notebook.select(tab) def _ok(self, event=None): for _, title, page in self._page_records: try: if page.apply() is False: return except Exception: get_workbench().report_exception("Error when applying options in " + title) self.destroy() def _cancel(self, event=None): for _, title, page in self._page_records: try: page.cancel() except Exception: get_workbench().report_exception("Error when cancelling options in " + title) self.destroy() def destroy(self): ConfigurationDialog.last_shown_tab_index = self._notebook.index(self._notebook.select()) super().destroy() class ConfigurationPage(ttk.Frame): """This is an example dummy implementation of a configuration page. It's not required that configuration pages inherit from this class (can be any widget), but the class must have constructor with single parameter for getting the master.""" def __init__(self, master): ttk.Frame.__init__(self, master) self.dialog = None # type: Optional[ConfigurationDialog] def add_checkbox( self, flag_name, description, row=None, column=0, padx=0, pady=0, columnspan=1, tooltip=None ): variable = get_workbench().get_variable(flag_name) checkbox = ttk.Checkbutton(self, text=description, variable=variable) checkbox.grid( row=row, column=column, sticky=tk.W, padx=padx, pady=pady, columnspan=columnspan ) if tooltip is not None: ui_utils.create_tooltip(checkbox, tooltip) def add_combobox( self, variable, values, row=None, column=0, padx=0, pady=0, columnspan=1, width=None ): if isinstance(variable, str): variable = get_workbench().get_variable(variable) combobox = ttk.Combobox( self, exportselection=False, textvariable=variable, state="readonly", height=15, width=width, values=values, ) combobox.grid( row=row, column=column, sticky=tk.W, pady=pady, padx=padx, columnspan=columnspan ) return variable def add_entry(self, option_name, row=None, column=0, pady=0, padx=0, columnspan=1, **kw): variable = get_workbench().get_variable(option_name) entry = ttk.Entry(self, textvariable=variable, **kw) entry.grid(row=row, column=column, sticky=tk.W, pady=pady, columnspan=columnspan, padx=padx) def apply(self): """Apply method should return False, when page contains invalid input and configuration dialog should not be closed.""" pass def cancel(self): """Called when dialog gets cancelled""" pass thonny-3.3.14/thonny/defaults.ini000066400000000000000000000005171411757431400167620ustar00rootroot00000000000000; This file can be used by 3rd party packagers for specifying custom default values for options. ; Use the same sections and keys as configuration.ini ; Priorities of the values specified in different locations: ; 1. explicit values in configuration.ini ; 2. overridden defaults in this file ; 3. base defaults given in Thonny's code thonny-3.3.14/thonny/editors.py000066400000000000000000001120421411757431400164720ustar00rootroot00000000000000# -*- coding: utf-8 -*- import logging import os.path import sys import tkinter as tk import traceback from logging import exception from tkinter import messagebox, ttk from _tkinter import TclError from thonny import get_runner, get_workbench, ui_utils from thonny.base_file_browser import ask_backend_path, choose_node_for_file_operations from thonny.codeview import CodeView, BinaryFileException from thonny.common import ( InlineCommand, TextRange, ToplevelResponse, is_same_path, normpath_with_actual_case, universal_dirname, ) from thonny.languages import tr from thonny.misc_utils import running_on_mac_os, running_on_windows from thonny.tktextext import rebind_control_a from thonny.ui_utils import askopenfilename, asksaveasfilename, select_sequence _dialog_filetypes = [("Python files", ".py .pyw .pyi"), ("all files", ".*")] REMOTE_PATH_MARKER = " :: " PYTHON_EXTENSIONS = {"py", "pyw", "pyi"} PYTHONLIKE_EXTENSIONS = set() logger = logging.getLogger(__name__) class Editor(ttk.Frame): def __init__(self, master): ttk.Frame.__init__(self, master) assert isinstance(master, EditorNotebook) self.notebook = master # type: EditorNotebook # parent of codeview will be workbench so that it can be maximized self._code_view = CodeView( get_workbench(), propose_remove_line_numbers=True, font="EditorFont" ) get_workbench().event_generate( "EditorTextCreated", editor=self, text_widget=self.get_text_widget() ) self._code_view.grid(row=0, column=0, sticky=tk.NSEW, in_=self) self._code_view.home_widget = self # don't forget home self.maximizable_widget = self._code_view self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self._filename = None self._last_known_mtime = None self._asking_about_external_change = False self._code_view.text.bind("<>", self._on_text_modified, True) self._code_view.text.bind("<>", self._on_text_change, True) self._code_view.text.bind("", self._control_tab, True) get_workbench().bind("DebuggerResponse", self._listen_debugger_progress, True) get_workbench().bind("ToplevelResponse", self._listen_for_toplevel_response, True) self.update_appearance() def get_text_widget(self): return self._code_view.text def get_code_view(self): # TODO: try to get rid of this return self._code_view def get_filename(self, try_hard=False): if self._filename is None and try_hard: self.save_file() return self._filename def get_title(self): if self.get_filename() is None: result = "" elif is_remote_path(self.get_filename()): path = extract_target_path(self.get_filename()) name = path.split("/")[-1] result = "[ " + name + " ]" else: result = os.path.basename(self.get_filename()) if self.is_modified(): result += " *" return result def check_for_external_changes(self): if self._asking_about_external_change: # otherwise method will be re-entered when focus # changes because of message box return if self._filename is None: return if is_remote_path(self._filename): return try: self._asking_about_external_change = True if self._last_known_mtime is None: return elif not os.path.exists(self._filename): self.master.select(self) if messagebox.askyesno( tr("File is gone"), tr("Looks like '%s' was deleted or moved outside of the editor.") % self._filename + "\n\n" + tr("Do you want to also close the editor?"), master=self, ): self.master.close_editor(self) else: self.get_text_widget().edit_modified(True) self._last_known_mtime = None elif os.path.getmtime(self._filename) != self._last_known_mtime: self.master.select(self) if messagebox.askyesno( tr("External modification"), tr("Looks like '%s' was modified outside the editor.") % self._filename + "\n\n" + tr( "Do you want to discard current editor content and reload the file from disk?" ), master=self, ): self._load_file(self._filename, keep_undo=True) else: self._last_known_mtime = os.path.getmtime(self._filename) finally: self._asking_about_external_change = False def get_long_description(self): if self._filename is None: result = "" else: result = self._filename try: index = self._code_view.text.index("insert") if index and "." in index: line, col = index.split(".") result += " @ {} : {}".format(line, int(col) + 1) except Exception: exception("Finding cursor location") return result def _load_file(self, filename, keep_undo=False): try: if is_remote_path(filename): result = self._load_remote_file(filename) else: result = self._load_local_file(filename, keep_undo) if not result: return False except BinaryFileException: messagebox.showerror( "Problem", "%s doesn't look like a text file" % filename, master=self ) return False except SyntaxError as e: assert "encoding" in str(e).lower() messagebox.showerror( "Problem loading file", "This file seems to have problems with encoding.\n\n" + "Make sure it is in UTF-8 or contains proper encoding hint.", master=self, ) return False self.update_appearance() return True def _load_local_file(self, filename, keep_undo=False): with open(filename, "rb") as fp: source = fp.read() # Make sure Windows filenames have proper format filename = normpath_with_actual_case(filename) self._filename = filename self.update_file_type() self._last_known_mtime = os.path.getmtime(self._filename) get_workbench().event_generate("Open", editor=self, filename=filename) if not self._code_view.set_content_as_bytes(source, keep_undo): return False self.get_text_widget().edit_modified(False) self._code_view.focus_set() self.master.remember_recent_file(filename) return True def _load_remote_file(self, filename): self._filename = filename self.update_file_type() self._code_view.set_content("") self._code_view.text.set_read_only(True) target_filename = extract_target_path(self._filename) self.update_title() response = get_runner().send_command_and_wait( InlineCommand( "read_file", path=target_filename, description=tr("Loading %s") % target_filename ), dialog_title=tr("Loading"), ) if response.get("error"): # TODO: make it softer raise RuntimeError(response["error"]) content = response["content_bytes"] self._code_view.text.set_read_only(False) if not self._code_view.set_content_as_bytes(content): return False self.get_text_widget().edit_modified(False) self.update_title() return True def is_modified(self): return bool(self._code_view.text.edit_modified()) def save_file_enabled(self): return self.is_modified() or not self.get_filename() def save_file(self, ask_filename=False, save_copy=False, node=None): if self._filename is not None and not ask_filename: save_filename = self._filename get_workbench().event_generate("Save", editor=self, filename=save_filename) else: save_filename = self.ask_new_path(node) if not save_filename: return None if self.notebook.get_editor(save_filename) is not None: messagebox.showerror( "File is open", "This file is already open in Thonny.\n\n" "If you want to save with this name,\n" "close the existing editor first!", master=get_workbench(), ) return None get_workbench().event_generate( "SaveAs", editor=self, filename=save_filename, save_copy=save_copy ) content_bytes = self._code_view.get_content_as_bytes() if is_remote_path(save_filename): result = self.write_remote_file(save_filename, content_bytes, save_copy) else: result = self.write_local_file(save_filename, content_bytes, save_copy) if not result: return None if not save_copy: self._filename = save_filename self.update_file_type() self.update_title() return save_filename def write_local_file(self, save_filename, content_bytes, save_copy): try: f = open(save_filename, mode="wb") f.write(content_bytes) f.flush() # Force writes on disk, see https://learn.adafruit.com/adafruit-circuit-playground-express/creating-and-editing-code#1-use-an-editor-that-writes-out-the-file-completely-when-you-save-it os.fsync(f) f.close() if not save_copy or save_filename == self._filename: self._last_known_mtime = os.path.getmtime(save_filename) get_workbench().event_generate( "LocalFileOperation", path=save_filename, operation="save" ) except PermissionError: messagebox.showerror( "Permission Error", "Looks like this file or folder is not writable.", master=self ) return False if not save_copy or save_filename == self._filename: self.master.remember_recent_file(save_filename) if not save_copy or save_filename == self._filename: self._code_view.text.edit_modified(False) return True def update_file_type(self): if self._filename is None: self._code_view.set_file_type(None) else: ext = self._filename.split(".")[-1].lower() if ext in PYTHON_EXTENSIONS: file_type = "python" elif ext in PYTHONLIKE_EXTENSIONS: file_type = "pythonlike" else: file_type = None self._code_view.set_file_type(file_type) self.update_appearance() def write_remote_file(self, save_filename, content_bytes, save_copy): if get_runner().ready_for_remote_file_operations(show_message=True): target_filename = extract_target_path(save_filename) get_runner().send_command_and_wait( InlineCommand( "write_file", path=target_filename, content_bytes=content_bytes, editor_id=id(self), blocking=True, description=tr("Saving to %s") % target_filename, ), dialog_title=tr("Saving"), ) if not save_copy: self._code_view.text.edit_modified(False) self.update_title() # NB! edit_modified is not falsed yet! get_workbench().event_generate( "RemoteFileOperation", path=target_filename, operation="save" ) get_workbench().event_generate("RemoteFilesChanged") return True else: return False def ask_new_path(self, node=None): if node is None: node = choose_node_for_file_operations(self.winfo_toplevel(), "Where to save to?") if not node: return None if node == "local": return self.ask_new_local_path() else: assert node == "remote" return self.ask_new_remote_path() def ask_new_remote_path(self): target_path = ask_backend_path(self.winfo_toplevel(), "save") if target_path: return make_remote_path(target_path) else: return None def ask_new_local_path(self): if self._filename is None: initialdir = get_workbench().get_local_cwd() initialfile = None else: initialdir = os.path.dirname(self._filename) initialfile = os.path.basename(self._filename) # http://tkinter.unpythonic.net/wiki/tkFileDialog new_filename = asksaveasfilename( filetypes=_dialog_filetypes, defaultextension=".py", initialdir=initialdir, initialfile=initialfile, parent=get_workbench(), ) # Different tkinter versions may return different values if new_filename in ["", (), None]: return None # Seems that in some Python versions defaultextension # acts funny if new_filename.lower().endswith(".py.py"): new_filename = new_filename[:-3] if running_on_windows(): # may have /-s instead of \-s and wrong case new_filename = os.path.join( normpath_with_actual_case(os.path.dirname(new_filename)), os.path.basename(new_filename), ) if new_filename.endswith(".py"): base = os.path.basename(new_filename) mod_name = base[:-3].lower() if running_on_windows(): mod_name = mod_name.lower() if mod_name in [ "math", "turtle", "random", "statistics", "pygame", "matplotlib", "numpy", ]: # More proper name analysis will be performed by ProgramNamingAnalyzer if not tk.messagebox.askyesno( "Potential problem", "If you name your script '%s', " % base + "you won't be able to import the library module named '%s'" % mod_name + ".\n\n" + "Do you still want to use this name for your script?", master=self, ): return self.ask_new_local_path() return new_filename def show(self): self.master.select(self) def update_appearance(self): self._code_view.set_gutter_visibility( get_workbench().get_option("view.show_line_numbers") or get_workbench().in_simple_mode() ) self._code_view.set_line_length_margin( get_workbench().get_option("view.recommended_line_length") ) self._code_view.text.update_tabs() self._code_view.text.event_generate("<>") def _listen_debugger_progress(self, event): # Go read-only # TODO: check whether this module is active? self._code_view.text.set_read_only(True) def _listen_for_toplevel_response(self, event: ToplevelResponse) -> None: self._code_view.text.set_read_only(False) def _control_tab(self, event): if event.state & 1: # shift was pressed direction = -1 else: direction = 1 self.master.select_next_prev_editor(direction) return "break" def _shift_control_tab(self, event): self.master.select_next_prev_editor(-1) return "break" def select_range(self, text_range): self._code_view.select_range(text_range) def select_line(self, lineno, col_offset=None): self._code_view.select_range(TextRange(lineno, 0, lineno + 1, 0)) self.see_line(lineno) if col_offset is None: col_offset = 0 self.get_text_widget().mark_set("insert", "%d.%d" % (lineno, col_offset)) def see_line(self, lineno): # first see an earlier line in order to push target line downwards self._code_view.text.see("%d.0" % max(lineno - 4, 1)) self._code_view.text.see("%d.0" % lineno) def focus_set(self): self._code_view.focus_set() def is_focused(self): return self.focus_displayof() == self._code_view.text def _on_text_modified(self, event): self.update_title() def update_title(self): try: self.master.update_editor_title(self) except Exception as e: logger.exception("Could not update editor title", exc_info=e) def _on_text_change(self, event): self.update_title() def destroy(self): get_workbench().unbind("DebuggerResponse", self._listen_debugger_progress) get_workbench().unbind("ToplevelResponse", self._listen_for_toplevel_response) ttk.Frame.destroy(self) get_workbench().event_generate( "EditorTextDestroyed", editor=self, text_widget=self.get_text_widget() ) class EditorNotebook(ui_utils.ClosableNotebook): """ Manages opened files / modules """ def __init__(self, master): super().__init__(master, padding=0) get_workbench().set_default("file.reopen_all_files", False) get_workbench().set_default("file.open_files", []) get_workbench().set_default("file.current_file", None) get_workbench().set_default("file.recent_files", []) get_workbench().set_default("view.highlight_current_line", False) get_workbench().set_default("view.show_line_numbers", True) get_workbench().set_default("view.recommended_line_length", 0) get_workbench().set_default("edit.indent_with_tabs", False) self._recent_menu = tk.Menu( get_workbench().get_menu("file"), postcommand=self._update_recent_menu ) self._init_commands() self.enable_traversal() # open files from last session """ TODO: they should go only to recent files for filename in prefs["open_files"].split(";"): if os.path.exists(filename): self._open_file(filename) """ self.update_appearance() # should be in the end, so that it can be detected when # constructor hasn't completed yet self.preferred_size_in_pw = None get_workbench().bind("WindowFocusIn", self.on_focus_window, True) def _init_commands(self): # TODO: do these commands have to be in EditorNotebook ?? # Create a module level function install_editor_notebook ?? # Maybe add them separately, when notebook has been installed ?? get_workbench().add_command( "new_file", "file", tr("New"), self._cmd_new_file, caption=tr("New"), default_sequence=select_sequence("", ""), extra_sequences=[""], group=10, image="new-file", include_in_toolbar=True, ) get_workbench().add_command( "open_file", "file", tr("Open..."), self._cmd_open_file, caption=tr("Load"), default_sequence=select_sequence("", ""), extra_sequences=[""], group=10, image="open-file", include_in_toolbar=True, ) get_workbench().add_command( "recents", "file", tr("Recent files"), group=10, submenu=self._recent_menu ) # http://stackoverflow.com/questions/22907200/remap-default-keybinding-in-tkinter get_workbench().bind_class("Text", "", self._control_o) get_workbench().bind_class("Text", "", self._control_o) rebind_control_a(get_workbench()) get_workbench().add_command( "close_file", "file", tr("Close"), self._cmd_close_file, default_sequence=select_sequence("", ""), extra_sequences=[""], tester=lambda: self.get_current_editor() is not None, group=10, ) get_workbench().add_command( "close_files", "file", tr("Close all"), self.close_tabs, tester=lambda: self.get_current_editor() is not None, default_sequence=select_sequence("", ""), group=10, ) get_workbench().add_command( "save_file", "file", tr("Save"), self._cmd_save_file, caption=tr("Save"), default_sequence=select_sequence("", ""), extra_sequences=[""], tester=self._cmd_save_file_enabled, group=10, image="save-file", include_in_toolbar=True, ) get_workbench().add_command( "save_all_files", "file", tr("Save All files"), self._cmd_save_all_files, caption=tr("Save All files"), default_sequence=select_sequence("", ""), tester=self._cmd_save_all_files_enabled, group=10, ) get_workbench().add_command( "save_file_as", "file", tr("Save as..."), self._cmd_save_file_as, default_sequence=select_sequence("", ""), extra_sequences=[""], tester=lambda: self.get_current_editor() is not None, group=10, ) get_workbench().add_command( "save_copy", "file", tr("Save copy..."), self._cmd_save_copy, tester=lambda: self.get_current_editor() is not None, group=10, ) get_workbench().add_command( "move_rename_file", "file", tr("Move / rename..."), self._cmd_move_rename_file, tester=self._cmd_move_rename_file_enabled, group=10, ) get_workbench().createcommand("::tk::mac::OpenDocument", self._mac_open_document) def load_startup_files(self): """If no filename was sent from command line then load previous files (if setting allows)""" cmd_line_filenames = [ os.path.abspath(name) for name in sys.argv[1:] if os.path.exists(name) ] if len(cmd_line_filenames) > 0: filenames = cmd_line_filenames elif get_workbench().get_option("file.reopen_all_files"): filenames = get_workbench().get_option("file.open_files") elif get_workbench().get_option("file.current_file"): filenames = [get_workbench().get_option("file.current_file")] else: filenames = [] if len(filenames) > 0: for filename in filenames: if os.path.exists(filename): self.show_file(filename) cur_file = get_workbench().get_option("file.current_file") # choose correct active file if len(cmd_line_filenames) > 0: self.show_file(cmd_line_filenames[0]) elif cur_file and os.path.exists(cur_file): self.show_file(cur_file) else: self._cmd_new_file() else: self._cmd_new_file() def save_all_named_editors(self): all_saved = True for editor in self.winfo_children(): if editor.get_filename() and editor.is_modified(): success = editor.save_file() all_saved = all_saved and success return all_saved def remember_recent_file(self, filename): recents = get_workbench().get_option("file.recent_files") if filename in recents: recents.remove(filename) recents.insert(0, filename) relevant_recents = [name for name in recents if os.path.exists(name)][:15] get_workbench().set_option("file.recent_files", relevant_recents) self._update_recent_menu() def _update_recent_menu(self): recents = get_workbench().get_option("file.recent_files") relevant_recents = [ path for path in recents if os.path.exists(path) and not self.file_is_opened(path) ] self._recent_menu.delete(0, "end") for path in relevant_recents: def load(path=path): self.show_file(path) self._recent_menu.insert_command("end", label=path, command=load) def remember_open_files(self): if ( self.get_current_editor() is not None and self.get_current_editor().get_filename() is not None ): current_file = self.get_current_editor().get_filename() else: current_file = None get_workbench().set_option("file.current_file", current_file) open_files = [ editor.get_filename() for editor in self.winfo_children() if editor.get_filename() ] get_workbench().set_option("file.open_files", open_files) def _cmd_new_file(self): new_editor = Editor(self) get_workbench().event_generate("NewFile", editor=new_editor) self.add(new_editor, text=new_editor.get_title()) self.select(new_editor) new_editor.focus_set() def _cmd_open_file(self): node = choose_node_for_file_operations(self.winfo_toplevel(), "Where to open from?") if not node: return if node == "local": initialdir = get_workbench().get_local_cwd() if ( self.get_current_editor() is not None and self.get_current_editor().get_filename() is not None ): initialdir = os.path.dirname(self.get_current_editor().get_filename()) path = askopenfilename( filetypes=_dialog_filetypes, initialdir=initialdir, parent=get_workbench() ) else: assert node == "remote" target_path = ask_backend_path(self.winfo_toplevel(), "open") if not target_path: return path = make_remote_path(target_path) if path: # self.close_single_untitled_unmodified_editor() self.show_file(path, propose_dialog=False) def _control_o(self, event): # http://stackoverflow.com/questions/22907200/remap-default-keybinding-in-tkinter self._cmd_open_file() return "break" def _close_files(self, except_index=None): for tab_index in reversed(range(len(self.winfo_children()))): if except_index is not None and tab_index == except_index: continue else: editor = self.get_child_by_index(tab_index) if self.check_allow_closing(editor): self.forget(editor) editor.destroy() def _cmd_close_file(self): self.close_tab(self.index(self.select())) def close_tab(self, index): editor = self.get_child_by_index(index) if editor: self.close_editor(editor) def close_editor(self, editor, force=False): if not force and not self.check_allow_closing(editor): return self.forget(editor) editor.destroy() def _cmd_save_file(self): if self.get_current_editor(): self.get_current_editor().save_file() self.update_editor_title(self.get_current_editor()) def _cmd_save_file_enabled(self): return self.get_current_editor() and self.get_current_editor().save_file_enabled() def _cmd_save_all_files(self): for editor in self.get_all_editors(): if editor.save_file_enabled() == True: editor.save_file() self.update_editor_title(editor) def _cmd_save_all_files_enabled(self): for editor in self.get_all_editors(): if editor.save_file_enabled() == True: return True return False def _cmd_save_file_as(self, node=None): if not self.get_current_editor(): return self.get_current_editor().save_file(ask_filename=True, node=node) self.update_editor_title(self.get_current_editor()) get_workbench().update_title() def _cmd_save_copy(self): if not self.get_current_editor(): return self.get_current_editor().save_file(ask_filename=True, save_copy=True) self.update_editor_title(self.get_current_editor()) def _cmd_save_file_as_enabled(self): return self.get_current_editor() is not None def _cmd_move_rename_file(self): editor = self.get_current_editor() old_filename = editor.get_filename() assert old_filename is not None if is_remote_path(old_filename): node = "remote" else: node = "local" self._cmd_save_file_as(node=node) if editor.get_filename() != old_filename: if is_remote_path(old_filename): remote_path = extract_target_path(old_filename) get_runner().send_command_and_wait( InlineCommand( "delete", paths=[remote_path], description=tr("Deleting" + remote_path) ), dialog_title=tr("Deleting"), ) get_workbench().event_generate( "RemoteFileOperation", path=remote_path, operation="delete" ) else: os.remove(old_filename) get_workbench().event_generate( "LocalFileOperation", path=old_filename, operation="delete" ) def _cmd_move_rename_file_enabled(self): return self.get_current_editor() and self.get_current_editor().get_filename() is not None def close_single_untitled_unmodified_editor(self): editors = self.winfo_children() if len(editors) == 1 and not editors[0].is_modified() and not editors[0].get_filename(): self._cmd_close_file() def _mac_open_document(self, *args): for arg in args: if isinstance(arg, str) and os.path.exists(arg): self.show_file(arg) get_workbench().become_active_window() def get_current_editor(self): return self.get_current_child() def get_current_editor_content(self): editor = self.get_current_editor() if editor is None: return None else: return editor.get_code_view().get_content() def get_all_editors(self): # When workspace is closing, self.winfo_children() # may return an unexplainable tkinter.Frame return [child for child in self.winfo_children() if isinstance(child, Editor)] def select_next_prev_editor(self, direction): cur_index = self.index(self.select()) next_index = (cur_index + direction) % len(self.tabs()) self.select(self.get_child_by_index(next_index)) def file_is_opened(self, path): for editor in self.get_all_editors(): if editor.get_filename() and is_same_path(path, editor.get_filename()): return True return False def show_file(self, filename, text_range=None, set_focus=True, propose_dialog=True): # self.close_single_untitled_unmodified_editor() try: editor = self.get_editor(filename, True) except PermissionError: logger.exception("Loading " + filename) msg = "Got permission error when trying to load\n" + filename if running_on_mac_os() and propose_dialog: msg += "\n\nTry opening it with File => Open." messagebox.showerror("Permission error", msg, master=self) return None if editor is None: return self.select(editor) if set_focus: editor.focus_set() if text_range is not None: editor.select_range(text_range) return editor def show_remote_file(self, target_filename): if not get_runner().ready_for_remote_file_operations(show_message=True): return None else: return self.show_file(make_remote_path(target_filename)) def show_file_at_line(self, filename, lineno, col_offset=None): editor = self.show_file(filename) editor.select_line(lineno, col_offset) def update_appearance(self): for editor in self.winfo_children(): editor.update_appearance() def update_editor_title(self, editor, title=None): if title is None: title = editor.get_title() try: self.tab(editor, text=title) except TclError: pass try: self.indicate_modification() except Exception: logging.exception("Could not update modification indication") def indicate_modification(self): if not running_on_mac_os(): return atts = self.winfo_toplevel().wm_attributes() if "-modified" in atts: i = atts.index("-modified") mod = atts[i : i + 2] rest = atts[:i] + atts[i + 2 :] else: mod = () rest = atts for editor in self.get_all_editors(): if editor.is_modified(): if mod != ("-modified", 1): self.winfo_toplevel().wm_attributes(*(rest + ("-modified", 1))) break else: if mod == ("-modified", 1): self.winfo_toplevel().wm_attributes(*(rest + ("-modified", 0))) def _open_file(self, filename): editor = Editor(self) if editor._load_file(filename): self.add(editor, text=editor.get_title()) return editor else: editor.destroy() return None def get_editor(self, filename, open_when_necessary=False): if not is_remote_path(filename) and os.path.isfile(filename): filename = normpath_with_actual_case(os.path.abspath(filename)) for child in self.winfo_children(): child_filename = child.get_filename(False) if child_filename == filename: return child if open_when_necessary: return self._open_file(filename) else: return None def check_allow_closing(self, editor=None): if not editor: modified_editors = [e for e in self.winfo_children() if e.is_modified()] else: if not editor.is_modified(): return True else: modified_editors = [editor] if len(modified_editors) == 0: return True message = tr("Do you want to save files before closing?") if editor: message = tr("Do you want to save file before closing?") confirm = messagebox.askyesnocancel( title=tr("Save On Close"), message=message, default=messagebox.YES, master=self ) if confirm: for editor_ in modified_editors: if editor_.get_filename(True): editor_.save_file() else: return False return True elif confirm is None: return False else: return True def on_focus_window(self, event=None): for editor in self.get_all_editors(): editor.check_for_external_changes() def get_current_breakpoints(): result = {} for editor in get_workbench().get_editor_notebook().get_all_editors(): filename = editor.get_filename() if filename: linenos = editor.get_code_view().get_breakpoint_line_numbers() if linenos: result[filename] = linenos return result def get_saved_current_script_filename(force=True): editor = get_workbench().get_editor_notebook().get_current_editor() if not editor: return None filename = editor.get_filename(force) if not filename: return None if editor.is_modified(): filename = editor.save_file() return filename def is_remote_path(s): return REMOTE_PATH_MARKER in s def is_local_path(s): return not is_remote_path(s) def get_target_dirname_from_editor_filename(s): if is_local_path(s): return os.path.dirname(s) else: return universal_dirname(extract_target_path(s)) def extract_target_path(s): assert is_remote_path(s) return s[s.find(REMOTE_PATH_MARKER) + len(REMOTE_PATH_MARKER) :] def make_remote_path(target_path): return get_runner().get_node_label() + REMOTE_PATH_MARKER + target_path thonny-3.3.14/thonny/export.py000066400000000000000000000030221411757431400163370ustar00rootroot00000000000000import tkinter as tk from tkinter import ttk from thonny.languages import tr from thonny.ui_utils import CommonDialog page_specs = [] class ExportDialog(CommonDialog): def __init__(self, master): super().__init__(master=master) self.title("Export file") self.protocol("WM_DELETE_WINDOW", self.on_cancel) mainframe = ttk.Frame(self) mainframe.grid(row=0, column=0, sticky="nsew") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.notebook = ttk.Notebook(mainframe) self.notebook.grid(row=3, column=0, columnspan=3, padx=20, pady=(20, 0), sticky="nsew") self.ok_button = ttk.Button(mainframe, text=tr("OK"), command=self.on_ok) self.ok_button.grid(row=4, column=1, sticky="e", padx=(20, 10), pady=(10, 20)) self.cancel_button = ttk.Button(mainframe, text=tr("Cancel"), command=self.on_cancel) self.cancel_button.grid(row=4, column=2, sticky="e", padx=(0, 20), pady=(10, 20)) mainframe.columnconfigure(0, weight=1) mainframe.rowconfigure(3, weight=1) for title, page_class in page_specs: page = page_class(self.notebook) self.notebook.add(page, text=title) def on_ok(self): print("OK") def on_cancel(self): print("Cancel") self.destroy() class LocalFilesExportPage(ttk.Frame): def __init__(self, master): super().__init__(master=master) def add_export_page(title, page_class): page_specs.append((title, page_class)) thonny-3.3.14/thonny/first_run.py000066400000000000000000000066571411757431400170520ustar00rootroot00000000000000import os.path import tkinter as tk from tkinter import ttk from thonny import is_portable, languages, ui_utils STD_MODE_TEXT = "Standard" RPI_MODE_TEXT = "Raspberry Pi" class FirstRunWindow(tk.Tk): def __init__(self, configuration_manager): super().__init__(className="Thonny") ttk.Style().theme_use(ui_utils.get_default_basic_theme()) self.title("Welcome to Thonny!" + " [portable]" if is_portable() else "") self.protocol("WM_DELETE_WINDOW", self.destroy) self.ok = False self.conf = configuration_manager self.main_frame = ttk.Frame(self) self.main_frame.grid(row=1, column=1, sticky="nsew") self.columnconfigure(1, weight=1) self.rowconfigure(1, weight=1) self.main_frame.rowconfigure(1, weight=1) logo_file = os.path.join(os.path.dirname(__file__), "res", "thonny.png") self.logo = tk.PhotoImage(file=logo_file) logo_label = ttk.Label(self.main_frame, image=self.logo) logo_label.grid(row=1, rowspan=3, column=1, sticky="nsew") self.padx = 50 self.pady = 50 self.language_variable = ui_utils.create_string_var( languages.BASE_LANGUAGE_NAME, self.on_change_language ) self.add_combo( 1, "Language:", self.language_variable, list(languages.LANGUAGES_DICT.values()) ) self.mode_variable = tk.StringVar(value=STD_MODE_TEXT) self.add_combo(2, "Initial settings:", self.mode_variable, [STD_MODE_TEXT, RPI_MODE_TEXT]) ok_button = ttk.Button(self.main_frame, text="Let's go!", command=self.on_ok) ok_button.grid( row=3, column=3, padx=(0, self.padx), pady=(self.pady * 0.7, self.pady), sticky="se" ) self.center() def on_change_language(self): print(self.language_variable.get()) def add_combo(self, row, label_text, variable, values): pady = 7 label = ttk.Label(self.main_frame, text=label_text) label.grid(row=row, column=2, sticky="sw", pady=(pady, 0)) assert isinstance(variable, tk.Variable) combobox = ttk.Combobox( self.main_frame, exportselection=False, textvariable=variable, state="readonly", height=15, width=20, values=values, ) combobox.grid(row=row, column=3, padx=(10, self.padx), sticky="sw", pady=(pady, 0)) def center(self): width = max(self.winfo_reqwidth(), 640) height = max(self.winfo_reqheight(), 300) screen_width = self.winfo_screenwidth() screen_height = self.winfo_screenheight() if screen_width > screen_height * 2: # probably dual monitors screen_width //= 2 left = max(int(screen_width / 2 - width / 2), 0) top = max(int(screen_height / 2 - height / 2), 0) # Positions the window in the center of the page. self.geometry("+{}+{}".format(left, top)) def on_ok(self): if self.mode_variable.get() == RPI_MODE_TEXT: self.conf.set_option("debugger.preferred_debugger", "faster") self.conf.set_option("view.ui_theme", "Raspberry Pi") self.conf.set_option("general.ui_mode", "simple") self.conf.set_option( "general.language", languages.get_language_code_by_name(self.language_variable.get()) ) self.conf.save() self.ok = True self.destroy() thonny-3.3.14/thonny/gridtable.py000066400000000000000000000223071411757431400167620ustar00rootroot00000000000000import math import tkinter as tk from tkinter import ttk from thonny import get_workbench class GridTable(tk.Frame): def __init__(self, master, header_rows, data_row_count, footer_row_count, frozen_column_count): super().__init__(master) self.header_widgets = {} self.data_widgets = {} self.bind("", self.on_configure, True) self.screen_row_height = 22 # TODO: self.first_visible_data_row_no = 0 self.visible_data_row_count = 0 self.header_rows = header_rows self.data_rows = {} self.screen_row_count = 0 self.data_row_count = data_row_count self.column_count = len(self.header_rows[-1]) self.header_row_count = len(header_rows) self.footer_row_count = footer_row_count self.frozen_column_count = frozen_column_count self.update_header_rows() def set_data(self, data_rows): # self.data_rows.update(data_rows) # dict version self.data_rows = data_rows self.data_row_count = len(data_rows) self.update_screen_data() def update_header_rows(self): for row_no in range(self.header_row_count): for col_no in range(self.column_count): w = self.get_header_widget(self.screen_row_count, col_no) w.grid(row=row_no, column=col_no, sticky="nsew", pady=(0, 1), padx=(0, 1)) w.configure(text=self.get_header_value(row_no, col_no)) self.screen_row_count = self.header_row_count def get_data_widget(self, screen_row_no, col_no): if (screen_row_no, col_no) not in self.data_widgets: self.data_widgets[(screen_row_no, col_no)] = self.create_data_widget(col_no) return self.data_widgets[(screen_row_no, col_no)] def get_header_widget(self, row_no, col_no): if (row_no, col_no) not in self.header_widgets: self.header_widgets[(row_no, col_no)] = self.create_header_widget(col_no) return self.header_widgets[(row_no, col_no)] def create_data_widget(self, col_no): if col_no < self.frozen_column_count: background = None else: background = "white" return tk.Label(self, background=background, anchor="e", padx=7, text="") def create_header_widget(self, col_no): return tk.Label(self, anchor="e", padx=7, text="") def set_first_visible_data_row_no(self, n): self.first_visible_data_row_no = max(min(n, self.data_row_count), 0) self.update_screen_data() def _clear_screen_row(self, row_no): for widget in self.grid_slaves(row=row_no): widget.grid_remove() def update_screen_widgets(self, available_screen_height): max_screen_rows = available_screen_height // self.screen_row_height target_screen_row_count = max( min( max_screen_rows, self.header_row_count + self.data_row_count + self.footer_row_count - self.first_visible_data_row_no, ), self.header_row_count + 1 + self.footer_row_count, ) # target_screen_row_count = 30 # remove cells not required anymore ... while self.screen_row_count > target_screen_row_count: # print("removing") self._clear_screen_row(self.screen_row_count - 1) self.screen_row_count -= 1 # ... or add cells that can be shown while self.screen_row_count < target_screen_row_count: # print("adding") for col in range(self.column_count): w = self.get_data_widget(self.screen_row_count, col) w.grid( row=self.screen_row_count, column=col, sticky="nsew", pady=(0, 1), padx=(0, 1) ) self.screen_row_count += 1 self.visible_data_row_count = ( self.screen_row_count - self.header_row_count - self.footer_row_count ) def update_screen_data(self): self.update_screen_widgets(self.winfo_height()) for screen_row_no in range(self.header_row_count, self.screen_row_count): data_row_no = self.first_visible_data_row_no + screen_row_no - self.header_row_count if data_row_no == self.data_row_count: break for col_no in range(self.column_count): w = self.get_data_widget(screen_row_no, col_no) value = self.get_data_value(data_row_no, col_no) if value is None: w.configure(text="") else: w.configure(text=str(value)) def get_data_value(self, row_no, col_no): """lazy dict version: assert 0 <= row_no < self.data_row_count if row_no in self.data_rows: return self.data_rows[row_no][col_no] else: return "" """ return self.data_rows[row_no][col_no] def get_header_value(self, row_no, col_no): return self.header_rows[row_no][col_no] def on_configure(self, event): # query row height _, _, _, height = self.grid_bbox(row=1) if height > 10 and height < 100: "self.screen_row_height = height + 2" # screen_available_height = self.winfo_height() # print("HE", self.winfo_height(), event.height, self.screen_row_height) self.update_screen_widgets(event.height) self.update_screen_data() class ScrollableGridTable(ttk.Frame): def __init__(self, master, header_rows, data_row_count, footer_row_count, frozen_column_count): ttk.Frame.__init__(self, master) # set up scrolling with canvas hscrollbar = ttk.Scrollbar(self, orient=tk.HORIZONTAL) self.canvas = tk.Canvas(self, bd=0, highlightthickness=0, xscrollcommand=hscrollbar.set) get_workbench().bind_all("", self.debug) self.create_infopanel(data_row_count) hscrollbar.config(command=self.canvas.xview) self.canvas.xview_moveto(0) self.canvas.yview_moveto(0) self.canvas.grid(row=0, column=0, columnspan=2, sticky=tk.NSEW) self.infopanel.grid(row=1, column=0, sticky=tk.NSEW) hscrollbar.grid(row=1, column=1, sticky=tk.NSEW) # vertical scrollbar performs virtual scrolling self.vscrollbar = ttk.Scrollbar( self, orient=tk.VERTICAL, command=self._handle_vertical_scroll ) self.vscrollbar.grid(row=0, column=2, sticky=tk.NSEW) self.columnconfigure(1, weight=1) self.rowconfigure(0, weight=1) self.interior = ttk.Frame(self.canvas) self.interior.columnconfigure(0, weight=1) self.interior.rowconfigure(0, weight=1) self.interior_id = self.canvas.create_window(0, 0, window=self.interior, anchor=tk.NW) self.bind("", self._configure_interior, True) self.bind("", self._on_expose, True) self.grid_table = GridTable( self.interior, header_rows, data_row_count, footer_row_count, frozen_column_count ) self.grid_table.grid(row=0, column=0, sticky=tk.NSEW) self._update_vertical_scrollbar() def debug(self, event=None): print("DE", self.vscrollbar.get()) def create_infopanel(self, data_row_count): self.infopanel = ttk.Frame(self) self.size_label = ttk.Label(self.infopanel, text=str(data_row_count) + " rows") self.size_label.grid(row=0, column=0, padx=5) def _update_vertical_scrollbar(self): first = self.grid_table.first_visible_data_row_no / self.grid_table.data_row_count last = first + self.grid_table.visible_data_row_count / self.grid_table.data_row_count # print(first, last, self.grid_table.visible_data_row_count) self.vscrollbar.set(first, last) def _handle_vertical_scroll(self, *args): # print("vscroll", args, self.vscrollbar.get()) if len(args) == 3 and args[0] == "scroll": amount = int(args[1]) unit = args[2] if unit == "pages": amount *= self.grid_table.visible_data_row_count self.grid_table.set_first_visible_data_row_no( self.grid_table.first_visible_data_row_no + amount ) else: assert args[0] == "moveto" pos = max(min(float(args[1]), 1.0), 0.0) top_row = math.floor( (self.grid_table.data_row_count - self.grid_table.visible_data_row_count + 1) * pos ) self.grid_table.set_first_visible_data_row_no(top_row) self._update_vertical_scrollbar() def _on_expose(self, event): self.update_idletasks() self._configure_interior(event) def _configure_interior(self, event): # update the scrollbars to match the size of the inner frame size = (self.interior.winfo_reqwidth(), self.canvas.winfo_height()) self.canvas.config(scrollregion="0 0 %s %s" % size) if ( self.interior.winfo_reqheight() != self.canvas.winfo_height() and self.canvas.winfo_height() > 10 ): # update the interior's height to fit canvas self.canvas.itemconfigure(self.interior_id, height=self.canvas.winfo_height()) self._update_vertical_scrollbar() thonny-3.3.14/thonny/jedi_utils.py000066400000000000000000000106501411757431400171560ustar00rootroot00000000000000""" Utils to handle different jedi versions """ import logging from typing import List, Dict logger = logging.getLogger(__name__) def get_statement_of_position(node, pos): import jedi.parser_utils func = getattr( jedi.parser_utils, "get_statement_of_position", _copy_of_get_statement_of_position ) return func(node, pos) # TODO: try to get rid of this def _copy_of_get_statement_of_position(node, pos): # https://github.com/davidhalter/jedi/commit/9f3a2f93c48eda24e2dcc25e54eb7cc10aa73848 from parso.python import tree for c in node.children: if c.start_pos <= pos <= c.end_pos: if ( c.type not in ( "decorated", "simple_stmt", "suite", "async_stmt", "async_funcdef", ) and not isinstance(c, (tree.Flow, tree.ClassOrFunc)) ): return c else: try: return _copy_of_get_statement_of_position(c, pos) except AttributeError: pass # Must be a non-scope return None def parse_source(source): import parso return parso.parse(source) def get_script_completions(source: str, row: int, column: int, filename: str, sys_path=None): import jedi if _using_older_jedi(jedi): try: script = jedi.Script(source, row, column, filename, sys_path=sys_path) except Exception as e: logger.info("Could not get completions with given sys_path", exc_info=e) script = jedi.Script(source, row, column, filename) completions = script.completions() else: script = jedi.Script(code=source, path=filename, project=_get_new_jedi_project(sys_path)) completions = script.complete(line=row, column=column) return _tweak_completions(completions) def get_interpreter_completions(source: str, namespaces: List[Dict], sys_path=None): import jedi if _using_older_jedi(jedi): try: interpreter = jedi.Interpreter(source, namespaces, sys_path=sys_path) except Exception as e: logger.info("Could not get completions with given sys_path", exc_info=e) interpreter = jedi.Interpreter(source, namespaces) else: # NB! Can't send project for Interpreter in 0.18 # https://github.com/davidhalter/jedi/pull/1734 interpreter = jedi.Interpreter(source, namespaces) if hasattr(interpreter, "completions"): # up to jedi 0.17 return _tweak_completions(interpreter.completions()) else: return _tweak_completions(interpreter.complete()) def _get_new_jedi_project(sys_path): if not sys_path: return None else: import jedi return jedi.Project(path=sys_path[0], added_sys_path=sys_path) def _tweak_completions(completions): # In jedi before 0.16, the name attribute did not contain trailing '=' for argument completions, # since 0.16 it does. Need to ensure similar result for all supported versions. result = [] for completion in completions: name = completion.name complete = completion.complete if complete.endswith("=") and not name.endswith("="): name += "=" result.append( ThonnyCompletion( name=name, complete=complete, type=completion.type, description=completion.description, parent=completion.parent, full_name=completion.full_name, ) ) return result def get_definitions(source: str, row: int, column: int, filename: str): import jedi if _using_older_jedi(jedi): script = jedi.Script(source, row, column, filename) return script.goto_definitions() else: script = jedi.Script(code=source, path=filename) return script.infer(line=row, column=column) def _using_older_jedi(jedi): return jedi.__version__[:4] in ["0.13", "0.14", "0.15", "0.16", "0.17"] class ThonnyCompletion: def __init__(self, name: str, complete: str, type, description, parent, full_name): self.name = name self.complete = complete self.type = type self.description = description self.parent = parent self.full_name = full_name def __getitem__(self, key): return self.__dict__[key] thonny-3.3.14/thonny/languages.py000066400000000000000000000042501411757431400167700ustar00rootroot00000000000000import gettext import logging import os from thonny import get_workbench logger = logging.getLogger(__name__) BASE_LANGUAGE_CODE = "en_US" BASE_LANGUAGE_NAME = "English" # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes LANGUAGES_DICT = { "cs_CZ": "Čeština [BETA]", "de_DE": "Deutsch", "et_EE": "Eesti", BASE_LANGUAGE_CODE: BASE_LANGUAGE_NAME, "es_ES": "Español", "fr_FR": "Français", "it_IT": "Italiano", "lt_LT": "Lietuvių", "hu_HU": "Magyar [BETA]", "nb_NO": "Norsk (Bokmål)", "nn_NO": "Norsk (Nynorsk)", "nl_NL": "Nederlands", "pl_PL": "Polski", "pt_PT": "Português (PT)", "pt_BR": "Português (BR)", "ro_RO": "Român", "ru_RU": "Русский", "sk_SK": "Slovenčina [BETA]", "fi_FI": "Suomi [BETA]", "sv_SE": "Svenska [BETA]", "sq_AL": "Shqip [ALPHA]", "tr_TR": "Türkçe [BETA]", "uk_UA": "Українська", "zh_TW": "繁體中文-TW", "zh_CN": "简体中文 ", "ja_JP": "日本語 [ALPHA]", "hy_AM": "Հայերէն [BETA]", "fa_IR": "[BETA] فارسی", "el_GR": "Ελληνικά", "ko_KR": "한국어 [韓國語] [ALPHA]", } # how many spaces to add to button caption in order to make whole text visible BUTTON_PADDING_SIZES = {"zh_TW": 4, "zh_CN": 4, "ja_JP": 4} _translation = gettext.NullTranslations() def get_button_padding(): code = get_workbench().get_option("general.language") if code in BUTTON_PADDING_SIZES: return BUTTON_PADDING_SIZES[code] * " " else: return "" def get_language_code_by_name(name): for code in LANGUAGES_DICT: if LANGUAGES_DICT[code] == name: return code raise RuntimeError("Unknown language name '%s'" % name) def tr(message: str) -> str: return _translation.gettext(message) def set_language(language_code: str) -> None: global _translation try: path = os.path.join(os.path.dirname(__file__), "locale") _translation = gettext.translation("thonny", path, [language_code]) except Exception as e: logger.exception("Could not set language to '%s", language_code, exc_info=e) _translation = gettext.NullTranslations() thonny-3.3.14/thonny/locale/000077500000000000000000000000001411757431400157065ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/compile_mo.bat000066400000000000000000000001151411757431400205160ustar00rootroot00000000000000cd ..\.. C:\Py3\Scripts\pybabel compile -d thonny/locale/ -D thonny pause thonny-3.3.14/thonny/locale/cs_CZ/000077500000000000000000000000001411757431400167075ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/cs_CZ/LC_MESSAGES/000077500000000000000000000000001411757431400204745ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo000066400000000000000000000602041411757431400223520ustar00rootroot00000000000000Id ]$)9*c &+-!+DM7&   +x9  &/6JY;j     G &<;%x* $Db3 !7 Yd B ".?\ bnu |    )5G= #/70<m r6   ( 0 F8  CG!!!!!!! "" &"2"F"3K""""""" """#zy$;$0%G%Z% m%1{% %%%%&& /&=&nM&,&0&<'W'-'U(o( s(n( (())?)CV)))')) *!*T)* ~**** ***H* +!+'+,+@+_+{+:+++&++,,,0, C, P, [,e,v,,, ,B,,, , -&-<- D- P- ^-k-{- --- - --- -"-. . %.2.9. O. Z.2e./..:./-/ 3/0@/q////-/ / // /00 0)010 H0U0]0f0 y0>000!0 1&1 2%2b2-3/?3o3@)4j4y4"444 444405 65@5 E5O5g5j5r55 5525 55 6D6S6 6677#37W7 \7 f7q7w71|7 7%7V7I788888 U9ta9%9E9$B: g:r:-{:::;:# ;MD;@;;;;;<<<<zO<<< <<"=!5=W=_=o==J==>> ">/>8>>> G>U> g>t> >B? F?Q? j?t?/?"?/?' @#2@V@^@d@&@)@%@.@&A?A^AeAnA~AAA&AAAA BJ$BoBwB}BBBB BBBBBC CCC%C5C"FCiCpCCCCCCCC CCDD3DEEEA"E dEoEDEEEEF+F1F DF NFWXFF>rGGG GG H3(H\HoH HHH9HHHHI)I 1I ZZ*ZZ:h[ [[[[ [![\'\>\NG\ \\ \\\\\\ ]]3*] ^]i] x]K]] u^"^ ^^"^ ^^___@_Z_'k_V_L_7`$G`l`%d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAuthorAuto-completeBackBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?Case sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)ConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating virtual environmentCutDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDeleting %sDesired versionDetailsDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter string to be replaced.ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.Found several '%s' disks. Do you want to choose one yourself?Full screenGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHomeHomepageINSTALLIO fontIf you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesInstallInstall from PyPIInstall from local fileInstall from requirements fileInstalled to:Installed version:InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (generic)MicroPython deviceModifiedMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.Next objectNotesOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Packages' directoryPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!PlotterPlotter visualizes series of numbers printed to the Shell.PortPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRename...Reopen all files from previous sessionReplaceReplace allReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave as...Save copy...SavingSee Help for details.Select AllSelect allSelect empty directory for new virtual environmentSelect existing or create a new empty directorySelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShellShow PlotterShow function calls (frames) in separate windowsShow line numbersSizeSqueezed text (%d characters)StackStart by selecting the package from the left.Step backStep intoStep outStep overStopStop/Restart backendStorage spaceSummarySwitch to regular modeSyntax themeTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUnsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingVariablesVersion historyViewWhich interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!Your interpreter isn't in the list?Zoomall filesblah, blahbytesherelook for your device name, "USB Serial" or "UART"please waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.unclosed_stringuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: cs %d položek(V tomto případě Thonnyho back-end používá stejný interpret, takže oba dialogy spravují stejné balíčky.)(restartujte Thonny po této změně)(používá se po kliknutí na tlačítko Debug na panelu nástrojů)Speciální virtuální prostředí(O BirdseyeO ThonnyRozšířená instalace / upgrade / downgradePovolit automatické dokončování klávesou Tab v ShelluPovolit automatické dokončování klávesou Tab v editoruPovolit pouze jednu instanci ThonnyUmožnit vstupovat do knihoven (například mimo adresář hlavního skriptu)Alternativní interpreter Python 3, nebo virtuální prostředíJste si jisti odinstalací?AsistentAutorAutomatické doplňováníZpětZpět k aktuálnímu snímkuŠpatný adresářBirdseye je Debuger Pythonu, který musí být instalován samostatně. Chcete otevřít nápovědu a dozvědět se více? Birdseye port Projít balíkButrackerještě není možné zavřítNemůžu najít balík ze seznamu:Není možné najít vhodný diskZrušitZrušit proces?Citlivé na velikostZměnit velikost písmaZměnit pracovní adresář na adresář skriptu při Spuštění / Debugu CircuitPython (generic) CircuitPython zařízeníSmazatSmazat shellKliknoutKlik ZavřítZavřít všeZavřít ostatníZakomentovatKonfigurace byla změněna. Restartujte Thonny pro práci v normálním módu. (Pro změnu jděte do "Nástroje - Volby - Obecné)PotvrzeníPřipojte zařízení k počítači a vyberte odpovídající portKopírovatZkopírovat do schránkyKopírujiKopíruji %s do %sNenalezen disk '%s'. Chcete jej najít sám(a)?Není možné najít balík z PyPINení možné najít informace o balíku z PyPIVytvořit nové virtuální prostředíVytvářím virtuální prostředíVyjmoutDebugDebugovat aktuální skriptDebugovat aktuální skript (birdseye)Debugovat aktuální skript (rychlejší)Debugovat aktuální skript (hezčí)Ladící režim (poskytuje detailnější log)Zmenšit velikost písmaZmenšit odstazení o úroveňSmazatMažu %sŽádaná verzeDetailyVlastnosti adresářeVypnout notifikační zvukyvypnout kontrolu (jedno id na řádek)OdpojitChcete přepsat '%s'?Ukotvit uživatelská oknaDokumentaceNezapomeňte, že main.py funguje pouze bez vloženého hlavního skriptu.Hotovo!DolůStáhnout do %sStahuju %s do %sUpravitEditorFont editoruZapište celé čísloVložte řetězec k nahrazeníChybaChybový kód:Chyba:UdálostiVyjímkyKonecUkončit ThonnyRozbalte v ShellExportovat protokoly využití ...SouborVlastnosti souboruSouboryNajítNajít a nahraditNajít balík z PyPINajít:FirmwarePřepnout do editoruPřepnout doPřepnout do shelluMód škálování písmaZ důvodů výkonu se Shell vyhýbá zobrazování velmi dlouhých řádků v plné délce (viz Nástroje => Možnosti => Shell). Zde můžete pracovat s původním fragmentem textu.Nalezeno několik '%s' disků. Chcete jeden vybrat?Celá obrazovkaObecnéHeapHeap mód je zapnutý. Zavřete Heap zobrazení pro jeho vypnutíNápovědaObsah nápovědyZvýrazňovat aktuální řádek (vyžaduje znovuotevření editoru)Zvýraznit lokální proměnnéZvýraznit stejná jménaZvýrazňovat závorkyZvýrazňovat synaxiDomůDomovská stránkaINTALOVATIO písmoPokud jej nemůžete najít, možná musíte nedříve nainstalovat správný ovladač.Pokud nevíte, odkud balíček získat, pak budete pravděpodobně hledat Python Package Index. Začněte zadáním názvu balíčku do vyhledávacího pole výše a stisknutím klávesy ENTER.Pokud to stále chcete, instalujte to z příkazového řádkuZvětšit velikost písmaZvětšit odstazení o úroveňInstalaceInstalovat z PyPIInstalovat z lokálního souboruInstalace ze souboru požadavků (requirements.txt)Nainstalováno do:Nainstalovaná verze:InterpreterPřerušit běhDovnitřNechat otevřený terminál po ukončení Python programuZnámé interpreteryJazykPoslední stabilní verzePoslední verzeNahrátNahrávámUmístění: Protokolovat události využití programuVypadá to že instalujete balík do Thonny. Pokud chcete instalovat Thonny plugin, potom vyberte 'Nástroje - Spáva pluginů' Určitě chcete instalovat %s bro back-end?Vypadá to, že se pokoušíte nainstalovat zastaralý Thonny plug-in (nespecifikuje požadovanou verzi Thonny). Pokud to stále chcete, nainstalujte jej z příkazového řádku.Vytvořeno v University of Tartu, Estonia, s pomocí komunity open-source, Raspberry Pi Foundation a Cybernetica ASUjistěte se že na micro:bit je nainstalován MicroPythonSpravovat balíky pro %sSpravovat balíkySpravovat pluginyMaximalizovat onkoMaximální délka řádky před zalomenímMaximální počet řádkůMůže zpomalit debuging MicroPython (generic)MicroPython zařzeníZměněnoPřesunout do košeVyhoditPřesouvám %s do %sPozn. V nastavení terminálu musí být povoleno automatické zavírání (Profily → Shell → Když skočí z shellu)!Velké hodnoty mohou způsobit nízký výkon!!Restartuje Thonny po těchto změnách!!Některé změny stylu se projeví až po restartu Thonny!!Zřejmě existuje další verze která je kompatibilní s aktuální verzí Thonny. Klikněte na '...' pro výběr verze k instalaci!!Thonny podporuje Python 3.5 a novější!!Je potřeba resatartovat Thonny po instalaci / upgrade / odinstalaci pluginu!NovýNový adresářDo tohoto adresáře budou nainstalovány také nové balíčky. Ostatní místa musí být řízena alternativními prostředky.následující objektPoznámkyOKInspektor objektůOtevřít Asistenta automaticky když má varování pro váš kódOtevřít Asistenta automaticky pokud program skončí vyjímkouOtevřít adresář dat ThonnyOtevřít adresář programu ThonnyOtevřít a zavřít pohled na zásobník automatickyOtevřít prohlížeč historieOtevřít systémový shellOtevřít...Otevře první zobrazení zásobníku a zavře jej, když se program vrátí do hlavního snímku.Volby...VenOsnovaPreskočitPřepsat?Přepsat motiv '%s'BalíkBalík '{}' je požadován pro instalaci a odinstalaci ostatních balíkůAdresář balíkůVložitCestaProvést MyPy kontroluProvést vybranou Pylint kontoluProsím, zkontrolujte zápisPlotterPlotter vykresluje řady čísel vypsaných do ShelluPortPreferovaný debuggerPo skončení programu zobrazí Python REPLNáhledPředhozí objektTisk...Argumenty programuArgumenty programu:Strom programuVlastnostiPyPI stránkyPygame Zero módInterpretery PythonuUkončitOpravdu odinstalovat?Nedávné souboryDoporučené maximum znaků na řádek (nastavte 0 pro vypnutí čáry pro konec řádku)VpředObnovitObvyklý módPřejmenovat...Otevřít všechny soubory z předchozího sezeníNahraditNahradit všeNahradit s:Najít a nahraditNahlásit problémVyžadujeVyžadje:PokračovatBěhSpustit & DebugouvatSpustit / pokračovatSpustit aktuální skriptSpustit aktuální skript v termináluSkoč na kurzorSpustit aktuální skript v termináluUložitUložit jako...Uložit kopii...UkládámDetaily viz nápovědaVybrat všeVybrat všeVyberte prázdný adresář pro nové virtuální prostředíVybrat existující nebo vytvořit nový adresářVybrat interpreterVybraný adresář není prázdný. Vyberte jiný adresář.Poslat EOF / Soft rebootShellZobrat PlotterZobrazit volání funkcí (rámce) v samostatných oknechZobrazit čísla řádkůVelikostZkrátit text (%d znaků)ZásobníkZačněte vybráním balíku vlevo.Krok zpětKrok dovnitřKrok venPřeskočitZastavitZastavit/restartovat backendÚložištěSouhrnPřepnout do běžného móduMotiv syntaxeCíl:TerminálEmulace TermináluOdpověď jeProces stále běží. Opravdu zrušit?Stejný interpreter ve kterém beří Thonny (výchozí)Text nebyl nalezenMotiv & PísmoToto pole je určeno pro vaše pracovní poznámky -- k přiřazení úkolů, úryvků kódu, pro cokoli. Všechno se automaticky uloží a načte, když příště otevřete Thonny. Neváhejte tento text smazat a vytvořte si tak prostor pro vlastní poznámky.Tento počítačToto okno je pro správu pluginů Thonny a jejich závislostí. Pokud chcete instalovat pluginy pro vlatní programy, potom vyberte 'Nástroje - Spravovat balíky'Tento dialog zobrazuje všechny dostupné balíky, ale umožňuje upgrade nebo odinstalaci pouze zTohle je komentářTento balík vyžaduje jinou verzi Thonny:Tento program je ABSOLUTNĚ BEZ ZÁRUK! Jedná se o free software a jeho šíření je vítáno viz https://opensource.org/licenses/MITToto virtuální prostředí automaticky udržuje Thonny. Volby ThonnyThonny pluginyThonny plugin bez požaradkůPřepnout komentářeNástrojeZkusti detekovat port automatickyMód UIUI škálovací faktorMotiv UIZrušte zaškrtnutí, pokud chcete více tradiční uživatelské prostředí.OdkomentovatZpětOdinstalovatNesplnitelné požadavkyNahoruUpgradeZávislosti upgradeUpgrade a odinstalaceNahrát do %sNahrávám %s do %sPoužijte "Stop" příkaz pro ukončení debugginguProměnnéHistorie verzeZobrazeníKterý interpreter, nebo zařízení má Thonny použít pro běh programu?S aktuálním interpreterem zde můžete procházet pouze balíčky. K instalaci, upgradu nebo odinstalaci použijte 'Nástroje → Otevřít systémový shell ...'.Pracuji...Zalomte text (může být pomalý)Musíte zadatMusíte vybrat soubor!Váš interpreter není v seznamu?Zvětšitvšechny souborybla, blabytůzdezkontrolujte název zařízení, např. "USB Serial" nebo "UART"prosím čekejtepodporuje základní ANSI barvy a stylynajít a nainstalovat soubor balíčku (obvykle s příponou .whl, .tar.gz nebo .zip).vyhledejte soubor requirements.txt a nainstalujte balíčky v něm uvedené.unclosed_stringbalíčky z uživatelských stránekvirtuální prostředíthonny-3.3.14/thonny/locale/cs_CZ/LC_MESSAGES/thonny.po000066400000000000000000001340711411757431400223610ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: cs\n" #: thonny/workbench.py:357 msgid "File" msgstr "Soubor" #: thonny/workbench.py:358 msgid "Edit" msgstr "Upravit" #: thonny/workbench.py:359 msgid "View" msgstr "Zobrazení" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "Běh" #: thonny/workbench.py:361 msgid "Tools" msgstr "Nástroje" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "Nápověda" #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "Alternativní interpreter Python 3, nebo virtuální prostředí" #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "Speciální virtuální prostředí(" #: thonny/workbench.py:582 msgid "Exit" msgstr "Konec" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "Zmenšit velikost písma" #: thonny/workbench.py:621 msgid "Focus editor" msgstr "Přepnout do editoru" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "Přepnout do shellu" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "Maximalizovat onko" #: thonny/workbench.py:653 msgid "Full screen" msgstr "Celá obrazovka" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "Argumenty programu" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "O Thonny" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Vytvořeno v\n" "University of Tartu, Estonia,\n" "s pomocí\n" "komunity open-source,\n" "Raspberry Pi Foundation\n" "a Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "Tento program je ABSOLUTNĚ\n" "BEZ ZÁRUK! Jedná se o free\n" "software a jeho šíření je vítáno viz\n" "https://opensource.org/licenses/MIT" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "Historie verze" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "Nahlásit problém" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "Otevřít Asistenta automaticky pokud program skončí vyjímkou" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "Otevřít Asistenta automaticky když má varování pro váš kód" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "Provést vybranou Pylint kontolu" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "Provést MyPy kontrolu" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "vypnout kontrolu (jedno id na řádek)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "Asistent" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "Automatické doplňování" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "Který interpreter, nebo zařízení má Thonny použít\n" "pro běh programu?" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "Interpreter" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "O Birdseye" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Birdseye je Debuger Pythonu, který musí být\n" "instalován samostatně.\n" "Chcete otevřít nápovědu a dozvědět se více?" #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "Debugovat aktuální skript (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "Přepnout komentáře" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "Zakomentovat" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "Odkomentovat" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "Zpět" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "Vpřed" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "Vyjmout" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "Kopírovat" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "Vložit" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "Vybrat vše" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "Skoč na kurzor" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "ještě není možné zavřít" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "Použijte \"Stop\" příkaz pro ukončení debuggingu" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "Ukotvit uživatelská okna" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "Zvýraznit stejná jména" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "Zvýraznit lokální proměnné" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "Zvýrazňovat závorky" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "Zvýrazňovat synaxi" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "Zvýrazňovat aktuální řádek (vyžaduje znovuotevření editoru)" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "Povolit automatické dokončování klávesou Tab v editoru" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "Povolit automatické dokončování klávesou Tab v Shellu" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "Zobrazit čísla řádků" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "Doporučené maximum znaků na řádek\n" "(nastavte 0 pro vypnutí čáry pro konec řádku)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "Editor" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "Exportovat protokoly využití ..." #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "Události" #: thonny/plugins/files.py:551 msgid "Files" msgstr "Soubory" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "Najít a nahradit" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "Najít:" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "Nahradit s:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "Citlivé na velikost" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "Nahoru" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "Dolů" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "Najít" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "Nahradit" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "Najít a nahradit" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "Nahradit vše" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "Vložte řetězec k nahrazení" #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "Text nebyl nalezen" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "Povolit pouze jednu instanci Thonny" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "Otevřít všechny soubory z předchozího sezení" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "Vypnout notifikační zvuky" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "Mód škálování písma" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "Heap mód je zapnutý.\n" "Zavřete Heap zobrazení pro jeho vypnutí" #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "Heap" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "Jazyk" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "Toto pole je určeno pro vaše pracovní poznámky -- k přiřazení úkolů, úryvků kódu, pro cokoli.\n" "\n" "Všechno se automaticky uloží a načte, když příště otevřete Thonny.\n" "\n" "Neváhejte tento text smazat a vytvořte si tak prostor pro vlastní poznámky." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "Poznámky" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "Předhozí objekt" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "následující objekt" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "Inspektor objektů" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "Osnova" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "Pygame Zero mód" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "Najít balík z PyPI" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "Odinstalovat" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "Zavřít" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "Klik " #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "zde" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "Upgrade" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "Instalace" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "Není možné najít balík z PyPI" #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "Poslední stabilní verze" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "Poslední verze" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "Souhrn" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "Autor" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "Domovská stránka" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "Butracker" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "Dokumentace" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "PyPI stránky" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "Vyžaduje" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "Opravdu odinstalovat?" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "Jste si jisti odinstalací?" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "Zpět k\n" "aktuálnímu snímku" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "Proměnné" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "Tento počítač" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "Obnovit" #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "Přepnout do" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "Chyba" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "Musíte vybrat soubor!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "Přepsat?" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "Chcete přepsat '%s'?" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "Nový" #: thonny/editors.py:565 msgid "Open..." msgstr "Otevřít..." #: thonny/editors.py:567 msgid "Load" msgstr "Nahrát" #: thonny/editors.py:576 msgid "Recent files" msgstr "Nedávné soubory" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "Zavřít vše" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "Uložit" #: thonny/editors.py:633 msgid "Save as..." msgstr "Uložit jako..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "Uložit kopii..." #: thonny/editors.py:653 msgid "Rename..." msgstr "Přejmenovat..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "Volby Thonny" #: thonny/running.py:121 msgid "Run current script" msgstr "Spustit aktuální skript" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "Spustit aktuální skript v terminálu" #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "Zastavit/restartovat backend" #: thonny/running.py:166 msgid "Stop" msgstr "Zastavit" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "Přerušit běh" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "Poslat EOF / Soft reboot" #: thonny/running.py:201 msgid "Disconnect" msgstr "Odpojit" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "Známé interpretery" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "Váš interpreter není v seznamu?" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "!Thonny podporuje Python 3.5 a novější!" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "Vytvořit nové virtuální prostředí" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "Vybrat existující nebo vytvořit nový adresář" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "Interpretery Pythonu" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "všechny soubory" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "Vyberte prázdný adresář pro nové virtuální prostředí" #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "Špatný adresář" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "Vybraný adresář není prázdný.\n" "Vyberte jiný adresář." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "Vytvářím virtuální prostředí" #: thonny/shell.py:83 msgid "Clear shell" msgstr "Smazat shell" #: thonny/shell.py:138 msgid "Plotter" msgstr "Plotter" #: thonny/shell.py:269 msgid "Clear" msgstr "Smazat" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "Zobrat Plotter" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "Z důvodů výkonu se Shell vyhýbá zobrazování velmi dlouhých řádků v plné délce (viz Nástroje => Možnosti => Shell).\n" "Zde můžete pracovat s původním fragmentem textu." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "Zalomte text (může být pomalý)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "Zkopírovat do schránky" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "Rozbalte v Shell" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "Zkrátit text (%d znaků)" #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "Plotter vykresluje řady čísel\n" "vypsaných do Shellu" #: thonny/shell.py:1796 msgid "See Help for details." msgstr "Detaily viz nápověda" #: thonny/ui_utils.py:449 msgid "Close others" msgstr "Zavřít ostatní" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "Kopíruji" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "Kopíruji\n" "%s\n" "do\n" "%s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "Zrušit" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "OK" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "Zrušit proces?" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "Proces stále běží.\n" "Opravdu zrušit?" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "Vybrat vše" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "Shell" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "Stejný interpreter ve kterém beří Thonny (výchozí)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "Toto virtuální prostředí automaticky udržuje Thonny.\n" "" #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "Umístění: " #: thonny/workbench.py:592 msgid "Options..." msgstr "Volby..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "Zvětšit velikost písma" #: thonny/workbench.py:664 msgid "Change font size" msgstr "Změnit velikost písma" #: thonny/workbench.py:665 msgid "Zoom" msgstr "Zvětšit" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "Ukončit Thonny" #: thonny/workbench.py:677 msgid "Quit" msgstr "Ukončit" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "Přepsat motiv '%s'" #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "Argumenty programu:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "Obvyklý mód" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "Konfigurace byla změněna. Restartujte Thonny pro \n" "práci v normálním módu.\n" "(Pro změnu jděte do \"Nástroje - Volby - Obecné)" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "Strom programu" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "Vybrat interpreter" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "Pokračovat" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "Spustit / pokračovat" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "Debugovat aktuální skript" #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "Debug" #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "Debugovat aktuální skript (hezčí)" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "Debugovat aktuální skript (rychlejší)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "Přeskočit" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "Preskočit" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "Krok dovnitř" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "Dovnitř" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "Krok ven" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "Ven" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "Krok zpět" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "Zpět" #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "Zásobník" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "Vyjímky" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "Protokolovat události využití programu" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "Ladící režim (poskytuje detailnější log)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "Mód UI" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "UI škálovací faktor" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "!Restartuje Thonny po těchto změnách!" #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "Obecné" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "INTALOVAT" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "Projít balík" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "S aktuálním interpreterem zde můžete procházet pouze balíčky.\n" "K instalaci, upgradu nebo odinstalaci použijte 'Nástroje → Otevřít systémový shell ...'." #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "Adresář balíků" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "Instalovat z PyPI" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "Pokud nevíte, odkud balíček získat, pak budete pravděpodobně hledat Python Package Index. Začněte zadáním názvu balíčku do vyhledávacího pole výše a stisknutím klávesy ENTER." #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "vyhledejte soubor requirements.txt a nainstalujte balíčky v něm uvedené." #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "Kliknout" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "najít a nainstalovat soubor balíčku (obvykle s příponou .whl, .tar.gz nebo .zip)." #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "Upgrade a odinstalace" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "Začněte vybráním balíku vlevo." #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "Cíl:" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "virtuální prostředí" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "balíčky z uživatelských stránek" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "Tento dialog zobrazuje všechny dostupné balíky, ale umožňuje\n" "upgrade nebo odinstalaci pouze z" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "Do tohoto adresáře budou nainstalovány také nové balíčky. Ostatní místa musí být řízena alternativními prostředky." #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "Nainstalovaná verze:" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "Nainstalováno do:" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "Prosím, zkontrolujte zápis" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "Musíte zadat" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "Není možné najít informace o balíku z PyPI" #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "Chybový kód:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "Nemůžu najít balík ze seznamu:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "Balík '{}' je požadován pro instalaci a odinstalaci ostatních balíků" #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "Balík" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "Spravovat balíky pro %s" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "Potvrzení" #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "Vypadá to že instalujete balík do Thonny.\n" "Pokud chcete instalovat Thonny plugin,\n" "potom vyberte 'Nástroje - Spáva pluginů'\n" "\n" "Určitě chcete instalovat %s bro back-end?" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "!Zřejmě existuje další verze která je kompatibilní s aktuální\n" "verzí Thonny. Klikněte na '...' pro výběr verze k instalaci!" #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "Thonny plugin bez požaradků" #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "Vypadá to, že se pokoušíte nainstalovat zastaralý Thonny\n" "plug-in (nespecifikuje požadovanou verzi Thonny).\n" "\n" "Pokud to stále chcete, nainstalujte jej z příkazového řádku." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "Nesplnitelné požadavky" #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "Tento balík vyžaduje jinou verzi Thonny:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "Pokud to stále chcete, instalujte to z příkazového řádku" #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "(V tomto případě Thonnyho back-end používá stejný interpret, takže oba dialogy spravují stejné balíčky.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "!Je potřeba resatartovat Thonny po instalaci / upgrade / odinstalaci pluginu!" #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "Thonny pluginy" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "Rozšířená instalace / upgrade / downgrade" #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "Žádaná verze" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "Závislosti upgrade" #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "Vyžadje:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "Chyba:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "Spravovat balíky" #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "Spravovat pluginy" #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "Otevřít prohlížeč historie" #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "Změnit pracovní adresář na adresář skriptu při Spuštění / Debugu" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "Zobrazit volání funkcí (rámce) v samostatných oknech" #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "Zrušte zaškrtnutí, pokud chcete více tradiční uživatelské prostředí." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "Otevřít a zavřít pohled na zásobník automaticky" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "Otevře první zobrazení zásobníku a zavře jej, když se program vrátí do hlavního snímku." #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "Umožnit vstupovat do knihoven (například mimo adresář hlavního skriptu)" #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "Může zpomalit debuging" #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "Preferovaný debugger" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(používá se po kliknutí na tlačítko Debug na panelu nástrojů)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr " Birdseye port " #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(restartujte Thonny po této změně)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "Spustit & Debugouvat" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "Emulace Terminálu" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "podporuje základní ANSI barvy a styly" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "Maximální počet řádků" #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "!Velké hodnoty mohou způsobit nízký výkon!" #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "Maximální délka řádky před zalomením" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "Spustit aktuální skript v terminálu" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "Po skončení programu zobrazí Python REPL" #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "Nechat otevřený terminál po ukončení Python programu" #: thonny/plugins/terminal_config_page.py:31 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "Pozn. V nastavení terminálu musí být povoleno automatické zavírání\n" "(Profily → Shell → Když skočí z shellu)" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "Terminál" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "Motiv UI" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "Motiv syntaxe" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "Font editoru" #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "IO písmo" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "Náhled" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "Tohle je komentář" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "Odpověď je" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "unclosed_string" #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "bla, bla" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "!Některé změny stylu se projeví až po restartu Thonny!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "Zapište celé číslo" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "Motiv & Písmo" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "Otevřít adresář programu Thonny" #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "Otevřít adresář dat Thonny" #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "Domů" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "Obsah nápovědy" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "CircuitPython zařízení" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "MicroPython zařzení" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "Připojte zařízení k počítači a vyberte odpovídající port" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "zkontrolujte název zařízení, např. \"USB Serial\" nebo \"UART\"" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "Pokud jej nemůžete najít, možná musíte nedříve nainstalovat správný ovladač." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "Port" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "Zkusti detekovat port automaticky" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr " MicroPython (generic)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "Tisk..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "Otevřít systémový shell" #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "Detaily" #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "Instalace ze souboru požadavků (requirements.txt)" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "Instalovat z lokálního souboru" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "Toto okno je pro správu pluginů Thonny a jejich závislostí.\n" "Pokud chcete instalovat pluginy pro vlatní programy, potom vyberte 'Nástroje - Spravovat balíky'" #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr " CircuitPython (generic) " #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "Zvětšit odstazení o úroveň" #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "Zmenšit odstazení o úroveň" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "Přepnout do\n" "běžného\n" "módu" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "Ujistěte se že na micro:bit je nainstalován MicroPython" #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "Nezapomeňte, že main.py funguje pouze bez vloženého hlavního skriptu." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "prosím čekejte" #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "Hotovo!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "Firmware" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "Nenalezen disk '%s'. Chcete jej najít sám(a)?" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "Nalezeno několik '%s' disků. Chcete jeden vybrat?" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "Není možné najít vhodný disk" #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "%d položek" #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "Přesunout do koše" #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "Vyhodit" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "Smazat" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "Nový adresář" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "Vlastnosti" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "Úložiště" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "Cesta" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "Vlastnosti adresáře" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "Vlastnosti souboru" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "bytů" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "Velikost" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "Změněno" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "Mažu %s" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "Přesouvám %s do %s" #: thonny/editors.py:219 msgid "Loading" msgstr "Nahrávám" #: thonny/editors.py:335 msgid "Saving" msgstr "Ukládám" #: thonny/running.py:1408 msgid "Working..." msgstr "Pracuji..." #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "Nahrávám %s do %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "Nahrát do %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "Stahuju %s do %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "Stáhnout do %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "" #: thonny/editors.py:217 msgid "Loading %s" msgstr "" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "" #: thonny/workbench.py:1501 msgid "Device" msgstr "" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "" #: thonny/workdlg.py:212 msgid "Starting" msgstr "" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "" #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "" #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "" #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "" #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "" #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "" #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "" #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "" #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "" #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "" #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "" #: thonny/plugins/heap.py:22 msgid "ID" msgstr "" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "" thonny-3.3.14/thonny/locale/de_DE/000077500000000000000000000000001411757431400166465ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/de_DE/LC_MESSAGES/000077500000000000000000000000001411757431400204335ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/de_DE/LC_MESSAGES/thonny.mo000066400000000000000000000700561411757431400223170ustar00rootroot00000000000000 ]&$)* &A+R-~!D7&K r |   x Xf z&  ;Wo    c vG<%<*b >3[   !3 U `  B     !! !*!%;!a!~! !!! !! !!!! !!!" ""/"5" >" K" V"b"t"=# P#\#e#y##0## ##6#$-$F$\$v$$$$$$F$$C%&&,&2&:&L&d&& && && &&&3&3'F'O'e't'y' '' '''(zH);))*)* <*1J* |******* ++n#+,+0+<+-,-,U,E-J- N-n\- - - - -....?,.Cl...'. //-/J/e////T/ 0000 0+0B0HJ0O00011 11>1 Z1f1:n111&1112 22 .2 ;2 F2P2a2u2z2 2B222 2 2&3'3 /3;3 T3 b3o33 333 3 333 3"344 -4 84 E4 S4^4 e4r44 44 4 424/4)5:<5w55 505555 5 6626-86f6 o6 y66 666 6 666 6667 7>)70h7!7 77 88bl99/9:@: ;;"+;N;]; c;;;;0; ;; ;;<<<&<;< P<]<2p< <<<<L<D'=l= =>>1>CL>#>> > >>>1> ?%?V=?I???@@ @z@*9APdA,AA A5 B?BCSBBB$BOB9OC4C C CCCCDDD4DFD DD DD2E.DE sE}E EEEYE4FLFaFhF}FF FFFFFfG ~GWGGGH HH H/iH4H HHI I-I3IX9XOX Y.YoBYYY YzYCZTZeZuZZZZZGZOZ)N[/x[-[[[[!\7\U\h\ \l\ \ ]]]]-]H]>N]Z]]] ^^!^05^,f^ ^^4^^^$^_%_ 7_C_V_ j_ x_ ______T_>`O` W`e`2w`` `%```a a !a ,a 7aBaXapa&aa'a aab%b9bLb^bobbbbbbb5b&c9c;Pcc cc8ccd-d5d EdOdld%rddd d d ddde e#e3e LeYe^egeze7e3e)e f3fgg\gFh6]hh7ni iiibjwj)~jjjjGjk &k3kBkUkpk uk#kkkkDk *l4lFl`lUhl[lmm#mmnE)n&onn nnnnCn o) oS7o`oopp%d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAdvanced optionsAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAttributesAuthenticationAuthorAuto-completeBackBack to %sBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?CancellingCase sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)Configure %s filesConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating directoryCreating virtual environmentCutDataDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDelete selectedDeletingDeleting %sDesired versionDetailsDeviceDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter name for new directory under %sEnter string to be replaced.ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile name:File propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.Found several '%s' disks. Do you want to choose one yourself?Full screenFunctionFunction call at %sGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHide hidden filesHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHighlight tab charactersHomeHomepageIDINSTALLIO fontIf you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesIndexInstallInstall from PyPIInstall from local fileInstall from requirements fileInstall or update firmwareInstalled to:Installed version:InstallingInstalling '%s'InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLoading %sLocal variablesLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (generic)MicroPython deviceModifiedModuleMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NameNewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.Next objectNot availableNot connectedNot supportedNotesNothing selectedOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen from %sOpen in ThonnyOpen in Thonny's text editorOpen in system default appOpen in system file managerOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Package is not available at micropython.org. Version at PyPI will be installed.Packages' directoryPasswordPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!Please waitPlotterPlotter visualizes series of numbers printed to the Shell.PortPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRename...Reopen all files from previous sessionReplaceReplace allReplace tabs with spacesReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave All filesSave as...Save copy...Save passwordSave to %sSavingSaving to %sSearch on PyPISearch resultsSearchingSee Help for details.Select AllSelect allSelect empty directory for new virtual environmentSelect existing or create a new empty directorySelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShellShow PlotterShow function calls (frames) in separate windowsShow hidden filesShow line numbersSizeSize (bytes)Source codeSqueezed text (%d characters)StackStart by selecting the package from the left.StartingStep backStep intoStep outStep overStopStop/Restart backendStorage infoStorage spaceSummarySwitch to regular modeSyntax themeTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUninstalling '%s'Unsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingVariablesVersion historyVersion to be installedViewWhat to do with a %s file when you double-click it in Thonny's file browser?Which interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!You need to stop your program before launching the package manager.Your interpreter isn't in the list?Zoomall filesblah, blahbytesherelook for your device name, "USB Serial" or "UART"please waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.unclosed_stringuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: de %d Elemente(In diesem Fall verwendet das Thonny Backend denselben Interpreter, sodass beide Dialogfelder dieselben Pakete verwalten.)(Nach dieser Änderung Thonny neu starten)(wird beim Klicken auf die Schaltfläche Debuggen in der Symbolleiste verwendet)Eine besondere virtuelle Umgebung (veraltet)Über Birdseye (Debugger)Über ThonnyErweitertes Installieren / Aktualisierung / DowngradeErweiterte OptionenCodevervollständigung mit der Tabulatortaste in der Shell zulassenCodevervollständigung mit der Tabulatortaste in Editoren zulassenNur eine Instanz von Thonny zulassenWechseln in Bibliotheken erlauben (dh außerhalb des Hauptskriptverzeichnisses)Alternativer Python 3 Interpreter oder virtuelle UmgebungBist du sicher, dass du es deinstallieren möchtest?AssistentAttributeAuthentifizierungAutorAutovervollständigenZurückZurück nach %sZurück zum aktuellen FrameOrdner nicht leerBirdseye ist ein Python-Debugger, der separat installiert werden muss. Möchtest du die Hilfe-Seite öffnen und mehr erfahren?Birdseye portPakete durchsuchenBugtrackerSchließen noch nicht möglichPaketname kann in der Liste nicht gefunden werden:Geeignetes Laufwerk kann nicht gefunden werdenAbbrechenProzess wirklich abbrechen?AbbrechenGroß-/Kleinschreibung beachtenSchriftgröße ändernÄndern Sie das Arbeitsverzeichnis in das Skriptverzeichnis unter "Ausführen / Debuggen"CircuitPython (generic)CircuitPython deviceLeerenKommandozeile leerenKlickKlick SchließenAlle schließenAndere schließenAuskommentierenKonfiguration wurde geändert. Thonny neu starten um im Standard Mode zu arbeiten. (siehe "Extras | Optionen | Allgemeines" wenn Sie sich anders entscheidenKonfiguriere %s DateienBestätigungVerbinden Sie Ihr Gerät mit dem Computer und wählen Sie den relevanten Port unten ausKopierenKopie in ZwischenablageKopierenKopiere %s nach %sKonnte Laufwerk '%s' nicht finden. Möchten das Laufwerk selbst suchen?Das Paket konnte nicht in PyPI gefunden werden.Paketinformation von PyPI kann nicht gefunden werdenNeue Virtuelle Umgebung erzeugenErstelle VerzeichnisVirtuelle Umgebung erzeugenAusschneidenDatenDebuggenAktuelles Skript debuggenAktuelles Skript debuggen (birdseye)Aktuelles Skript debuggen (schneller)Aktuelles Skript debuggen (besser) Debug Mode (liefert detaillierteres Diagnoseprotokoll)Schriftgröße verringernDedent selektierte Zeilen (entf. Leerzeichen am Zeilenanfang)LöschenAusgewählte LöschenLöschen%s löschenGewünschte VersionDetailsGerätOrdner EigenschaftenBenachrichtigungston deaktivierenAbgewählte Prüfungen (eine ID per Zeile)Verbindung unterbrechenWollen Sie '%s' überschreiben?Benutzerfenster andockenDokumentationVergessen Sie nicht, dass main.py nur ohne eingebettetes Hauptskript funktioniert.Erledigt!UntenDownload nach %sDownloading %s nach %sBearbeitenEditorSchriftart Editor Ganzzahl eingebenGebe einen Namen für ein neues Verzeichnis ein unter %sGib die zu ersetzende Zeichenkette ein.ErrorFehler Code:Fehler:EreignisseAusnahmeBeendenThonny schließenKommandozeilenfenster vergrößernProtokoll Dateien exportien ...DateiDateiname:Datei EigenschaftenDateienSuchenSuchen & ErsetzenPaket von PyPI suchenSuchen:FirmwareEditor aktivierenCursor inTerminal aktivierenSchrift-SkalierungsmodusKommandozeile vermeidet aus Perfomanzgründen sehr lange komplette Zeilen (siehe Extras | Optionen | Kommandozeile) Hier können Sie den Original Textabschnitt beeinflussen.Es wurden mehrere '% s' Laufwerke gefunden. Möchten Sie selbst eines auswählen?VollbildFunktionFunktionsaufruf bei %sAllgemeinesHeapHeap-Modus ist an. Schließe Heap-Ansicht um ihn auszuschalten.HilfeHilfe InhaltVersteckte Dateien ausblendenAktuelle Zeile hervorheben (erfordert erneutes Öffnen des Editors)Lokale Variablen hervorhebenÜbereinstimmende Namen hervorhebenKlammern hervorhebenSyntax-Elemente hervorhebenHebe Tabulatorzeichen hervorHomeHomepageIDInstallierenSchriftart TerminalFalls Sie es nicht finden, müssen Sie ggf. erst den richtigen USB-Treiber installieren.Wenn Sie nicht wissen, woher Sie das Paket beziehen können, sollten Sie den Python-Paketindex durchsuchen. Geben Sie den Anfang des Paketnamens in das Suchfeld oben ein und drücken die EINGABETASTE .Falls Sie das trotzdem möchten, dann benutzen Sie bitte die Kommandozeile. Schrift vergrößernAusgewählte Zeilen einrückenIndexInstallierenInstalliere von PyPIInstallieren mit lokalen DateienInstallieren mit requirements.txt DateiInstallieren oder aktualisieren Sie die FirmwareInstalliert inInstallierte VersionInstalliereInstalliere '%s'InterpreterAusführung abbrechenIntoNach Programmende Terminal geöffnet lassen.Bekannte InterpreterSpracheNeueste stabile VersionNeueste VersionLadenwird geladenLade %sLokale VariablenVerzeichnis:Programmereignisse protokollierenEs scheint Sie wollen ein Thonny zugehöriges Paket installieren. Falls es ein Thonny Plug-in ist, dann wählen Sie bitte 'Extras | Verwaltung Plug-ins...' Sind Sie sicher, sie wollen %s für Backend installieren?Möglicherweise versuchen Sie ein veraltetes Thonny Plug-in zu installieren (die erforderliche Thonny Version ist nicht angegeben). Falls Sie das trotzdem möchten, dann benutzen Sie bitte die Kommandozeile.Hergestellt an der Universität Tartu, Estland, mit Hilfe der Open-Source-Community, Raspberry Pi Foundation und Cybernetica ASStellen Sie sicher, dass MicroPython auf Ihrem micro: bit installiert ist.Verwalte Pakete für %sVerwalte Pakete ...Verwalte Plug-ins ...Ansicht maximierenMaximal angezeigte Zeichenlänge bis zum VerschiebenMaximale Anzahl der Zeilen, die beibehalten werden sollen.Kann das Debuggen verzögern.MicroPython (generic)MicroPython deviceGeändertModulIn den Papierkorb verschiebenIn den Papierkorb verschieben%s nach %s verschiebenHinweis: Das automatische Schließen muss in den Einstellungen des Terminals aktiviert sein (Hinweis: Große Werte können zu Geschwindigkeitsverlust führen!Notiz: Thonny nach Änderung dieser Optionen neu starten!Hinweis: Einige Einstellungen ändern sich erst nach einem Neustart von Thonny!Hinweis:Note: Thonny unterstützt Python 3.5 und neuerHinweis: Sie müssen Thonny nach der Installation / Aktualisierung / Deinstallation eines Plug-ins neu starten.NameNeuNeuer OrdnerNeue Pakete werden ebenso in diesen Ordner installiert. Andere Ordner müssen mit alternativen Verfahren verwaltet werden.Nächstes ObjektNicht verfügbarNicht verbundenNicht unterstütztNotizenNichts ausgewähltOKObjektinspektorAssistenten automatisch öffnen, wenn er Warnungen für deinen Code hatAssistenten automatisch öffnen, wenn das Programm mit einer Ausnahme abstürztArbeitsverzeichnis von Thonny öffnen ...Installationsverzeichnis von Thonny öffnen ...Stack View automatisch öffnen und schließenÖffnen von %sÖffnen in ThonnyIn Thonnys Texteditor öffnenÖffnen in der Systemstandard-AppIm Systemdateimanager öffnenLogdatei schreibenSystem Terminal öffnen ...Öffnen ...Stack View beim ersten Aufruf öffnen und bei Programmreturn schließen um zum Hauptfenster zurückzukehren.Optionen...HerausUmrissÜberÜberschreiben?Theme überschreiben ' %s'PaketZur Installation und Deinstallation ist Paket '{}' notwendig. Das Paket ist bei micropython.org nicht verfügbar. Die Version bei PyPI wird installiert.Ordner für PaketePasswortEinfügenPfadMyPy-Überprüfungen durchführenAusgewählte Pylint-Überprüfungen durchführenBitte überprüfen Sie Ihre Rechtschreibung!Bitte wartenDruckenDrucker visualisiert Anzahl von Nummern im Terminal.PortBevorzugter DebuggerZeige Python REPL nach Programmende.VorschauVorheriges ObjektDrucken ...Programm-ArgumenteProgramm Parameter:Programm BaumEigenschaftenPyPi-SeitePygame Zero-ModusPython InterpreterBeendenWirklich deinstallieren?Zuletzt verwendetEmpfohlene maximale Zeilenlänge (Auf 0 einstellen, um die Randlinie auszuschalten.)WiederherstellenRefreshStandard ModeUmbenennen in ...Alle Dateien der vorherigen Sitzung erneut öffnenErsetzenAlle ersetzenErsetze Tabulatoren durch LeerzeichenErsetzen durch:Ersetzen+SuchenProbleme meldenBenötigtBenötigt:FortfahrenAusführenAusführen & DebuggenAusführen / FortfahrenAktuelles Skript ausführenAktuelles Skrit in Terminal ausführenBis Cursor ausführenAktuelles Skript in Terminal ausführenSpeichernSpeicher Alle DateienSpeichern unter ...Kopie speichern ...Passwort SpeichernSpeichern nach %sspeichern läuftSpeichern nach %sSuche auf PyPISuchergebnisseSuchenDetails siehe HilfeAlles auswählenAlles auswählenLeeren Ordner für neue Virtuelle Umgebung auswählenOrdner auswählen oder Neuen erstellenInterpreter auswählenOrdner ist nicht leer, wähle einen Anderen oder breche ab.EOF senden / NeustartKommandozeileDrucker anzeigenFunktionsaufrufe in separaten Fenstern (Frames) anzeigenVersteckte Dateien anzeigenZeilennummern anzeigenGrößeGröße (Bytes)Quellcodegekürzter Text (%d Zeichen)StackBeginne links die Pakete auszuwählenBeginnenZurück schreitenEintretenVerlassenÜberspringenAusführen beendenStopp/Restart ausführenSpeicherinformationSpeicherplatzZusammenfassungWechsle zu Standard ModeSyntax ThemeZielTerminalTerminal-EmulationDie Antwort istDer Prozess läuft noch, wollen Sie wirklich abbrechen?Derselbe Interpreter der Thonny ausführt (Default)Der angegebene Text wurde nicht gefunden!Theme & SchriftartDiese Box ist für Ihre Notizen gedacht (Aufgaben, code snippets, etc.) Text wird automatisch gespeichert und beim nächsten Öffnen von Thonny geladen. Löschen Sie diesen Text um für Ihre Notizen Platz zu schaffen.Dieser ComputerIn diesem Fenster werden Thonny Plug-ins und Ihre Korrespondierenden Pakete verwaltet. Falls Sie Pakete für Ihre eigenen Programme installieren möchten, wählen Sie "Extras → Pakete verwalten ...".Diser Dialog listet all verfügbaren Pakete, aber erlaubt nur Upgrade und Deinstallation vonDies ist ein KommentarDieses Paket erfordert eine andere Version von Thonny:Diese Programm wird ohne Gewährleistung zu Verfügungen gestellt! Es ist freie Software, die du unter bestimmte Bedingungen weiterverbreiten kannst, sehe https://opensource.org/licenses/MIT für weitere InformationDiese Virtuelle Umgebung unterstütz Thonny automatischThonny ExtrasThonny Plug-insMöglicherweise ist eine kompatieble Version für Ihre Thonny Version verfügbar. Klicken Sie den '...' Button um die zu installierende Version auszuwählen.Kommentar umschaltenExtrasVersuche den Port automatisch zu erkennenUI ModeUI SkalierungsfaktorUI ThemeKontrollkästchen deaktivieren, falls klassisches Verhalten erwünscht.EntkommentierenRückgängigDeinstallierenDeinstalliere '%s'Ungeeignete Anforderungen.ObenAktualisierenAbhängigkeiten bei Aktualisierung Upgrade oder InstallierenUpload nach %sUploading %s nach %sVerwende den Befehl "Stop", wenn du das Debuggen abbrechen möchtestVariablenVersions HinweiseZu installierende VersionAnsichtWas mit einer %s Datei machen, wenn Sie in Thonnys Dateibrowser darauf doppelklicken?Welchen Interpreter oder welches Gerät sollte Thonny zum Ausführen Ihres Codes verwenden?Mit dem aktuellen Interpreter können Sie nur die Pakete hier durchsuchen. Zum installieren, upgraden oder deinstallieren öffnen Sie "Extras | Kommandozeile öffnen ..." wird verarbeitet ...Text einklappen (kann langsam sein)Paketname eingebenSelektiere eine Datei!Sie müssen ihr Programm stoppen, bevor Sie den Paketmanager starten.Ihr Interpreter ist nicht aufgeführt?ZoomAlle Dateienbla, blaByteshierSuchen Sie nach Ihrer Geräteschnittstelle "USB Serial" oder "UART"bitte wartenUnterstützt basis ANSI-Farben und -StileFinde und installiere die Pakete (gewöhnlich mit Extension .whl, tar.gz oder .zip)Finde die requirements.txt Datei zu finden und die in Ihr spezifizierten Pakete zu installieren.offene_ZeichenfolgeBenutzerspezifische PaketeVirtuelle Umgebungthonny-3.3.14/thonny/locale/de_DE/LC_MESSAGES/thonny.po000066400000000000000000001430341411757431400223170ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: de\n" #: thonny/workbench.py:357 msgid "File" msgstr "Datei" #: thonny/workbench.py:358 msgid "Edit" msgstr "Bearbeiten" #: thonny/workbench.py:359 msgid "View" msgstr "Ansicht" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "Ausführen" #: thonny/workbench.py:361 msgid "Tools" msgstr "Extras" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "Hilfe" #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "Alternativer Python 3 Interpreter oder virtuelle Umgebung" #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "Eine besondere virtuelle Umgebung (veraltet)" #: thonny/workbench.py:582 msgid "Exit" msgstr "Beenden" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "Schriftgröße verringern" #. Cursor in Editor workspace -> DE: Cursor in Editorfenster aktivieren #: thonny/workbench.py:621 msgid "Focus editor" msgstr "Editor aktivieren" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "Terminal aktivieren" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "Ansicht maximieren" #: thonny/workbench.py:653 msgid "Full screen" msgstr "Vollbild" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "Programm-Argumente" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "Über Thonny" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Hergestellt an der\n" "Universität Tartu, Estland,\n" "mit Hilfe der\n" "Open-Source-Community,\n" "Raspberry Pi Foundation\n" "und Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "Diese Programm wird ohne Gewährleistung\n" "zu Verfügungen gestellt! \n" "Es ist freie Software, die du unter bestimmte \n" "Bedingungen weiterverbreiten kannst,\n" "sehe https://opensource.org/licenses/MIT\n" "für weitere Information" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "Versions Hinweise" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "Probleme melden" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "Assistenten automatisch öffnen, wenn das Programm mit einer Ausnahme abstürzt" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "Assistenten automatisch öffnen, wenn er Warnungen für deinen Code hat" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "Ausgewählte Pylint-Überprüfungen durchführen" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "MyPy-Überprüfungen durchführen" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "Abgewählte Prüfungen (eine ID per Zeile)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "Assistent" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "Autovervollständigen" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "Welchen Interpreter oder welches Gerät sollte Thonny zum Ausführen Ihres Codes verwenden?" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "Interpreter" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "Über Birdseye (Debugger)" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Birdseye ist ein Python-Debugger, der separat installiert werden muss.\n" "\n" "Möchtest du die Hilfe-Seite öffnen und mehr erfahren?" #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "Aktuelles Skript debuggen (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "Kommentar umschalten" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "Auskommentieren" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "Entkommentieren" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "Rückgängig" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "Wiederherstellen" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "Ausschneiden" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "Kopieren" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "Einfügen" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "Alles auswählen" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "Bis Cursor ausführen" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "Schließen noch nicht möglich" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "Verwende den Befehl \"Stop\", wenn du das Debuggen abbrechen möchtest" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "Benutzerfenster andocken" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "Übereinstimmende Namen hervorheben" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "Lokale Variablen hervorheben" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "Klammern hervorheben" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "Syntax-Elemente hervorheben" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "Aktuelle Zeile hervorheben (erfordert erneutes Öffnen des Editors)" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "Codevervollständigung mit der Tabulatortaste in Editoren zulassen" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "Codevervollständigung mit der Tabulatortaste in der Shell zulassen" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "Zeilennummern anzeigen" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "Empfohlene maximale Zeilenlänge\n" "(Auf 0 einstellen, um die Randlinie auszuschalten.)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "Editor" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "Protokoll Dateien exportien ..." #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "Ereignisse" #: thonny/plugins/files.py:551 msgid "Files" msgstr "Dateien" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "Suchen & Ersetzen" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "Suchen:" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "Ersetzen durch:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "Groß-/Kleinschreibung beachten" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "Oben" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "Unten" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "Suchen" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "Ersetzen" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "Ersetzen+Suchen" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "Alle ersetzen" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "Gib die zu ersetzende Zeichenkette ein." #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "Der angegebene Text wurde nicht gefunden!" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "Nur eine Instanz von Thonny zulassen" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "Alle Dateien der vorherigen Sitzung erneut öffnen" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "Benachrichtigungston deaktivieren" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "Schrift-Skalierungsmodus" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "Heap-Modus ist an.\n" "Schließe Heap-Ansicht um ihn auszuschalten." #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "Heap" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "Sprache" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "Diese Box ist für Ihre Notizen gedacht (Aufgaben, code snippets, etc.)\n" "\n" "Text wird automatisch gespeichert und beim nächsten Öffnen von Thonny geladen.\n" "\n" "Löschen Sie diesen Text um für Ihre Notizen Platz zu schaffen." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "Notizen" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "Vorheriges Objekt" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "Nächstes Objekt" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "Objektinspektor" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "Umriss" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "Pygame Zero-Modus" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "Paket von PyPI suchen" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "Deinstallieren" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "Schließen" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "Klick " #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "hier" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "Aktualisieren" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "Installieren" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "Das Paket konnte nicht in PyPI gefunden werden." #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "Neueste stabile Version" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "Neueste Version" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "Zusammenfassung" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "Autor" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "Homepage" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "Bugtracker" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "Dokumentation" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "PyPi-Seite" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "Benötigt" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "Wirklich deinstallieren?" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "Bist du sicher, dass du es deinstallieren möchtest?" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "Zurück zum aktuellen Frame" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "Variablen" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "Dieser Computer" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "Refresh" #. Fokus means cursor active in ... #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "Cursor in" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "Error" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "Selektiere eine Datei!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "Überschreiben?" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "Wollen Sie '%s' überschreiben?" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "Neu" #: thonny/editors.py:565 msgid "Open..." msgstr "Öffnen ..." #: thonny/editors.py:567 msgid "Load" msgstr "Laden" #. Edited files is better. #: thonny/editors.py:576 msgid "Recent files" msgstr "Zuletzt verwendet" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "Alle schließen" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "Speichern" #: thonny/editors.py:633 msgid "Save as..." msgstr "Speichern unter ..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "Kopie speichern ..." #: thonny/editors.py:653 msgid "Rename..." msgstr "Umbenennen in ..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "Thonny Extras" #: thonny/running.py:121 msgid "Run current script" msgstr "Aktuelles Skript ausführen" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "Aktuelles Skrit in Terminal ausführen" #. What means "backend" in English? from beginning? From Line start? #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "Stopp/Restart ausführen" #. I think "Stopp" is better then "Halt". The meaning is maybe the Program stop. #: thonny/running.py:166 msgid "Stop" msgstr "Ausführen beenden" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "Ausführung abbrechen" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "EOF senden / Neustart" #: thonny/running.py:201 msgid "Disconnect" msgstr "Verbindung unterbrechen" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "Bekannte Interpreter" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "Ihr Interpreter ist nicht aufgeführt?" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "Note: Thonny unterstützt Python 3.5 und neuer" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "Neue Virtuelle Umgebung erzeugen" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "Ordner auswählen oder Neuen erstellen" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "Python Interpreter" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "Alle Dateien" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "Leeren Ordner für neue Virtuelle Umgebung auswählen" #. What means 'bad directory' ? Wrong directory or directory tree too deep? etc. #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "Ordner nicht leer" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "Ordner ist nicht leer, wähle einen Anderen oder breche ab." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "Virtuelle Umgebung erzeugen" #. alternative DE: "Terminal leeren" #: thonny/shell.py:83 msgid "Clear shell" msgstr "Kommandozeile leeren" #: thonny/shell.py:138 msgid "Plotter" msgstr "Drucken" #: thonny/shell.py:269 msgid "Clear" msgstr "Leeren" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "Drucker anzeigen" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "Kommandozeile vermeidet aus Perfomanzgründen sehr lange komplette Zeilen (siehe Extras | Optionen | Kommandozeile) \n" "Hier können Sie den Original Textabschnitt beeinflussen." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "Text einklappen (kann langsam sein)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "Kopie in Zwischenablage" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "Kommandozeilenfenster vergrößern" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "gekürzter Text (%d Zeichen)" #. What does this mean? #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "Drucker visualisiert Anzahl von Nummern im Terminal." #: thonny/shell.py:1796 msgid "See Help for details." msgstr "Details siehe Hilfe" #: thonny/ui_utils.py:449 msgid "Close others" msgstr "Andere schließen" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "Kopieren" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "Kopiere\n" "%s\n" "nach\n" "%s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "Abbrechen" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "OK" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "Prozess wirklich abbrechen?" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "Der Prozess läuft noch,\n" "wollen Sie wirklich abbrechen?" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "Alles auswählen" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "Kommandozeile" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "Derselbe Interpreter der Thonny ausführt (Default)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "Diese Virtuelle Umgebung unterstütz Thonny automatisch" #. Not sure what the meaning is. Folder ? #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "Verzeichnis:" #: thonny/workbench.py:592 msgid "Options..." msgstr "Optionen..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "Schrift vergrößern" #: thonny/workbench.py:664 msgid "Change font size" msgstr "Schriftgröße ändern" #: thonny/workbench.py:665 msgid "Zoom" msgstr "Zoom" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "Thonny schließen" #: thonny/workbench.py:677 msgid "Quit" msgstr "Beenden" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "Theme überschreiben ' %s'" #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "Programm Parameter:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "Standard Mode" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "Konfiguration wurde geändert. Thonny neu starten um im Standard Mode zu arbeiten.\n" "(siehe \"Extras | Optionen | Allgemeines\" wenn Sie sich anders entscheiden" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "Programm Baum" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "Interpreter auswählen" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "Fortfahren" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "Ausführen / Fortfahren" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "Aktuelles Skript debuggen" #. = Fehlersuche , but I think Debug is very common in Germany #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "Debuggen" #. nice means better (besser) or only cosmetic (schöner)? #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "Aktuelles Skript debuggen (besser)\n" "" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "Aktuelles Skript debuggen (schneller)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "Überspringen" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "Über" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "Eintreten" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "Into" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "Verlassen" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "Heraus" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "Zurück schreiten" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "Zurück" #. Stapelspeicher #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "Stack" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "Ausnahme" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "Programmereignisse protokollieren" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "Debug Mode (liefert detaillierteres Diagnoseprotokoll)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "UI Mode" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "UI Skalierungsfaktor" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "Notiz: Thonny nach Änderung dieser Optionen neu starten!" #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "Allgemeines" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "Installieren" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "Pakete durchsuchen" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "Mit dem aktuellen Interpreter können Sie nur die Pakete hier durchsuchen.\n" "Zum installieren, upgraden oder deinstallieren öffnen Sie \"Extras | Kommandozeile öffnen ...\" " #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "Ordner für Pakete" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "Installiere von PyPI" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "Wenn Sie nicht wissen, woher Sie das Paket beziehen können, sollten Sie den Python-Paketindex durchsuchen. Geben Sie den Anfang des Paketnamens in das Suchfeld oben ein und drücken die EINGABETASTE\n" "." #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "Finde die requirements.txt Datei zu finden und die in Ihr spezifizierten Pakete zu installieren." #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "Klick" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "Finde und installiere die Pakete (gewöhnlich mit Extension .whl, tar.gz oder .zip)" #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "Upgrade oder Installieren" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "Beginne links die Pakete auszuwählen" #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "Ziel" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "Virtuelle Umgebung" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "Benutzerspezifische Pakete" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "Diser Dialog listet all verfügbaren Pakete, aber erlaubt nur Upgrade und Deinstallation von" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "Neue Pakete werden ebenso in diesen Ordner installiert. Andere Ordner müssen mit alternativen Verfahren verwaltet werden." #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "Installierte Version" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "Installiert in" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "Bitte überprüfen Sie Ihre Rechtschreibung!" #. Means not hit the ENTER key, I hope? #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "Paketname eingeben" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "Paketinformation von PyPI kann nicht gefunden werden" #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "Fehler Code:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "Paketname kann in der Liste nicht gefunden werden:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "Zur Installation und Deinstallation ist Paket '{}' notwendig. " #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "Paket" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "Verwalte Pakete für %s" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "Bestätigung" #. instead of Plug-in could be used (Zusatzprogramm), but I think Plug-in is much better. #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "Es scheint Sie wollen ein Thonny zugehöriges Paket installieren.\n" "Falls es ein Thonny Plug-in ist, dann wählen Sie bitte\n" "'Extras | Verwaltung Plug-ins...'\n" "\n" "Sind Sie sicher, sie wollen %s für Backend installieren?" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "Hinweis:" #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "Möglicherweise ist eine kompatieble Version für Ihre Thonny Version verfügbar. Klicken Sie den '...' Button um die zu installierende Version auszuwählen." #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "Möglicherweise versuchen Sie ein veraltetes Thonny Plug-in \n" "zu installieren (die erforderliche Thonny Version ist nicht angegeben).\n" "\n" "Falls Sie das trotzdem möchten, dann benutzen Sie bitte die Kommandozeile." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "Ungeeignete Anforderungen." #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "Dieses Paket erfordert eine andere Version von Thonny:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "Falls Sie das trotzdem möchten, dann benutzen Sie bitte die Kommandozeile. " #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "(In diesem Fall verwendet das Thonny Backend denselben Interpreter, sodass beide Dialogfelder dieselben Pakete verwalten.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "Hinweis: Sie müssen Thonny nach der Installation / Aktualisierung / Deinstallation eines Plug-ins neu starten." #. or "Zusatzmodule", but I thin Plug-in is more clear. #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "Thonny Plug-ins" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "Erweitertes Installieren / Aktualisierung / Downgrade" #. Ploosible "Gewünschte Version", if this is required by the User. If it's required by Thonny then "Verlangte Version" is better. #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "Gewünschte Version" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "Abhängigkeiten bei Aktualisierung " #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "Benötigt:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "Fehler:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "Verwalte Pakete ..." #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "Verwalte Plug-ins ..." #. What means "replayer"? Is this a kind of Macro recorder to repeat actions? #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "Logdatei schreiben" #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "Ändern Sie das Arbeitsverzeichnis in das Skriptverzeichnis unter \"Ausführen / Debuggen\"" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "Funktionsaufrufe in separaten Fenstern (Frames) anzeigen" #. "traditional experience" not clear? Is this for the behaviour or for the look and feel (Layout)? #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "Kontrollkästchen deaktivieren, falls klassisches Verhalten erwünscht." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "Stack View automatisch öffnen und schließen" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "Stack View beim ersten Aufruf öffnen und bei Programmreturn schließen um zum Hauptfenster zurückzukehren." #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "Wechseln in Bibliotheken erlauben (dh außerhalb des Hauptskriptverzeichnisses)" #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "Kann das Debuggen verzögern." #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "Bevorzugter Debugger" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(wird beim Klicken auf die Schaltfläche Debuggen in der Symbolleiste verwendet)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr "Birdseye port" #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(Nach dieser Änderung Thonny neu starten)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "Ausführen & Debuggen" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "Terminal-Emulation" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "Unterstützt basis ANSI-Farben und -Stile" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "Maximale Anzahl der Zeilen, die beibehalten werden sollen." #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "Hinweis: Große Werte können zu Geschwindigkeitsverlust führen!" #. " Maximale Zeilenlänge bis zum ???" what means squeezing? Is this a kind of shorten by folding ? #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "Maximal angezeigte Zeichenlänge bis zum Verschieben" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "Aktuelles Skript in Terminal ausführen" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "Zeige Python REPL nach Programmende." #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "Nach Programmende Terminal geöffnet lassen." #: thonny/plugins/terminal_config_page.py:31 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "Hinweis: Das automatische Schließen muss in den Einstellungen des Terminals aktiviert sein (" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "Terminal" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "UI Theme" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "Syntax Theme" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "Schriftart Editor " #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "Schriftart Terminal" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "Vorschau" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "Dies ist ein Kommentar" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "Die Antwort ist" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "offene_Zeichenfolge" #. Do you realy mean Blah Blah ??? :-) #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "bla, bla" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "Hinweis: Einige Einstellungen ändern sich erst nach einem Neustart von Thonny!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "Ganzzahl eingeben" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "Theme & Schriftart" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "Installationsverzeichnis von Thonny öffnen ..." #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "Arbeitsverzeichnis von Thonny öffnen ..." #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "Home" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "Hilfe Inhalt" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "CircuitPython device" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "MicroPython device" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "Verbinden Sie Ihr Gerät mit dem Computer und wählen Sie den relevanten Port unten aus" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "Suchen Sie nach Ihrer Geräteschnittstelle \"USB Serial\" oder \"UART\"" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "Falls Sie es nicht finden, müssen Sie ggf. erst den richtigen USB-Treiber installieren." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "Port" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "Versuche den Port automatisch zu erkennen" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr "MicroPython (generic)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "Drucken ..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "System Terminal öffnen ..." #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "Details" #. (requirements.txt) #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "Installieren mit requirements.txt Datei" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "Installieren mit lokalen Dateien" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "In diesem Fenster werden Thonny Plug-ins und Ihre Korrespondierenden Pakete verwaltet.\n" "Falls Sie Pakete für Ihre eigenen Programme installieren möchten, wählen Sie \"Extras → Pakete verwalten ...\"." #. This text is used twice. #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr "CircuitPython (generic)" #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "Ausgewählte Zeilen einrücken" #. evt. "Einzug verkleinern" vs "Einzug vergrößern" wie bei LibreOffice. #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "Dedent selektierte Zeilen (entf. Leerzeichen am Zeilenanfang)" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "Wechsle zu\n" "Standard\n" "Mode" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "Stellen Sie sicher, dass MicroPython auf Ihrem micro: bit installiert ist." #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "Vergessen Sie nicht, dass main.py nur ohne eingebettetes Hauptskript funktioniert." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "bitte warten" #. also "Done!" is fine for most German :-) #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "Erledigt!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "Firmware" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "Konnte Laufwerk '%s' nicht finden. Möchten das Laufwerk selbst suchen?" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "Es wurden mehrere '% s' Laufwerke gefunden. Möchten Sie selbst eines auswählen?" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "Geeignetes Laufwerk kann nicht gefunden werden" #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "%d Elemente" #. same as Trash ? #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "In den Papierkorb verschieben" #. same as recycle bin ? #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "In den Papierkorb verschieben" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "Löschen" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "Neuer Ordner" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "Eigenschaften" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "Speicherplatz" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "Pfad" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "Ordner Eigenschaften" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "Datei Eigenschaften" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "Bytes" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "Größe" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "Geändert" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "%s löschen" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "%s nach %s verschieben" #: thonny/editors.py:219 msgid "Loading" msgstr "wird geladen" #: thonny/editors.py:335 msgid "Saving" msgstr "speichern läuft" #. "Verarbeitung läuft" work ongoing? #: thonny/running.py:1408 msgid "Working..." msgstr "wird verarbeitet ..." #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "Uploading %s nach %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "Upload nach %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "Downloading %s nach %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "Download nach %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "Im Systemdateimanager öffnen" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "Versteckte Dateien ausblenden" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "Versteckte Dateien anzeigen" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "Öffnen in Thonny" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "Öffnen in der Systemstandard-App" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "Konfiguriere %s Dateien" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "Was mit einer %s Datei machen, wenn Sie in Thonnys Dateibrowser darauf doppelklicken?" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "Löschen" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "Erstelle Verzeichnis" #: thonny/editors.py:217 msgid "Loading %s" msgstr "Lade %s" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "Speichern nach %s" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "Speicher Alle Dateien" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "" #: thonny/workbench.py:1501 msgid "Device" msgstr "Gerät" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "Abbrechen" #: thonny/workdlg.py:212 msgid "Starting" msgstr "Beginnen" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "Authentifizierung" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "" #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "Suchergebnisse" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "Suchen" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "Installiere '%s'" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "Deinstalliere '%s'" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "Installiere" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "Nicht unterstützt" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "Nicht verfügbar" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "Sie müssen ihr Programm stoppen, bevor Sie den Paketmanager starten." #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "" #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "Nicht verbunden" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "Erweiterte Optionen" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "Installieren oder aktualisieren Sie die Firmware" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "" #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "Modul" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "Das Paket ist bei micropython.org nicht verfügbar. Die Version bei PyPI wird installiert." #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "" #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "" #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "" #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "Zu installierende Version" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "Bitte warten" #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "Suche auf PyPI" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "Ausgewählte Löschen" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "In Thonnys Texteditor öffnen" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "Speicherinformation" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "Ersetze Tabulatoren durch Leerzeichen" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "Hebe Tabulatorzeichen hervor" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "Name" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "Größe (Bytes)" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "Gebe einen Namen für ein neues Verzeichnis ein unter %s" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "Nichts ausgewählt" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "" #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "Öffnen von %s" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "Speichern nach %s" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "Dateiname:" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "Passwort Speichern" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "Funktionsaufruf bei %s" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "Lokale Variablen" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "Funktion" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "" #: thonny/plugins/heap.py:22 msgid "ID" msgstr "ID" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "Daten" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "Attribute" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "Index" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "Zurück nach %s" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "Passwort" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "Quellcode" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "" thonny-3.3.14/thonny/locale/el_GR/000077500000000000000000000000001411757431400166765ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/el_GR/LC_MESSAGES/000077500000000000000000000000001411757431400204635ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/el_GR/LC_MESSAGES/thonny.mo000066400000000000000000001306731411757431400223510ustar00rootroot00000000000000L ||}]$) *3^ m&z+-! D.7s&      1x?  &5< P[j;{    , GD I [ c <x % * !%!8!U!Y!^!d!y!!!3!""1"8"H" Q"]"m"u"|""!" """ #B#\#b#g#v### ##%##/#'$.B$q$ w$$$ $$ $$$$ $$$$$ %"%(% 1% >% I%U%g%,&/2&=b& &&&&&0&' ''6,'c'}'''''''''L(FM((C\)))7)***!*9*X* s** ** ***3*+ ++&+/+E+T+Y+ a+l+|+ +++~,z1-;---. %.13. e......../ /"/n2//,v000<01-1U1c)222 2n2!3 53 A3 O3 ]3k3q333?3C3454'S4){4 444445&5;5TC5 5555 555H5O'65w66666667 $707:87s7x77&777777 8 8 8*8;8M8a8f8 x8B888 88 8&9)9 19=9 V9 d9q99 999 9 999 9"9: : /: :: G: U:`: g:t:z:: :: : ::2:/;8O;;:;; ;< <0!<R<d<v< {< <<<-<< < <= === 0= ==)K=u=}= ====== =>=n=>0>!> > ? ? @b@@ATA/fAA@PBBB"BBB B CC#C0,C ]CgC lCvCCCCCCC CC2D%7D]DcD lDvDDDLDDD5E EEEECF#YF}F F FF FF1F%F G%GV7GIG GG GGH&HHHWIn'JWJ JK[/K)KsK)LJLMcMYN hNuNNN%NNN* O-4ObO7P&IP'pP2PLPPQiQ-xQQ.Q:QR RS S$3SXS lSvSS"SSES&*U$QUvUU%V*8VcV.vVV;-WfiWKW#XB@XXXXFXQYYWYYY Z:Z?Z[%+[Q[b[v[[[%[F[a+\\;\4\],]]] ]]^)/^BY^5^R^K%_eq_)_W` Y`"f` ``` ``(`Ca Sa`a!{a a a)a'a bb?3bsb$bFb7bb+d_dnd]eue)e e ee{f'f,ff6tg=g)g:h0Nh hhhh%hhiVjtk:dl?l`l@mSm"jm7mHmKn Zn({nnnn!noo o#o'o o.p6pVpeptp#ppp`p3qPr8ti9u-u%u*u"vZ=vEvOv.w@w_wzwww=w*w((x)Qx{yq[{|{J|@|o~~z DOVrFF%$ρ!+E/HxEJȃelyK_hWȅ* 5KZnu. }!͉$D2]%ϊ_hF|`Ë$-?m-.%ތ )"Jm*ύ%)\+#CǏ ',%Tz-#< VJ0Nґ!36j,#ؒ +I+hI R!^tWӔ|+%yΕkH<)r*,.ʗ?= }Y  (>3Q8![<7M!B< '5+Ht~h=`%ĝ$bI@'Т\^Uo$<B[OϥAVaa̦.N_#z/ Χ٧)2Ki%D2w,ө;9uS$9 FI֭ 3L_e[^%EGkL'-:,h%%d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAdvanced optionsAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAttributesAuthenticationAuthorAuto-completeBackBack to %sBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?CancellingCase sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)Configure %s filesConfigure interpreter...ConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating directoryCreating virtual environmentCutDataDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDelete selectedDeletingDeleting %sDesired versionDetailsDeviceDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter name for new directory under %sEnter string to be replaced.Enter the passphrase of your private key for {}Enter your password for {}Environment variables (one KEY=VALUE per line)ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile name:File propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.For uninstalling delete corresponding files.For upgrading simply install the package again.Found several '%s' disks. Do you want to choose one yourself?Full screenFunctionFunction call at %sGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHide hidden filesHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHighlight tab charactersHomeHomepageIDINSTALLIO fontIf last command raised an exception then this view will show the stacktrace.If you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesIndent with tab characters (not recommended for Python)IndexInstallInstall from PyPIInstall from local fileInstall from requirements fileInstall or update firmwareInstalled to:Installed version:InstallingInstalling '%s'InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKeyKey IDKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLoading %sLocal variablesLocationLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (SSH)MicroPython (generic)MicroPython (local)MicroPython deviceModifiedModuleMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! File selection button may not work properly when selecting executables from a virtual environment. In this case choose the 'activate' script instead of the interpreter (or enter the path directly to the box)!NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NB! micropython.org has published version %s of this package and this will be installed by default.NameNewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.New packages will be installed toNext objectNot availableNot connectedNot supportedNotesNothing selectedOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen evaluated values in Object inspectorOpen from %sOpen in ThonnyOpen in Thonny's text editorOpen in system default appOpen in system file managerOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Package is not available at micropython.org. Version at PyPI will be installed.Package manager is not available for this interpreterPackages' directoryPasswordPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!Please waitPlotterPlotter visualizes series of numbers printed to the Shell.PortPort or WebREPLPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython executablePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRemote Python 3 (SSH)Rename...Reopen all files from previous sessionReplaceReplace allReplace tabs with spacesReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave All filesSave as...Save copy...Save passwordSave to %sSavingSaving to %sScopeSearch on PyPISearch resultsSearchingSee Help for details.Select AllSelect allSelect an item and try again!Select empty directory for new virtual environmentSelect existing or create a new empty directorySelect if the file dialogs end up behind the main windowSelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShadowed items (not importable):ShellShow PlotterShow function calls (frames) in separate windowsShow hidden filesShow line numbersSizeSize (bytes)Source codeSqueezed text (%d characters)StackStart by selecting the package from the left.StartingStep backStep intoStep outStep overStopStop/Restart backendStorage infoStorage spaceStorage space on this drive or filesystemSummarySwitch to regular modeSyntax themeTarget device locationTarget device modelTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The representation above is an approximate value of this float. The exact stored value is %s which is about %sThe same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis dialog lists top-level modules from following directories: This is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUninstalling '%s'Unsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpgrading '%s'Upload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingUse Tk file dialogs instead of ZenityValueValue IDVariablesVersion historyVersion to be installedViewWhat to do with a %s file when you double-click it in Thonny's file browser?Which interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!You need to stop your program before launching the package manager.Your interpreter isn't in the list?Zoomall filesblah, blahbytesfree spaceherelook for your device name, "USB Serial" or "UART"no absolute lib directory in sys.pathplease waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.total spaceunclosed_stringused spaceuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: el %d στοιχεία(Σε αυτήν την περίπτωση, το back-end του Thonny χρησιμοποιεί τον ίδιο διερμηνευτή, επομένως και τα δύο παράθυρα διαχειρίζονται τα ίδια πακέτα.)(επανεκιννήστε το Thonny μετά από αυτήν την αλλαγή)(χρησιμοποιείται όταν κάνετε κλικ στο κουμπί Αποσφαλμάτωση)Ένα ειδικό εικονικό περιβάλλον (προς κατάργηση)Σχετικά με τo BirdseyeΣχετικά με το ThonnyΠροχωρημένη εγκατάσταση / αναβάθμιση / υποβάθμισηΠροχωρημένες επιλογέςΝα επιτρέπεται η συμπλήρωση κώδικα με το πλήκτρο Tab στο κέλυφοςΝα επιτρέπεται η συμπλήρωση κώδικα με το πλήκτρο Tab στον επεξεργαστή κειμένουΝα επιτρέπεται μόνο μία εκτέλεση του ThonnyΝα επιτρέπεται η μετάβαση σε βιβλιοθήκες (π.χ. εκτός του καταλόγου του κύριου προγράμματος)Εναλλακτικός διερμηνευτής Python 3 ή εικονικό περιβάλλονΕίσαι σίγουρος ότι θέλεις να το απεγκαταστήσεις;ΒοηθόςΧαρακτηριστικάΤαυτοποίησηΣυντάκτηςΑυτόματη συμπλήρωσηΠίσωΕπιστροφή στο %sΠίσω στο τρέχoν πλαίσιοΠροβληματικός κατάλογοςΤο Birdseye είναι ένας εκσφαλματωτής της Python που πρέπει να εγκατασταθεί ξεχωριστά. Θέλεις να ανοίξω τη σελίδα βοήθειας? Θύρα BirdseyeΠεριήγηση στα πακέταΑνιχνευτής σφαλμάτωνΔεν μπορεί να κλείσει ακόμηΔεν βρέθηκε το όνομα πακέτου από τη λίστα:Δεν είναι δυνατή η εύρεση κατάλληλου δίσκουΑκύρωσηΑκύρωση της διαδικασίας;ΑκύρωσηΔιάκριση πεζών-κεφαλαίωνΑλλαγή μεγέθους γραμματοσειράςΑλλαγή από τον τρέχοντα κατάλογο εργασίας στον κατάλογο του προγράμματος κατά την Eκτέλεση/ΑποσφαλμάτωσηCircuitPython (γενόσημο)Συσκευή CircuitPythonΚαθάρισμαΚαθάρισε το κέλυφοςΚάντε κλικΚλικ ΚλείσιμοΚλείσιμο όλωνΚλείσε τα υπόλοιπαΠροσθήκη σχολίουΟι ρυθμίσεις έχουν ενημερωθεί. Κάντε επανεκκίνηση του Thonny για να αρχίσετε να εργάζεστε σε κανονική λειτουργία. (Δείτε 'Εργαλεία → Επιλογές → Γενικά' αν αλλάξετε γνώμη αργότερα.)Διαμόρφωση %s αρχείωνΡύθμιση διερμηνέα...ΕπιβεβαίωσηΣυνδέστε τη συσκευή σας στον υπολογιστή και επιλέξτε την αντίστοιχη θύρα παρακάτωΑντιγραφήΑντιγραφή στο πρόχειροΑντιγραφήΑντιγραφή από   %s στο   %sΔεν ήταν δυνατή η εύρεση του δίσκου '%s'. Θέλετε να τον εντοπίσετε μόνοι σας;Αδυναμία εύρεσης πακέτου από PyPl.Δεν ήταν δυνατή η εύρεση των πληροφοριών πακέτου από PyPI.Δημιουργία νέου εικονικού περιβάλλοντοςΔημιουργία φακέλουΔημιουργία εικονικού περιβάλλοντοςΑποκοπήΔεδομέναΑποσφαλμάτωσηΑποσφαλμάτωση τρέχοντος προγράμματοςΑποσφαλμάτωση τρέχοντος προγράμματος (birdseye)Αποσφαλμάτωση τρέχοντος προγράμματος (ταχύτερη)Αποσφαλμάτωση τρέχοντος προγράμματος (καλύτερη)Λειτουργία εντοπισμού σφαλμάτων (παρέχει πιο λεπτομερή καταγραφή διαγνωστικών)Μείωση μεγέθους γραμματοσειράςΜείωση εσοχής επιλεγμένων γραμμώνΔιαγραφήΕπιλέχθηκε ΔιαγραφήΔιαγραφήΔιαγραφή %sΕπιθυμητή έκδοσηΛεπτομέρειεςΣυσκευήΙδιότητες καταλόγουΑπενεργοποίηση ηχητικών ειδοποιήσεωνΑπενεργοποιημένοι έλεγχοι (μία ταυτότητα ανά γραμμή)ΑποσύνδεσηΘέλετε να αντικαταστήσετε το '%s';Ενσωμάτωση παραθύρων χρήστηΒιβλιογραφίαΜην ξεχνάτε ότι το main.py λειτουργεί μόνο χωρίς ενσωματωμένο κύριο πρόγραμμα.Ολοκληρώθηκε!ΚάτωΜεταφόρτωση στο %sΛήψη του %s στο %sΕπεξεργασίαΕπεξεργαστής κειμένουΓραμματοσειρά επεξεργαστή κειμένουΕισάγετε έναν ακέραιο αριθμόΕισαγωγή ονόματος για νέο ευρετήριο υπό το %sΕισάγετε συμβολοσειρά για αντικατάστασηΕισαγωγή συνθηματικού για τα προσωπικο κλειδί για το {}Εισαγωγή κωδικού για {}Παράμετροι περιβάλλοντος (ένα KEY=VALUE ανά γραμμή) ΣφάλμαΚωδικός σφάλματος:Σφάλμα:ΓεγονόταΕξαίρεσηΈξοδοςΈξοδος από το ThonnyΕπέκτεινε στο ΚέλυφοςΕξαγωγή αρχείων καταγραφής χρήσης ...ΑρχείοΌνομα αρχείου:Ιδιότητες αρχείουΑρχείαΕύρεσηΕύρεση & ΑντικατάστασηΕύρεση πακέτου από PyPlΕύρεση:YλικολογισμικόΕστίαση στον επεξεργαστή κειμένουΕστίαση σεΕστίαση στο κέλυφοςΛειτουργία κλιμάκωσης γραμματοσειρώνΓια λόγους απόδοσης, το κέλυφος αποφεύγει να εμφανίζει πλήρως τις μεγάλες γραμμές (βλ. Εργαλεία=> Επιλογές=> Κέλυφος). Εδώ μπορείτε να αλληλεπιδράσετε με το αρχικό κειμένο.Για απεγκατάσταση να διαγραφούν τα αντίστοιχα αρχείαΓια αναβάθμιση απλώς να εγκατασταθεί ξανά το πακέτοΒρέθηκαν διάφοροι δίσκοι '%s'. Θέλετε να επιλέξετε έναν εσείς;Πλήρης οθόνηΣυνάρτησηΚλήση συνάρτησης στο %sΓενικάΣωρόςΗ λειτουργία Σωρού είναι ενεργοποιημένη. Κλείστε την προβολή Σωρού για να την απενεργοποιήσετε.ΒοήθειαΠεριεχόμενα ΒοήθειαςΑπόκρυψη κρυφών αρχείωνΕπισήμανε την τρέχουσα γραμμή (απαιτεί εκ νέου άνοιγμα του επεξεργαστή κειμένου)Επισήμανε τοπικές μεταβλητέςΕπισήμανε ονόματα που ταιριάζουνΕπισήμανε παρανθέσειςΕπισήμανε στοιχεία συντακτικούΕπισήμανση στηλοθετών (tabs)ΑρχικήΑρχική σελίδαΤαυτότηταΕΓΚΑΤΑΣΤΑΣΗΓραμματοσειρά Ε/Ε (IO)Αν η τελευταία εντολή δημιούργησε εξαίρεση, τότε αυτή η προβολή θα δείξει πληροφορίες στοίβας (stacktrace)Αν δεν μπορείτε να το βρείτε, ίσως χρειαστεί να εγκαταστήσετε πρώτα τον κατάλληλο οδηγό USB.Εάν δεν γνωρίζετε από πού να κατεβάσετε το πακέτο, τότε κατά πάσα πιθανότητα πρέπει να κάνετε αναζήτηση στον κατάλογο πακέτων Python. Ξεκινήστε εισάγοντας το όνομα του πακέτου στο πλαίσιο αναζήτησης παραπάνω και πατώντας ENTER.Εάν το θέλετε ακόμα, τότε εγκαταστήστε το από τη γραμμή εντολών.Αύξηση μεγέθους γραμματοσειράςΑύξηση εσοχής επιλεγμένων γραμμώνΕσοχές με στηλοθέτες (tabs) (δεν συνίσταται για την Python)ΕυρετήριοΕγκατάστασηΕγκατάσταση από PyPIΕγκατάσταση από τοπικό αρχείοΕγκατάσταση από το αρχείο προδιαγραφώνΕγκατάσταση ή ενημέρωση υλικολογισμικούΕγκαταστήθηκε σε:Εγκατεστημένη έκδοση:ΕγκατάστασηΕγκατάσταση ‘%s’ΔιερμηνευτήςΔιακοπή εκτέλεσηςΠρόςΔιατήρησε το τερματικό ανοικτό μετά την ολοκλήρωση της διεργασίας PythonΚλειδίΤαυτότητα κλειδιούΓνωστοί διερμηνευτέςΓλώσσαΤελευταία σταθερή έκδοσηΤελευταία έκδοσηΦόρτωσηΦόρτωσηΦόρτωση %sΤοπικές μεταβλητέςΤοποθεσίαΤοποθεσία: Καταγραφή συμβάντων κατά την χρήση του προγράμματοςΦαίνεται ότι εγκαθιστάτε ένα πακέτο που σχετίζεται με το Thonny. Εάν σκοπεύατε να εγκαταστήσετε ένα πρόσθετο στο Thonny, τότε θα έπρεπε να επιλέξτε "Εργαλεία → Διαχείριση πρόσθετων ..." Είστε βέβαιοι ότι θέλετε να εγκαταστήσετε το %s για το back-end;Φαίνεται ότι προσπαθείτε να εγκαταστήσετε ένα ξεπερασμένο πρόσθετο του Thonny (δεν καθορίζει την απαιτούμενη έκδοση Thonny). Εάν το θέλετε ακόμα, τότε εγκαταστήστε το από τη γραμμή εντολών.Δημιουργήθηκε στο Πανεπιστήμιο Tartu της Εσθονίας με την βοήθεια της κοινότητας λογισμικού ανοιχτού κώδικα, του Raspberry Pi Foundation και της Cybernetica ASΒεβαιωθείτε ότι το MicroPython έχει εγκατασταθεί στο micro:bit σας.Διαχείριση πακέτων για %sΔιαχείριση πακέτων..Διαχείριση προσθέτων...ΜεγιστοποίησηΜέγιστο μήκος τμήματων γραμμής πριν την συμπίεσηΜέγιστος αριθμός διατηρητέων γραμμώνΜπορεί να κάνει την αποσφαλμάτωση πιο αργή.MicroPython (SSH)MicroPython (γενόσημο)MicroPython (τοπική)Συσκευή MicroPythonΤροποποιήθηκεΕνότηταΜετακίνηση στον Κάδο ΑνακύκλωσηςΜετακίνηση στα ΆχρησταΜετακίνηση του %s στο %sΥπενθύμιση! Το αυτόματο κλείσιμο πρέπει να ενεργοποιηθεί στις ρυθμίσεις του τερματικού (Τερματικό → Προτιμήσεις → Προφίλ → Κέλυφος → Όταν το κέλυφος εξέρχεται)Σημείωση! Το κουμπί επιλογής αρχείου μπορεί να μην λειτουργεί σωστά όταν επιλέγονται εκτελέσιμα από εικονικό περιβάλλον. Σε αυτή την περίπτωση να επιλεγεί το σενάριο "ενεργοποίησης" (activate script) αντί για το διερμηνέα (η καταχώρησε το μονοπάτι απευθείας στο πεδίο)! Υπενθύμιση! Μεγάλες τιμές μπορεί να προκαλέσουν αργή απόδοση!Yπενθύμιση! Επανεκκινήστε το Thonny μετά την αλλαγή αυτών των επιλογών!Υπενθύμιση! Ορισμένα στοιχεία στυλ αλλάζουν μόνο μετά την επανεκκίνηση του Thonny!Υπενθύμιση! Μπορεί να υπάρχει άλλη διαθέσιμη έκδοση που είναι συμβατή με την τρέχουσα έκδοση του Thonny. Κάντε κλικ στο κουμπί '...' για να επιλέξετε την έκδοση που θα εγκατασταθεί.Υπενθύμιση! Το Thonny υποστηρίζει μόνο Python 3.5 και νεότερη έκδοσηΥπενθύμιση! Πρέπει να κάνετε επανεκκίνηση του Thonny μετά την εγκατάσταση / αναβάθμιση / κατάργηση της εγκατάστασης ενός πρόσθετου.Σημείωση! Το micropython.org έχει δημοσιεύσει την έκδοση %s αυτού του πακέτου και αυτό θα εγκατασταθεί από προεπιλογή.ΌνομαΝέοΝέος κατάλογοςΝέα πακέτα θα εγκατασταθούν επίσης σε αυτόν τον κατάλογο. Οι άλλες τοποθεσίεςα διαχειρίζονται με εναλλακτικά μέσα.Τα Νέα πακέτα θα εγκατασταθούν στο/στηΕπόμενο αντικείμενοΔεν διατίθεταιΔεν υπάρχει σύνδεσηΔεν υποστηρίζεταιΣημειώσειςΚαμία επιλογήOKΕπιθεωρητής αντικειμένουΆνοιγμα του Βοηθού αυτόματα όταν υπάρχουν προειδοποιήσεις για τον κώδικαΆνοιγμα του Βοηθού αυτόματα όταν το πρόγραμμα τερματιστεί με εξαίρεσηΆνοιξε τον φάκελο δεδομένων του Thonny ...Άνοιξε τον φάκελο προγραμμάτων του Thonny...Αυτόματο άνοιγμα και κλείσιμο της προβολής της ΣτοίβαςΆνοιξε τις εκτιμημένες τιμές στον επιθεωρητή ΑντικειμένουΆνοιγμα από %sΆνοιγμα στο ThonnyΆνοιγμα στο επεξεργαστή κειμένου του ThonnyΆνοιγμα στην προεπιλεγμένη εφαρμογή του συστήματοςΆνοιγμα στο διαχειριστή αρχείων του συστήματοςΆνοιγμα αναπαραγωγής...Άνοιξε το κέλυφος συστήματοςΆνοιγμαΑνοίγει την προβολή στοίβας κατά την πρώτη κλήση και κλείνει όταν το πρόγραμμα επιστρέψει στο κυρίως πλαίσιο.Επιλογές...ΈξωΠεριεχόμεναπάνω απόΑντικατάσταση;Αντικατάσταση θέματος '%s'ΠακέτοΤο πακέτο '{}' είναι απαραίτητο για την εγκατάσταση και την απεγκατάσταση άλλων πακέτων.Το πακέτο δεν είναι διαθέσιμο στο micropython.org. Θα εγκατασταθεί η έκδοση στο PyPI.Ο διαχειριστής πακέτων δεν είναι διαθέσιμος για αυτόν τον διερμηνέαΚατάλογος πακέτωνΚωδικόςΕπικόλλησηΜονοπάτιΕκτέλεση ελέγχων MyPyΕκτέλεση των επιλεγμένων ελέγχων PylintΕλέγξτε την ορθογραφία σας!Παρακαλώ περιμένετεΣχεδιογράφοςΟ σχεδιαστής απεικονίζει μια σειρά από αριθμούς που εκτυπώνονται στο κέλυφος.ΘύραΘύρα η WebREPLΠροτιμώμενο πρόγραμμα αποσφαλμάτωσηςΠαρουσίαση του Python REPL μετά το τέλος του προγράμματοςΠροεπισκόπησηΠροηγούμενο αντικείμενοΕκτύπωση...Παράμετροι προγράμματοςΠαράμετροι προγράμματος:Δέντρο ΠρογράμματοςΙδιότητεςΣελίδα PyPlΛειτουργία Pygame ZeroΕκτελέσιμο της pythonΔιερμηνευτές PythonΤερματισμόςΣίγουρα απεγκατάσταση;Πρόσφατα αρχείαΣυνιστώμενο μέγιστο μήκος γραμμής (Ρυθμίστε στο 0 για να απενεργοποιήσετε τη γραμμή περιθωρίου)ΕπανάληψηΑνανέωσηΚανονική λειτουργίαΑπομακρυσμένη Python 2 (SSH)Μετονομασία...Άνοιγμα όλων των αρχείων από προηγούμενη συνεδρίαΑντικατάστασηΑντικατάσταση όλωνΑντικατάσταση στηλοθετών(tabs) με κενάΑντικατάσταση με:Αντικαταστάση+ΕύρεσηΑναφορά προβλήματοςΑπαιτείΑπαιτεί:ΣυνέχειαΕκτέλεσηΕκτέλεση & ΑποσφαλμάτωσηΕκτέλεση / ΣυνέχειαΕκτέλεση τρέχοντος προγράμματοςΕκτέλεση τρέχοντος προγράμματος στο τερματικόEκτέλεση μέχρι τον κέρσοραΤρέχον εκτελέσιμο πρόγραμμα στο τερματικόΑποθήκευσηΑποθήκευση Όλων των αρχείωνΑποθήκευση ως...Αποθήκευση αντιγράφου...Αποθήκευση κωδικούΑποθήκευση στο %sΑποθήκευσηΑποθήκευση στο %sΠεδίο εφαρμογήςΑναζήτηση στο PyPIΑναζήτησε αποτελέσματαΑναζήτησηΑνατρέξτε στη Βοήθεια για λεπτομέρειες.Επιλογή ΌλωνΕπιλογή όλωνΕπέλεξε ένα αντικείμενο και προσπάθησε ξανά!Επιλέξτε κενό κατάλογο για νέο εικονικό περιβάλλονΕπιλογή υπάρχοντος ή δημιουργία νέου καταλόγουΕπέλεξε αν ο διάλογος αρχείου καταλήγει πίσω από το κυρίως παράθυροΕπιλογή διερμηνευτήΟ επιλεγμένος κατάλογος δεν είναι κενός. Επιλέξτε άλλο ή ακυρώστε.Αποστολή Τέλους Αρχείου (EOF) / Επανεκκίνηση μέσω λογισμικούΣκιασμένα στοιχεία (με εισακτέα):ΚέλυφοςΕμφάνιση σχεδιογράφουΕμφάνιση κλήσεων συναρτήσεων (πλαισίων) σε ξεχωριστά παράθυραΕμφάνιση κρυφών αρχείωνΕμφάνιση αριθμού γραμμώνΜεγέθοςΜέγεθος (bytes)Πηγαίος κώδικαςΣυμπιεσμένο κείμενο (%d χαρακτήρες)ΣτοίβαΞεκινήστε επιλέγοντας το πακέτο από τα αριστερά.ΈναρξηΟπισθοδρόμησηΕίσοδοςΈξοδοςΠροσπέραση ΣταμάτημαΣταμάτημα/Επανεκκίνηση backendΠληροφορίες μέσων αποθήκευσηςΧώρος αποθήκευσηςΜέσα αποθήκευσης στον οδηγό ή στο σύστημα αρχείωνΠερίληψηΑλλαγή σε κανονική λειτουργίαΘεματικό σύνταξηςΣτόχευσε την τοποθεσία της συσκευήςΣτόχευσε το μοντέλο της συσκευήςΣτόχος:ΤερματικόΠροσομοίωση τερματικούΗ απάντηση είναιΗ διεργασία είναι σε εξέλιξη. Είσαι σίγουρος ότι θέλεις να ακυρώσεις;Η παραπάνω αναπαράσταση είναι μια κατά προσέγγιση τιμή αυτού του float. Η ακριβής αποθηκευμένη τιμή είναι %s που είναι περίπου %sΤον ίδιο διερμηνευτή που χρησιμοποιεί τοThonny (προεπιλογή)Το ζητούμενο κειμενο δεν βρέθηκε!Θέμα & ΓραμματοσειράΑυτό το πλαίσιο προορίζεται για τις σημειώσεις εργασίας σας - οδηγίες , αποσπάσματα κώδικα, οτιδήποτε άλλο. Όλα θα αποθηκευτούν αυτόματα και θα φορτωθούν όταν ανοίξετε το Thonny την επόμενη φορά. Διαγράψτε ελεύθερα αυτό το κείμενο για να δημιουργήσετε χώρο για τις σημειώσεις σας.Αυτός ο υπολογιστήςΑυτός ο διάλογος είναι για τη διαχείριση των πρόσθετων του Thonny και των εξαρτήσεων τους. Αν θέλετε να εγκαταστήσετε πακέτα για τα δικά σας προγράμματα, επιλέξτε "Εργαλεία → Διαχείριση πακέτων ..."Αυτό το παράθυρο διαλόγου εμφανίζει όλα τα διαθέσιμα πακέτα, αλλά επιτρέπει την αναβάθμιση και την απεγκατάσταση μόνο των πακέτων απόΑυτός ο διάλογος αναγράφει τις κορυφαίες ενότητες από τα ακόλουθα ευρετήρια: Αυτό είναι ένα σχόλιοΑυτό το πακέτο απαιτεί διαφορετική έκδοση του Thonny:Αυτό το πρόγραμμα δεν παρέχει ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ! Είναι ελεύθερο λογισμικό και είστε ευπρόσδεκτοι να το αναδιανείμετε υπό ορισμένες προϋποθέσεις, βλ https://opensource.org/licenses/MIT για λεπτομέρειεςΑυτό το εικονικό περιβάλλον συντηρείται αυτόματα από το Thonny.Επιλογές ThonnyΠρόσθετα του ThonnyΠρόσθετο του Thonny χωρίς προδιαγραφέςΕναλλαγή σχολίουΕργαλείαΠροσπαθήστε να εντοπίσετε αυτόματα τη θύραΛειτουργία περιβάλλοντος χρήστη (UI)Παράγοντας κλιμάκωσης περιβάλλοντος χρήστη (UI)Θεματικό UIΑποεπιλέξτε εάν θέλετε μια πιο παραδοσιακή εμπειρία.Αφαίρεση σχολίουΑναίρεσηΑπεγκατάστασηΑπεγκατάσταση ‘%s’Ακατάλληλες προδιαγραφέςΕπάνωΑναβάθμισηΑναβάθμιση εξαρτήσεωνΑναβάθμιση ή απεγκατάστασηΑναβάθμιση ‘%s’Ανέβασμα στο %sΑνέβασμα του %s στο %sΧρησιμοποίηστε την εντολή "Stop" αν θέλετε να σταματήσετε την αποσφαλμάτωσηΧρήση διαλόγων αρχείου Tk αντί για ZenityΤιμήΤαυτότητα τιμήςΜεταβλητέςΙστορικό έκδοσηςΈκδοση προς εγκατάστασηΠροβολήΤι να κάνω με ένα %s αρχείο όταν γίνεται διπλό κλικ στον προβολέα αρχείων του Thonny?Ποιον διερμηνευτή ή συσκευή να χρησιμοποιήσει το Thonny για να τρέξει τον κώδικά σου;Με τον τρέχοντα διερμηνευή μπορείτε μόνο να περιηγηθείτε στα πακέτα. Μεταβείτε σε: 'Εργαλεία → Άνοιξε το κέλυφος συστήματος ...' για εγκατάσταση, αναβάθμιση ή απεγκατάσταση.Επεξεργάζεται...Αναδίπλωση κειμένου (ενδέχεται να είναι αργή)Πρέπει να εισέλθετεΠρέπει να επιλέξετε ενα αρχείο!Πρέπει να σταματήσει το πρόγραμμά σου πριν την έναρξη του διαχειριστή πακέτωνΟ διερμηνευτής σας δεν είναι στην λίστα;Μεγέθυνσηόλα τα αρχείαΜπλα, μπλαbytesελεύθερος χώροςΕδώαναζητήστε το όνομα της συσκευής σας, "USB Serial" ή "UART"δεν υπάρχει απόλυτη βιβλιοθήκη ευρετηρίου στο sys.pathΠαρακαλώ περιμένετευποστηρίζει βασικά χρώματα ANSI και στυλγια να εντοπίσετε και να εγκαταστήσετε το πακέτου(συνήθως με επέκταση .whl, .tar.gz ή .zip).για να εντοπίσετε το αρχείο requirements.txt και να εγκαταστήσετε τα πακέτα που ορίζονται από αυτό.συνολικός χώροςανοιχτή_συμβολοσειράχρησιμοποιούμενος χώροςπακέτα ιστότοπου χρήστηεικονικό περιβάλλονthonny-3.3.14/thonny/locale/el_GR/LC_MESSAGES/thonny.po000066400000000000000000001760521411757431400223550ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: el\n" #: thonny/workbench.py:357 msgid "File" msgstr "Αρχείο" #: thonny/workbench.py:358 msgid "Edit" msgstr "Επεξεργασία" #: thonny/workbench.py:359 msgid "View" msgstr "Προβολή" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "Εκτέλεση" #: thonny/workbench.py:361 msgid "Tools" msgstr "Εργαλεία" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "Βοήθεια" #. Ίσως ο διερμηνευτής να πρέπει να μείνει inerpreter σε παρένθεση #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "Εναλλακτικός διερμηνευτής Python 3 ή εικονικό περιβάλλον" #. Η έννοια του deprecated έχει να κάνει με στοιχεία / λειτουργικότητες που βαίνουν προς κατάργηση στις επόμενες εκδόσεις #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "Ένα ειδικό εικονικό περιβάλλον (προς κατάργηση)" #: thonny/workbench.py:582 msgid "Exit" msgstr "Έξοδος" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "Μείωση μεγέθους γραμματοσειράς" #: thonny/workbench.py:621 msgid "Focus editor" msgstr "Εστίαση στον επεξεργαστή κειμένου" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "Εστίαση στο κέλυφος" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "Μεγιστοποίηση" #: thonny/workbench.py:653 msgid "Full screen" msgstr "Πλήρης οθόνη" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "Παράμετροι προγράμματος" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "Σχετικά με το Thonny" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Δημιουργήθηκε\n" "στο Πανεπιστήμιο Tartu της Εσθονίας\n" "με την βοήθεια της κοινότητας λογισμικού ανοιχτού κώδικα,\n" "του Raspberry Pi Foundation \n" "και της Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "Αυτό το πρόγραμμα δεν παρέχει\n" "ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ!\n" "Είναι ελεύθερο λογισμικό και είστε ευπρόσδεκτοι\n" "να το αναδιανείμετε υπό ορισμένες προϋποθέσεις, βλ\n" "https://opensource.org/licenses/MIT\n" "για λεπτομέρειες" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "Ιστορικό έκδοσης" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "Αναφορά προβλήματος" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "Άνοιγμα του Βοηθού αυτόματα όταν το πρόγραμμα τερματιστεί με εξαίρεση" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "Άνοιγμα του Βοηθού αυτόματα όταν υπάρχουν προειδοποιήσεις για τον κώδικα" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "Εκτέλεση των επιλεγμένων ελέγχων Pylint" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "Εκτέλεση ελέγχων MyPy" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "Απενεργοποιημένοι έλεγχοι (μία ταυτότητα ανά γραμμή)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "Βοηθός" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "Αυτόματη συμπλήρωση" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "Ποιον διερμηνευτή ή συσκευή να χρησιμοποιήσει το Thonny για να τρέξει τον κώδικά σου;" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "Διερμηνευτής" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "Σχετικά με τo Birdseye" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Το Birdseye είναι ένας εκσφαλματωτής της Python που πρέπει να εγκατασταθεί ξεχωριστά.\n" "Θέλεις να ανοίξω τη σελίδα βοήθειας? " #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "Αποσφαλμάτωση τρέχοντος προγράμματος (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "Εναλλαγή σχολίου" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "Προσθήκη σχολίου" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "Αφαίρεση σχολίου" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "Αναίρεση" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "Επανάληψη" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "Αποκοπή" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "Αντιγραφή" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "Επικόλληση" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "Επιλογή όλων" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "Eκτέλεση μέχρι τον κέρσορα" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "Δεν μπορεί να κλείσει ακόμη" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "Χρησιμοποίηστε την εντολή \"Stop\" αν θέλετε να σταματήσετε την αποσφαλμάτωση" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "Ενσωμάτωση παραθύρων χρήστη" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "Επισήμανε ονόματα που ταιριάζουν" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "Επισήμανε τοπικές μεταβλητές" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "Επισήμανε παρανθέσεις" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "Επισήμανε στοιχεία συντακτικού" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "Επισήμανε την τρέχουσα γραμμή (απαιτεί εκ νέου άνοιγμα του επεξεργαστή κειμένου)" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "Να επιτρέπεται η συμπλήρωση κώδικα με το πλήκτρο Tab στον επεξεργαστή κειμένου" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "Να επιτρέπεται η συμπλήρωση κώδικα με το πλήκτρο Tab στο κέλυφος" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "Εμφάνιση αριθμού γραμμών" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "Συνιστώμενο μέγιστο μήκος γραμμής\n" "(Ρυθμίστε στο 0 για να απενεργοποιήσετε τη γραμμή περιθωρίου)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "Επεξεργαστής κειμένου" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "Εξαγωγή αρχείων καταγραφής χρήσης ..." #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "Γεγονότα" #: thonny/plugins/files.py:551 msgid "Files" msgstr "Αρχεία" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "Εύρεση & Αντικατάσταση" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "Εύρεση:" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "Αντικατάσταση με:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "Διάκριση πεζών-κεφαλαίων" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "Επάνω" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "Κάτω" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "Εύρεση" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "Αντικατάσταση" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "Αντικαταστάση+Εύρεση" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "Αντικατάσταση όλων" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "Εισάγετε συμβολοσειρά για αντικατάσταση" #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "Το ζητούμενο κειμενο δεν βρέθηκε!" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "Να επιτρέπεται μόνο μία εκτέλεση του Thonny" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "Άνοιγμα όλων των αρχείων από προηγούμενη συνεδρία" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "Απενεργοποίηση ηχητικών ειδοποιήσεων" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "Λειτουργία κλιμάκωσης γραμματοσειρών" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "Η λειτουργία Σωρού είναι ενεργοποιημένη.\n" "Κλείστε την προβολή Σωρού για να την απενεργοποιήσετε." #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "Σωρός" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "Γλώσσα" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "Αυτό το πλαίσιο προορίζεται για τις σημειώσεις εργασίας σας - οδηγίες , αποσπάσματα κώδικα, οτιδήποτε άλλο.\n" "\n" "Όλα θα αποθηκευτούν αυτόματα και θα φορτωθούν όταν ανοίξετε το Thonny την επόμενη φορά.\n" "\n" "Διαγράψτε ελεύθερα αυτό το κείμενο για να δημιουργήσετε χώρο για τις σημειώσεις σας." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "Σημειώσεις" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "Προηγούμενο αντικείμενο" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "Επόμενο αντικείμενο" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "Επιθεωρητής αντικειμένου" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "Περιεχόμενα" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "Λειτουργία Pygame Zero" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "Εύρεση πακέτου από PyPl" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "Απεγκατάσταση" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "Κλείσιμο" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "Κλικ " #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "Εδώ" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "Αναβάθμιση" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "Εγκατάσταση" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "Αδυναμία εύρεσης πακέτου από PyPl." #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "Τελευταία σταθερή έκδοση" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "Τελευταία έκδοση" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "Περίληψη" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "Συντάκτης" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "Αρχική σελίδα" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "Ανιχνευτής σφαλμάτων" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "Βιβλιογραφία" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "Σελίδα PyPl" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "Απαιτεί" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "Σίγουρα απεγκατάσταση;" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "Είσαι σίγουρος ότι θέλεις να το απεγκαταστήσεις;" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "Πίσω στο τρέχoν πλαίσιο" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "Μεταβλητές" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "Αυτός ο υπολογιστής" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "Ανανέωση" #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "Εστίαση σε" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "Σφάλμα" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "Πρέπει να επιλέξετε ενα αρχείο!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "Αντικατάσταση;" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "Θέλετε να αντικαταστήσετε το '%s';" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "Νέο" #: thonny/editors.py:565 msgid "Open..." msgstr "Άνοιγμα" #: thonny/editors.py:567 msgid "Load" msgstr "Φόρτωση" #: thonny/editors.py:576 msgid "Recent files" msgstr "Πρόσφατα αρχεία" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "Κλείσιμο όλων" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "Αποθήκευση" #: thonny/editors.py:633 msgid "Save as..." msgstr "Αποθήκευση ως..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "Αποθήκευση αντιγράφου..." #: thonny/editors.py:653 msgid "Rename..." msgstr "Μετονομασία..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "Επιλογές Thonny" #: thonny/running.py:121 msgid "Run current script" msgstr "Εκτέλεση τρέχοντος προγράμματος" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "Εκτέλεση τρέχοντος προγράμματος στο τερματικό" #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "Σταμάτημα/Επανεκκίνηση backend" #: thonny/running.py:166 msgid "Stop" msgstr "Σταμάτημα" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "Διακοπή εκτέλεσης" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "Αποστολή Τέλους Αρχείου (EOF) / Επανεκκίνηση μέσω λογισμικού" #: thonny/running.py:201 msgid "Disconnect" msgstr "Αποσύνδεση" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "Γνωστοί διερμηνευτές" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "Ο διερμηνευτής σας δεν είναι στην λίστα;" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "Υπενθύμιση! Το Thonny υποστηρίζει μόνο Python 3.5 και νεότερη έκδοση" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "Δημιουργία νέου εικονικού περιβάλλοντος" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "Επιλογή υπάρχοντος ή δημιουργία νέου καταλόγου" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "Διερμηνευτές Python" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "όλα τα αρχεία" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "Επιλέξτε κενό κατάλογο για νέο εικονικό περιβάλλον" #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "Προβληματικός κατάλογος" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "Ο επιλεγμένος κατάλογος δεν είναι κενός.\n" "Επιλέξτε άλλο ή ακυρώστε." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "Δημιουργία εικονικού περιβάλλοντος" #: thonny/shell.py:83 msgid "Clear shell" msgstr "Καθάρισε το κέλυφος" #: thonny/shell.py:138 msgid "Plotter" msgstr "Σχεδιογράφος" #: thonny/shell.py:269 msgid "Clear" msgstr "Καθάρισμα" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "Εμφάνιση σχεδιογράφου" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "Για λόγους απόδοσης, το κέλυφος αποφεύγει να εμφανίζει πλήρως τις μεγάλες γραμμές (βλ. Εργαλεία=> Επιλογές=> Κέλυφος).\n" "Εδώ μπορείτε να αλληλεπιδράσετε με το αρχικό κειμένο." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "Αναδίπλωση κειμένου (ενδέχεται να είναι αργή)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "Αντιγραφή στο πρόχειρο" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "Επέκτεινε στο Κέλυφος" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "Συμπιεσμένο κείμενο (%d χαρακτήρες)" #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "Ο σχεδιαστής απεικονίζει μια σειρά από\n" "αριθμούς που εκτυπώνονται στο κέλυφος." #: thonny/shell.py:1796 msgid "See Help for details." msgstr "Ανατρέξτε στη Βοήθεια για λεπτομέρειες." #: thonny/ui_utils.py:449 msgid "Close others" msgstr "Κλείσε τα υπόλοιπα" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "Αντιγραφή" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "Αντιγραφή από\n" "  %s\n" "στο\n" "  %s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "Ακύρωση" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "OK" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "Ακύρωση της διαδικασίας;" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "Η διεργασία είναι σε εξέλιξη.\n" "Είσαι σίγουρος ότι θέλεις να ακυρώσεις;" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "Επιλογή Όλων" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "Κέλυφος" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "Τον ίδιο διερμηνευτή που χρησιμοποιεί τοThonny (προεπιλογή)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "Αυτό το εικονικό περιβάλλον συντηρείται αυτόματα από το Thonny." #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "Τοποθεσία: " #: thonny/workbench.py:592 msgid "Options..." msgstr "Επιλογές..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "Αύξηση μεγέθους γραμματοσειράς" #: thonny/workbench.py:664 msgid "Change font size" msgstr "Αλλαγή μεγέθους γραμματοσειράς" #: thonny/workbench.py:665 msgid "Zoom" msgstr "Μεγέθυνση" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "Έξοδος από το Thonny" #: thonny/workbench.py:677 msgid "Quit" msgstr "Τερματισμός" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "Αντικατάσταση θέματος '%s'" #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "Παράμετροι προγράμματος:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "Κανονική λειτουργία" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "Οι ρυθμίσεις έχουν ενημερωθεί. Κάντε επανεκκίνηση του Thonny για να αρχίσετε να εργάζεστε σε κανονική λειτουργία.\n" "\n" "(Δείτε 'Εργαλεία → Επιλογές → Γενικά' αν αλλάξετε γνώμη αργότερα.)" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "Δέντρο Προγράμματος" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "Επιλογή διερμηνευτή" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "Συνέχεια" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "Εκτέλεση / Συνέχεια" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "Αποσφαλμάτωση τρέχοντος προγράμματος" #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "Αποσφαλμάτωση" #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "Αποσφαλμάτωση τρέχοντος προγράμματος (καλύτερη)" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "Αποσφαλμάτωση τρέχοντος προγράμματος (ταχύτερη)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "Προσπέραση\n" "" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "πάνω από" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "Είσοδος" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "Πρός" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "Έξοδος" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "Έξω" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "Οπισθοδρόμηση" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "Πίσω" #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "Στοίβα" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "Εξαίρεση" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "Καταγραφή συμβάντων κατά την χρήση του προγράμματος" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "Λειτουργία εντοπισμού σφαλμάτων (παρέχει πιο λεπτομερή καταγραφή διαγνωστικών)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "Λειτουργία περιβάλλοντος χρήστη (UI)" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "Παράγοντας κλιμάκωσης περιβάλλοντος χρήστη (UI)" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "Yπενθύμιση! Επανεκκινήστε το Thonny μετά την αλλαγή αυτών των επιλογών!" #. αλλαγή 1/11 #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "Γενικά" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "ΕΓΚΑΤΑΣΤΑΣΗ" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "Περιήγηση στα πακέτα" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "Με τον τρέχοντα διερμηνευή μπορείτε μόνο να περιηγηθείτε στα πακέτα.\n" "Μεταβείτε σε: 'Εργαλεία → Άνοιξε το κέλυφος συστήματος ...' για εγκατάσταση, αναβάθμιση ή απεγκατάσταση." #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "Κατάλογος πακέτων" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "Εγκατάσταση από PyPI" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "Εάν δεν γνωρίζετε από πού να κατεβάσετε το πακέτο, τότε κατά πάσα πιθανότητα πρέπει να κάνετε αναζήτηση στον κατάλογο πακέτων Python. Ξεκινήστε εισάγοντας το όνομα του πακέτου στο πλαίσιο αναζήτησης παραπάνω και πατώντας ENTER." #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "για να εντοπίσετε το αρχείο requirements.txt και να εγκαταστήσετε τα πακέτα που ορίζονται από αυτό." #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "Κάντε κλικ" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "για να εντοπίσετε και να εγκαταστήσετε το πακέτου(συνήθως με επέκταση .whl, .tar.gz ή .zip)." #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "Αναβάθμιση ή απεγκατάσταση" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "Ξεκινήστε επιλέγοντας το πακέτο από τα αριστερά." #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "Στόχος:" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "εικονικό περιβάλλον" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "πακέτα ιστότοπου χρήστη" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "Αυτό το παράθυρο διαλόγου εμφανίζει όλα τα διαθέσιμα πακέτα, αλλά επιτρέπει την αναβάθμιση και την απεγκατάσταση μόνο των πακέτων από" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "Νέα πακέτα θα εγκατασταθούν επίσης σε αυτόν τον κατάλογο. Οι άλλες τοποθεσίεςα διαχειρίζονται με εναλλακτικά μέσα." #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "Εγκατεστημένη έκδοση:" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "Εγκαταστήθηκε σε:" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "Ελέγξτε την ορθογραφία σας!" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "Πρέπει να εισέλθετε" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "Δεν ήταν δυνατή η εύρεση των πληροφοριών πακέτου από PyPI." #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "Κωδικός σφάλματος:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "Δεν βρέθηκε το όνομα πακέτου από τη λίστα:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "Το πακέτο '{}' είναι απαραίτητο για την εγκατάσταση και την απεγκατάσταση άλλων πακέτων." #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "Πακέτο" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "Διαχείριση πακέτων για %s" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "Επιβεβαίωση" #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "Φαίνεται ότι εγκαθιστάτε ένα πακέτο που σχετίζεται με το Thonny.\n" "Εάν σκοπεύατε να εγκαταστήσετε ένα πρόσθετο στο Thonny, τότε \n" "θα έπρεπε να επιλέξτε \"Εργαλεία → Διαχείριση πρόσθετων ...\"\n" "\n" "Είστε βέβαιοι ότι θέλετε να εγκαταστήσετε το %s για το back-end;" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "Υπενθύμιση! Μπορεί να υπάρχει άλλη διαθέσιμη έκδοση που είναι συμβατή με την τρέχουσα έκδοση του Thonny. Κάντε κλικ στο κουμπί '...' για να επιλέξετε την έκδοση που θα εγκατασταθεί." #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "Πρόσθετο του Thonny χωρίς προδιαγραφές" #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "Φαίνεται ότι προσπαθείτε να εγκαταστήσετε ένα ξεπερασμένο πρόσθετο\n" "του Thonny (δεν καθορίζει την απαιτούμενη έκδοση Thonny).\n" "\n" "Εάν το θέλετε ακόμα, τότε εγκαταστήστε το από τη γραμμή εντολών." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "Ακατάλληλες προδιαγραφές" #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "Αυτό το πακέτο απαιτεί διαφορετική έκδοση του Thonny:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "Εάν το θέλετε ακόμα, τότε εγκαταστήστε το από τη γραμμή εντολών." #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "(Σε αυτήν την περίπτωση, το back-end του Thonny χρησιμοποιεί τον ίδιο διερμηνευτή, επομένως και τα δύο παράθυρα διαχειρίζονται τα ίδια πακέτα.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "Υπενθύμιση! Πρέπει να κάνετε επανεκκίνηση του Thonny μετά την εγκατάσταση / αναβάθμιση / κατάργηση της εγκατάστασης ενός πρόσθετου." #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "Πρόσθετα του Thonny" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "Προχωρημένη εγκατάσταση / αναβάθμιση / υποβάθμιση" #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "Επιθυμητή έκδοση" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "Αναβάθμιση εξαρτήσεων" #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "Απαιτεί:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "Σφάλμα:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "Διαχείριση πακέτων.." #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "Διαχείριση προσθέτων..." #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "Άνοιγμα αναπαραγωγής..." #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "Αλλαγή από τον τρέχοντα κατάλογο εργασίας στον κατάλογο του προγράμματος κατά την Eκτέλεση/Αποσφαλμάτωση" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "Εμφάνιση κλήσεων συναρτήσεων (πλαισίων) σε ξεχωριστά παράθυρα" #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "Αποεπιλέξτε εάν θέλετε μια πιο παραδοσιακή εμπειρία." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "Αυτόματο άνοιγμα και κλείσιμο της προβολής της Στοίβας" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "Ανοίγει την προβολή στοίβας κατά την πρώτη κλήση και κλείνει όταν το πρόγραμμα επιστρέψει στο κυρίως πλαίσιο." #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "Να επιτρέπεται η μετάβαση σε βιβλιοθήκες (π.χ. εκτός του καταλόγου του κύριου προγράμματος)" #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "Μπορεί να κάνει την αποσφαλμάτωση πιο αργή." #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "Προτιμώμενο πρόγραμμα αποσφαλμάτωσης" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(χρησιμοποιείται όταν κάνετε κλικ στο κουμπί Αποσφαλμάτωση)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr "Θύρα Birdseye" #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(επανεκιννήστε το Thonny μετά από αυτήν την αλλαγή)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "Εκτέλεση & Αποσφαλμάτωση" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "Προσομοίωση τερματικού" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "υποστηρίζει βασικά χρώματα ANSI και στυλ" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "Μέγιστος αριθμός διατηρητέων γραμμών" #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "Υπενθύμιση! Μεγάλες τιμές μπορεί να προκαλέσουν αργή απόδοση!" #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "Μέγιστο μήκος τμήματων γραμμής πριν την συμπίεση" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "Τρέχον εκτελέσιμο πρόγραμμα στο τερματικό" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "Παρουσίαση του Python REPL μετά το τέλος του προγράμματος" #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "Διατήρησε το τερματικό ανοικτό μετά την ολοκλήρωση της διεργασίας Python" #: thonny/plugins/terminal_config_page.py:31 #, fuzzy msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "Υπενθύμιση! Το αυτόματο κλείσιμο πρέπει να ενεργοποιηθεί στις ρυθμίσεις του τερματικού\n" "(Τερματικό → Προτιμήσεις → Προφίλ → Κέλυφος → Όταν το κέλυφος εξέρχεται)" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "Τερματικό" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "Θεματικό UI" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "Θεματικό σύνταξης" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "Γραμματοσειρά επεξεργαστή κειμένου" #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "Γραμματοσειρά Ε/Ε (IO)" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "Προεπισκόπηση" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "Αυτό είναι ένα σχόλιο" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "Η απάντηση είναι" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "ανοιχτή_συμβολοσειρά" #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "Μπλα, μπλα" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "Υπενθύμιση! Ορισμένα στοιχεία στυλ αλλάζουν μόνο μετά την επανεκκίνηση του Thonny!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "Εισάγετε έναν ακέραιο αριθμό" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "Θέμα & Γραμματοσειρά" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "Άνοιξε τον φάκελο προγραμμάτων του Thonny..." #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "Άνοιξε τον φάκελο δεδομένων του Thonny ..." #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "Αρχική" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "Περιεχόμενα Βοήθειας" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "Συσκευή CircuitPython" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "Συσκευή MicroPython" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "Συνδέστε τη συσκευή σας στον υπολογιστή και επιλέξτε την αντίστοιχη θύρα παρακάτω" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "αναζητήστε το όνομα της συσκευής σας, \"USB Serial\" ή \"UART\"" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "Αν δεν μπορείτε να το βρείτε, ίσως χρειαστεί να εγκαταστήσετε πρώτα τον κατάλληλο οδηγό USB." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "Θύρα" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "Προσπαθήστε να εντοπίσετε αυτόματα τη θύρα" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr "MicroPython (γενόσημο)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "Εκτύπωση..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "Άνοιξε το κέλυφος συστήματος" #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "Λεπτομέρειες" #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "Εγκατάσταση από το αρχείο προδιαγραφών" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "Εγκατάσταση από τοπικό αρχείο" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "Αυτός ο διάλογος είναι για τη διαχείριση των πρόσθετων του Thonny και των εξαρτήσεων τους.\n" "Αν θέλετε να εγκαταστήσετε πακέτα για τα δικά σας προγράμματα, επιλέξτε \"Εργαλεία → Διαχείριση πακέτων ...\"" #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr "CircuitPython (γενόσημο)" #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "Αύξηση εσοχής επιλεγμένων γραμμών" #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "Μείωση εσοχής επιλεγμένων γραμμών" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "Αλλαγή σε\n" "κανονική\n" "λειτουργία" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "Βεβαιωθείτε ότι το MicroPython έχει εγκατασταθεί στο micro:bit σας." #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "Μην ξεχνάτε ότι το main.py λειτουργεί μόνο χωρίς ενσωματωμένο κύριο πρόγραμμα." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "Παρακαλώ περιμένετε" #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "Ολοκληρώθηκε!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "Yλικολογισμικό" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "Δεν ήταν δυνατή η εύρεση του δίσκου '%s'. Θέλετε να τον εντοπίσετε μόνοι σας;" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "Βρέθηκαν διάφοροι δίσκοι '%s'. Θέλετε να επιλέξετε έναν εσείς;" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "Δεν είναι δυνατή η εύρεση κατάλληλου δίσκου" #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "%d στοιχεία" #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "Μετακίνηση στον Κάδο Ανακύκλωσης" #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "Μετακίνηση στα Άχρηστα" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "Διαγραφή" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "Νέος κατάλογος" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "Ιδιότητες" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "Χώρος αποθήκευσης" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "Μονοπάτι" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "Ιδιότητες καταλόγου" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "Ιδιότητες αρχείου" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "bytes" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "Μεγέθος" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "Τροποποιήθηκε" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "Διαγραφή %s" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "Μετακίνηση του %s στο %s" #: thonny/editors.py:219 msgid "Loading" msgstr "Φόρτωση" #: thonny/editors.py:335 msgid "Saving" msgstr "Αποθήκευση" #: thonny/running.py:1408 msgid "Working..." msgstr "Επεξεργάζεται..." #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "Ανέβασμα του %s στο %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "Ανέβασμα στο %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "Λήψη του %s στο %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "Μεταφόρτωση στο %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "Άνοιγμα στο διαχειριστή αρχείων του συστήματος" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "Απόκρυψη κρυφών αρχείων" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "Εμφάνιση κρυφών αρχείων" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "Άνοιγμα στο Thonny" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "Άνοιγμα στην προεπιλεγμένη εφαρμογή του συστήματος" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "Διαμόρφωση %s αρχείων" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "Τι να κάνω με ένα %s αρχείο όταν γίνεται διπλό κλικ στον προβολέα αρχείων του Thonny?" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "Διαγραφή" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "Δημιουργία φακέλου" #: thonny/editors.py:217 msgid "Loading %s" msgstr "Φόρτωση %s" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "Αποθήκευση στο %s" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "Αποθήκευση Όλων των αρχείων" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "Ρύθμιση διερμηνέα..." #: thonny/workbench.py:1501 msgid "Device" msgstr "Συσκευή" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "Ακύρωση" #: thonny/workdlg.py:212 msgid "Starting" msgstr "Έναρξη" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "Ταυτοποίηση" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "Εισαγωγή συνθηματικού για τα προσωπικο κλειδί για το \n" "{}" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "Εισαγωγή κωδικού για\n" "{}" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "Η παραπάνω αναπαράσταση είναι μια κατά προσέγγιση τιμή αυτού του float. Η ακριβής αποθηκευμένη τιμή είναι %s που είναι περίπου %s" #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "Αναζήτησε αποτελέσματα" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "Αναζήτηση" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "Εγκατάσταση ‘%s’" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "Αναβάθμιση ‘%s’" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "Απεγκατάσταση ‘%s’" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "Εγκατάσταση" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "Ο διαχειριστής πακέτων δεν είναι διαθέσιμος για αυτόν τον διερμηνέα" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "Δεν υποστηρίζεται" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "Δεν διατίθεται" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "Πρέπει να σταματήσει το πρόγραμμά σου πριν την έναρξη του διαχειριστή πακέτων" #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "Άνοιξε τις εκτιμημένες τιμές στον επιθεωρητή Αντικειμένου" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "Εκτελέσιμο της python" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "Σημείωση! Το κουμπί επιλογής αρχείου μπορεί να μην λειτουργεί σωστά όταν επιλέγονται εκτελέσιμα\n" "από εικονικό περιβάλλον. Σε αυτή την περίπτωση να επιλεγεί το σενάριο \"ενεργοποίησης\" (activate script)\n" "αντί για το διερμηνέα (η καταχώρησε το μονοπάτι απευθείας στο πεδίο)! " #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "Απομακρυσμένη Python 2 (SSH)" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "Δεν υπάρχει σύνδεση" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "Προχωρημένες επιλογές" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "Εγκατάσταση ή ενημέρωση υλικολογισμικού" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "MicroPython (τοπική)" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "MicroPython (SSH)" #. Module μεταφράζεται επίσημα δομοστοιχείο αλλά φοβάμαι κανένας δεν καταλαβαίνει τι σημαίνει αυτή η λέξη. Νομίζω ενότητα είναι πιο κατανοητό σαν λέξη #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "Ενότητα" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "Σκιασμένα στοιχεία (με εισακτέα):" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "Το πακέτο δεν είναι διαθέσιμο στο micropython.org. Θα εγκατασταθεί η έκδοση στο PyPI." #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "Σημείωση! Το micropython.org έχει δημοσιεύσει την έκδοση %s αυτού του πακέτου και αυτό θα εγκατασταθεί από προεπιλογή." #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "Για αναβάθμιση απλώς να εγκατασταθεί ξανά το πακέτο" #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "Για απεγκατάσταση να διαγραφούν τα αντίστοιχα αρχεία" #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "Πεδίο εφαρμογής" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "Αυτός ο διάλογος αναγράφει τις κορυφαίες ενότητες από τα ακόλουθα ευρετήρια:\n" "\n" "" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "Τα Νέα πακέτα θα εγκατασταθούν στο/στη" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "δεν υπάρχει απόλυτη βιβλιοθήκη ευρετηρίου στο sys.path" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "Έκδοση προς εγκατάσταση" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "Στόχευσε την τοποθεσία της συσκευής" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "Στόχευσε το μοντέλο της συσκευής" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "Παρακαλώ περιμένετε" #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "Αναζήτηση στο PyPI" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "Επιλέχθηκε Διαγραφή" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "Άνοιγμα στο επεξεργαστή κειμένου του Thonny" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "Μέσα αποθήκευσης στον οδηγό ή στο σύστημα αρχείων" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "συνολικός χώρος" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "χρησιμοποιούμενος χώρος" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "ελεύθερος χώρος" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "Πληροφορίες μέσων αποθήκευσης" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "Αντικατάσταση στηλοθετών(tabs) με κενά" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "Επισήμανση στηλοθετών (tabs)" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "Εσοχές με στηλοθέτες (tabs) (δεν συνίσταται για την Python)" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "Όνομα" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "Μέγεθος (bytes)" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "Εισαγωγή ονόματος για νέο ευρετήριο υπό το \n" "%s" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "Καμία επιλογή" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "Επέλεξε ένα αντικείμενο και προσπάθησε ξανά!" #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "Άνοιγμα από %s" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "Αποθήκευση στο %s" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "Όνομα αρχείου:" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "Ταυτότητα τιμής" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "Τιμή" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "Αποθήκευση κωδικού" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "Κλήση συνάρτησης στο %s" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "Τοπικές μεταβλητές" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "Συνάρτηση" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "Τοποθεσία" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "Αν η τελευταία εντολή δημιούργησε εξαίρεση, τότε αυτή η προβολή θα δείξει πληροφορίες στοίβας (stacktrace)" #: thonny/plugins/heap.py:22 msgid "ID" msgstr "Ταυτότητα" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "Δεδομένα" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "Χαρακτηριστικά" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "Ευρετήριο" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "Ταυτότητα κλειδιού" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "Κλειδί" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "Επιστροφή στο \n" "%s" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "Θύρα η WebREPL" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "Κωδικός" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "Πηγαίος κώδικας" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "Χρήση διαλόγων αρχείου Tk αντί για Zenity" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "Επέλεξε αν ο διάλογος αρχείου καταλήγει πίσω από το κυρίως παράθυρο" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "Παράμετροι περιβάλλοντος (ένα KEY=VALUE ανά γραμμή) " thonny-3.3.14/thonny/locale/en_US/000077500000000000000000000000001411757431400167175ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/en_US/LC_MESSAGES/000077500000000000000000000000001411757431400205045ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/en_US/LC_MESSAGES/thonny.mo000066400000000000000000000007271411757431400223660ustar00rootroot00000000000000,<<z=~XMade in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: en-us Made at the University of Tartu, Estonia, with help from the open-source community, Raspberry Pi Foundation and Cybernetica ASthonny-3.3.14/thonny/locale/en_US/LC_MESSAGES/thonny.po000066400000000000000000000723171411757431400223750ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: en-us\n" #: thonny/workbench.py:355 msgid "File" msgstr "" #: thonny/workbench.py:356 msgid "Edit" msgstr "" #: thonny/workbench.py:357 msgid "View" msgstr "" #: thonny/running.py:95 thonny/workbench.py:358 msgid "Run" msgstr "" #: thonny/workbench.py:360 msgid "Tools" msgstr "" #: thonny/plugins/help/__init__.py:68 thonny/workbench.py:361 msgid "Help" msgstr "" #: thonny/workbench.py:522 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "" #: thonny/workbench.py:530 msgid "A special virtual environment (deprecated)" msgstr "" #: thonny/workbench.py:568 msgid "Exit" msgstr "" #: thonny/workbench.py:595 msgid "Decrease font size" msgstr "" #: thonny/workbench.py:607 msgid "Focus editor" msgstr "" #: thonny/workbench.py:616 msgid "Focus shell" msgstr "" #: thonny/workbench.py:627 msgid "Maximize view" msgstr "" #: thonny/workbench.py:639 msgid "Full screen" msgstr "" #: thonny/workbench.py:1250 msgid "Program arguments" msgstr "" #: thonny/plugins/about.py:25 thonny/plugins/about.py:157 msgid "About Thonny" msgstr "" #: thonny/plugins/about.py:77 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Made at the\n" "University of Tartu, Estonia,\n" "with help from the\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" #: thonny/plugins/about.py:103 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "" #: thonny/plugins/about.py:146 msgid "Version history" msgstr "" #: thonny/plugins/about.py:153 msgid "Report problems" msgstr "" #: thonny/plugins/assistant_config_page.py:15 msgid "Open Assistant automatically when program crashes with an exception" msgstr "" #: thonny/plugins/assistant_config_page.py:21 msgid "Open Assistant automatically when it has warnings for your code" msgstr "" #: thonny/plugins/assistant_config_page.py:26 msgid "Perform selected Pylint checks" msgstr "" #: thonny/plugins/assistant_config_page.py:29 msgid "Perform MyPy checks" msgstr "" #: thonny/plugins/assistant_config_page.py:31 msgid "Disabled checks (one id per line)" msgstr "" #: thonny/assistance.py:962 thonny/plugins/assistant_config_page.py:68 msgid "Assistant" msgstr "" #: thonny/plugins/autocomplete.py:316 msgid "Auto-complete" msgstr "" #: thonny/plugins/backend_config_page.py:43 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "" #: thonny/plugins/backend_config_page.py:127 msgid "Interpreter" msgstr "" #: thonny/plugins/birdseye_frontend.py:32 msgid "About Birdseye" msgstr "" #: thonny/plugins/birdseye_frontend.py:33 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "" #: thonny/plugins/birdseye_frontend.py:60 msgid "Debug current script (birdseye)" msgstr "" #: thonny/plugins/commenting_indenting.py:143 msgid "Toggle comment" msgstr "" #: thonny/plugins/commenting_indenting.py:153 msgid "Comment out" msgstr "" #: thonny/plugins/commenting_indenting.py:163 msgid "Uncomment" msgstr "" #: thonny/plugins/common_editing_commands.py:20 msgid "Undo" msgstr "" #: thonny/plugins/common_editing_commands.py:32 msgid "Redo" msgstr "" #: thonny/plugins/common_editing_commands.py:48 thonny/ui_utils.py:2176 msgid "Cut" msgstr "" #: thonny/plugins/common_editing_commands.py:60 thonny/ui_utils.py:2177 msgid "Copy" msgstr "" #: thonny/plugins/common_editing_commands.py:72 thonny/ui_utils.py:2178 msgid "Paste" msgstr "" #: thonny/plugins/common_editing_commands.py:84 thonny/plugins/debugger.py:124 msgid "Select all" msgstr "" #: thonny/plugins/debugger.py:117 thonny/plugins/debugger.py:1276 msgid "Run to cursor" msgstr "" #: thonny/plugins/debugger.py:863 msgid "Can't close yet" msgstr "" #: thonny/plugins/debugger.py:864 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "" #: thonny/plugins/dock_user_windows_frontend.py:27 msgid "Dock user windows" msgstr "" #: thonny/plugins/editor_config_page.py:14 msgid "Highlight matching names" msgstr "" #: thonny/plugins/editor_config_page.py:20 msgid "Highlight local variables" msgstr "" #: thonny/plugins/editor_config_page.py:25 msgid "Highlight parentheses" msgstr "" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight syntax elements" msgstr "" #: thonny/plugins/editor_config_page.py:29 msgid "Highlight current line (requires reopening the editor)" msgstr "" #: thonny/plugins/editor_config_page.py:34 msgid "Allow code completion with Tab-key in editors" msgstr "" #: thonny/plugins/editor_config_page.py:40 msgid "Allow code completion with Tab-key in Shell" msgstr "" #: thonny/plugins/editor_config_page.py:44 msgid "Show line numbers" msgstr "" #: thonny/plugins/editor_config_page.py:47 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "" #: thonny/plugins/editor_config_page.py:68 msgid "Editor" msgstr "" #: thonny/plugins/event_logging.py:197 msgid "Export usage logs..." msgstr "" #: thonny/plugins/event_view.py:38 msgid "Events" msgstr "" #: thonny/plugins/files.py:307 msgid "Files" msgstr "" #: thonny/plugins/find_replace.py:56 thonny/plugins/find_replace.py:412 msgid "Find & Replace" msgstr "" #: thonny/plugins/find_replace.py:62 msgid "Find:" msgstr "" #: thonny/plugins/find_replace.py:73 msgid "Replace with:" msgstr "" #: thonny/plugins/find_replace.py:91 msgid "Case sensitive" msgstr "" #: thonny/plugins/find_replace.py:98 msgid "Up" msgstr "" #: thonny/plugins/find_replace.py:102 msgid "Down" msgstr "" #: thonny/plugins/find_replace.py:111 msgid "Find" msgstr "" #: thonny/plugins/find_replace.py:121 msgid "Replace" msgstr "" #: thonny/plugins/find_replace.py:129 msgid "Replace+Find" msgstr "" #: thonny/plugins/find_replace.py:138 msgid "Replace all" msgstr "" #: thonny/plugins/find_replace.py:232 msgid "Enter string to be replaced." msgstr "" #: thonny/plugins/find_replace.py:316 msgid "The specified text was not found!" msgstr "" #: thonny/plugins/general_config_page.py:13 msgid "Allow only single Thonny instance" msgstr "" #: thonny/plugins/general_config_page.py:20 msgid "Reopen all files from previous session" msgstr "" #: thonny/plugins/general_config_page.py:26 msgid "Disable notification sound" msgstr "" #: thonny/plugins/general_config_page.py:75 msgid "Font scaling mode" msgstr "" #: thonny/plugins/heap.py:35 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "" #: thonny/plugins/heap.py:83 msgid "Heap" msgstr "" #: thonny/plugins/general_config_page.py:42 msgid "Language" msgstr "" #: thonny/plugins/notes.py:33 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "" #: thonny/plugins/notes.py:61 msgid "Notes" msgstr "" #: thonny/plugins/object_inspector.py:108 msgid "Previous object" msgstr "" #: thonny/plugins/object_inspector.py:111 msgid "Next object" msgstr "" #: thonny/plugins/object_inspector.py:601 msgid "Object inspector" msgstr "" #: thonny/plugins/outline.py:137 msgid "Outline" msgstr "" #: thonny/plugins/pgzero_frontend.py:26 msgid "Pygame Zero mode" msgstr "" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "" #: thonny/plugins/pip_gui.py:188 thonny/plugins/pip_gui.py:190 msgid "Uninstall" msgstr "" #: thonny/code.py:548 thonny/plugins/microbit/__init__.py:200 #: thonny/plugins/pip_gui.py:204 thonny/running.py:1457 thonny/ui_utils.py:367 #: thonny/ui_utils.py:1643 msgid "Close" msgstr "" #: thonny/plugins/pip_gui.py:382 msgid "Click " msgstr "" #: thonny/plugins/pip_gui.py:383 thonny/plugins/pip_gui.py:393 msgid "here" msgstr "" #: thonny/plugins/pip_gui.py:181 thonny/plugins/pip_gui.py:478 msgid "Upgrade" msgstr "" #: thonny/plugins/microbit/__init__.py:123 thonny/plugins/pip_gui.py:483 #: thonny/plugins/pip_gui.py:1064 msgid "Install" msgstr "" #: thonny/plugins/pip_gui.py:505 msgid "Could not find the package from PyPI." msgstr "" #: thonny/plugins/pip_gui.py:515 msgid "exact package name" msgstr "" #: thonny/plugins/pip_gui.py:533 msgid "Latest stable version" msgstr "" #: thonny/plugins/pip_gui.py:535 msgid "Latest version" msgstr "" #: thonny/plugins/pip_gui.py:536 msgid "Summary" msgstr "" #: thonny/plugins/pip_gui.py:537 msgid "Author" msgstr "" #: thonny/plugins/pip_gui.py:538 msgid "Homepage" msgstr "" #: thonny/plugins/pip_gui.py:540 msgid "Bugtracker" msgstr "" #: thonny/plugins/pip_gui.py:542 msgid "Documentation" msgstr "" #: thonny/plugins/pip_gui.py:544 msgid "PyPI page" msgstr "" #: thonny/plugins/pip_gui.py:548 msgid "Requires" msgstr "" #: thonny/plugins/pip_gui.py:614 msgid "Really uninstall?" msgstr "" #: thonny/plugins/pip_gui.py:619 msgid "Are you sure you want to uninstall it?" msgstr "" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "" #: thonny/plugins/variables.py:131 msgid "Variables" msgstr "" #: thonny/base_file_browser.py:30 msgid "This computer" msgstr "" #: thonny/base_file_browser.py:568 msgid "Refresh" msgstr "" #: thonny/base_file_browser.py:572 msgid "Focus into" msgstr "" #: thonny/base_file_browser.py:1001 msgid "Error" msgstr "" #: thonny/base_file_browser.py:1001 msgid "You need to select a file!" msgstr "" #: thonny/base_file_browser.py:1005 msgid "Overwrite?" msgstr "" #: thonny/base_file_browser.py:1005 msgid "Do you want to overwrite '%s' ?" msgstr "" #: thonny/code.py:513 thonny/code.py:515 msgid "New" msgstr "" #: thonny/code.py:526 msgid "Open..." msgstr "" #: thonny/code.py:528 msgid "Load" msgstr "" #: thonny/code.py:537 msgid "Recent files" msgstr "" #: thonny/code.py:559 thonny/ui_utils.py:369 msgid "Close all" msgstr "" #: thonny/code.py:569 thonny/code.py:571 msgid "Save" msgstr "" #: thonny/code.py:583 msgid "Save as..." msgstr "" #: thonny/code.py:594 msgid "Save copy..." msgstr "" #: thonny/code.py:603 msgid "Rename..." msgstr "" #: thonny/config_ui.py:17 msgid "Thonny options" msgstr "" #: thonny/running.py:94 msgid "Run current script" msgstr "" #: thonny/running.py:125 msgid "Run current script in terminal" msgstr "" #: thonny/running.py:138 msgid "Stop/Restart backend" msgstr "" #: thonny/running.py:139 msgid "Stop" msgstr "" #: thonny/running.py:150 msgid "Interrupt execution" msgstr "" #: thonny/running.py:161 msgid "Send EOF / Soft reboot" msgstr "" #: thonny/running.py:172 msgid "Disconnect" msgstr "" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "" #: thonny/running_config_page.py:43 msgid "Locate another" msgstr "" #: thonny/running_config_page.py:45 msgid "python executable" msgstr "" #: thonny/running_config_page.py:47 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "" #: thonny/running_config_page.py:74 msgid "Python interpreters" msgstr "" #: thonny/plugins/pip_gui.py:657 thonny/plugins/pip_gui.py:669 #: thonny/running_config_page.py:75 msgid "all files" msgstr "" #: thonny/running_config_page.py:89 msgid "Select empty directory for new virtual environment" msgstr "" #: thonny/running_config_page.py:96 msgid "Bad directory" msgstr "" #: thonny/running_config_page.py:97 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "" #: thonny/running_config_page.py:112 msgid "Creating virtual environment" msgstr "" #: thonny/shell.py:72 msgid "Clear shell" msgstr "" #: thonny/shell.py:126 msgid "Plotter" msgstr "" #: thonny/shell.py:245 msgid "Clear" msgstr "" #: thonny/shell.py:258 msgid "Show Plotter" msgstr "" #: thonny/shell.py:1389 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "" #: thonny/shell.py:1400 msgid "Wrap text (may be slow)" msgstr "" #: thonny/shell.py:1425 thonny/ui_utils.py:1639 msgid "Copy to clipboard" msgstr "" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "" #: thonny/shell.py:1442 msgid "Squeezed text (%d characters)" msgstr "" #: thonny/shell.py:1611 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "" #: thonny/shell.py:1613 msgid "See Help for details." msgstr "" #: thonny/ui_utils.py:368 msgid "Close others" msgstr "" #: thonny/ui_utils.py:1499 msgid "Copying" msgstr "" #: thonny/ui_utils.py:1502 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "" #: thonny/config_ui.py:31 thonny/plugins/microbit/__init__.py:127 #: thonny/plugins/pip_gui.py:1066 thonny/running.py:1424 #: thonny/ui_utils.py:1510 thonny/ui_utils.py:1712 msgid "Cancel" msgstr "" #: thonny/config_ui.py:30 thonny/ui_utils.py:1764 msgid "OK" msgstr "" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "" #: thonny/plugins/shell_config_page.py:61 thonny/workbench.py:162 msgid "Shell" msgstr "" #: thonny/workbench.py:512 msgid "The same interpreter which runs Thonny (default)" msgstr "" #: thonny/workbench.py:531 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "" #: thonny/workbench.py:532 msgid "Location: " msgstr "" #: thonny/workbench.py:578 msgid "Options..." msgstr "" #: thonny/workbench.py:585 msgid "Increase font size" msgstr "" #: thonny/workbench.py:650 msgid "Change font size" msgstr "" #: thonny/workbench.py:651 msgid "Zoom" msgstr "" #: thonny/workbench.py:660 msgid "Exit Thonny" msgstr "" #: thonny/workbench.py:663 msgid "Quit" msgstr "" #: thonny/workbench.py:1054 thonny/workbench.py:1062 msgid "Overwriting theme '%s'" msgstr "" #: thonny/workbench.py:1221 msgid "Program arguments:" msgstr "" #: thonny/workbench.py:1275 msgid "Regular mode" msgstr "" #: thonny/workbench.py:1276 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "" #: thonny/plugins/ast_view.py:209 msgid "Program tree" msgstr "" #: thonny/plugins/backend_config_page.py:130 msgid "Select interpreter" msgstr "" #: thonny/plugins/debugger.py:1162 msgid "Resume" msgstr "" #: thonny/plugins/debugger.py:1174 msgid "Run / resume" msgstr "" #: thonny/plugins/debugger.py:1189 msgid "Debug current script" msgstr "" #: thonny/plugins/debugger.py:1191 msgid "Debug" msgstr "" #: thonny/plugins/debugger.py:1202 msgid "Debug current script (nicer)" msgstr "" #: thonny/plugins/debugger.py:1214 msgid "Debug current script (faster)" msgstr "" #: thonny/plugins/debugger.py:1225 msgid "Step over" msgstr "" #: thonny/plugins/debugger.py:1227 msgid "Over" msgstr "" #: thonny/plugins/debugger.py:1238 msgid "Step into" msgstr "" #: thonny/plugins/debugger.py:1240 msgid "Into" msgstr "" #: thonny/plugins/debugger.py:1251 msgid "Step out" msgstr "" #: thonny/plugins/debugger.py:1253 msgid "Out" msgstr "" #: thonny/plugins/debugger.py:1288 msgid "Step back" msgstr "" #: thonny/plugins/debugger.py:1290 msgid "Back" msgstr "" #: thonny/plugins/debugger.py:1296 msgid "Stack" msgstr "" #: thonny/plugins/debugger.py:1297 msgid "Exception" msgstr "" #: thonny/plugins/general_config_page.py:16 msgid "Log program usage events" msgstr "" #: thonny/plugins/general_config_page.py:32 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "" #: thonny/plugins/general_config_page.py:56 msgid "UI mode" msgstr "" #: thonny/plugins/general_config_page.py:69 msgid "UI scaling factor" msgstr "" #: thonny/plugins/general_config_page.py:88 msgid "NB! Restart Thonny after changing these options!" msgstr "" #: thonny/plugins/general_config_page.py:102 msgid "General" msgstr "" #: thonny/plugins/pip_gui.py:108 msgid "INSTALL" msgstr "" #: thonny/plugins/pip_gui.py:352 msgid "Browse the packages" msgstr "" #: thonny/plugins/pip_gui.py:355 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "" #: thonny/plugins/pip_gui.py:363 msgid "Packages' directory" msgstr "" #: thonny/plugins/pip_gui.py:368 msgid "Install from PyPI" msgstr "" #: thonny/plugins/pip_gui.py:371 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "" #: thonny/plugins/pip_gui.py:387 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "" #: thonny/plugins/pip_gui.py:392 msgid "Click" msgstr "" #: thonny/plugins/pip_gui.py:397 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "" #: thonny/plugins/pip_gui.py:403 msgid "Upgrade or uninstall" msgstr "" #: thonny/plugins/pip_gui.py:405 msgid "Start by selecting the package from the left." msgstr "" #: thonny/plugins/pip_gui.py:409 msgid "Target:" msgstr "" #: thonny/plugins/pip_gui.py:412 msgid "virtual environment" msgstr "" #: thonny/plugins/pip_gui.py:416 msgid "user site packages" msgstr "" #: thonny/plugins/pip_gui.py:421 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "" #: thonny/plugins/pip_gui.py:431 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "" #: thonny/plugins/pip_gui.py:456 msgid "Installed version:" msgstr "" #: thonny/plugins/pip_gui.py:458 msgid "Installed to:" msgstr "" #: thonny/plugins/pip_gui.py:510 msgid "Please check your spelling!" msgstr "" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "" #: thonny/plugins/pip_gui.py:520 msgid "Could not find the package info from PyPI." msgstr "" #: thonny/plugins/pip_gui.py:522 thonny/plugins/pip_gui.py:1120 msgid "Error code:" msgstr "" #: thonny/plugins/pip_gui.py:581 msgid "Can't find package name from the list:" msgstr "" #: thonny/plugins/pip_gui.py:615 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "" #: thonny/plugins/pip_gui.py:657 msgid "Package" msgstr "" #: thonny/plugins/pip_gui.py:757 msgid "Manage packages for %s" msgstr "" #: thonny/plugins/pip_gui.py:813 msgid "Confirmation" msgstr "" #: thonny/plugins/pip_gui.py:814 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "" #: thonny/plugins/pip_gui.py:912 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "" #: thonny/plugins/pip_gui.py:920 msgid "Thonny plugin without requirements" msgstr "" #: thonny/plugins/pip_gui.py:921 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "" #: thonny/plugins/pip_gui.py:935 msgid "Unsuitable requirements" msgstr "" #: thonny/plugins/pip_gui.py:936 msgid "This package requires different Thonny version:" msgstr "" #: thonny/plugins/pip_gui.py:940 msgid "If you still want it, then please install it from the command line." msgstr "" #: thonny/plugins/pip_gui.py:984 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "" #: thonny/plugins/pip_gui.py:990 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "" #: thonny/plugins/pip_gui.py:1000 msgid "Thonny plug-ins" msgstr "" #: thonny/plugins/pip_gui.py:1013 msgid "Advanced install / upgrade / downgrade" msgstr "" #: thonny/plugins/pip_gui.py:1022 msgid "Desired version" msgstr "" #: thonny/plugins/pip_gui.py:1060 msgid "Upgrade dependencies" msgstr "" #: thonny/plugins/pip_gui.py:1118 msgid "Requires:" msgstr "" #: thonny/plugins/pip_gui.py:1122 msgid "Error:" msgstr "" #: thonny/plugins/pip_gui.py:1232 msgid "Manage packages..." msgstr "" #: thonny/plugins/pip_gui.py:1238 msgid "Manage plug-ins..." msgstr "" #: thonny/plugins/replayer.py:354 msgid "Open replayer..." msgstr "" #: thonny/plugins/run_debug_config_page.py:12 msgid "Change working directory to script directory on Run / Debug" msgstr "" #: thonny/plugins/run_debug_config_page.py:20 msgid "Show function calls (frames) in separate windows" msgstr "" #: thonny/plugins/run_debug_config_page.py:21 msgid "Uncheck if you want more traditional experience." msgstr "" #: thonny/plugins/run_debug_config_page.py:27 msgid "Open and close Stack view automatically" msgstr "" #: thonny/plugins/run_debug_config_page.py:28 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "" #: thonny/plugins/run_debug_config_page.py:37 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "" #: thonny/plugins/run_debug_config_page.py:38 msgid "May make debugging slower." msgstr "" #: thonny/plugins/run_debug_config_page.py:43 msgid "Preferred debugger" msgstr "" #: thonny/plugins/run_debug_config_page.py:55 msgid "(used when clicking Debug toolbar button)" msgstr "" #: thonny/plugins/run_debug_config_page.py:60 msgid "Birdseye port" msgstr "" #: thonny/plugins/run_debug_config_page.py:64 msgid "(restart Thonny after changing this)" msgstr "" #: thonny/plugins/run_debug_config_page.py:72 msgid "Run & Debug" msgstr "" #: thonny/plugins/shell_config_page.py:16 msgid "Terminal emulation" msgstr "" #: thonny/plugins/shell_config_page.py:18 msgid "supports basic ANSI-colors and styles" msgstr "" #: thonny/plugins/shell_config_page.py:30 msgid "Maximum number of lines to keep." msgstr "" #: thonny/plugins/shell_config_page.py:32 msgid "NB! Large values may cause poor performance!" msgstr "" #: thonny/plugins/shell_config_page.py:47 msgid "Maximum length of line fragments before squeezing" msgstr "" #: thonny/plugins/terminal_config_page.py:10 msgid "Running current script in terminal" msgstr "" #: thonny/plugins/terminal_config_page.py:15 msgid "Present Python REPL after program ends" msgstr "" #: thonny/plugins/terminal_config_page.py:22 msgid "Keep terminal window open after Python process ends" msgstr "" #: thonny/plugins/terminal_config_page.py:29 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "" #: thonny/plugins/terminal_config_page.py:38 msgid "Terminal" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:39 msgid "UI theme" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:52 msgid "Syntax theme" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:84 msgid "Editor font" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:107 msgid "IO font" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:132 msgid "Preview" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:144 msgid "This is a comment" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:147 msgid "The answer is" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:151 msgid "unclosed_string" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:153 msgid "blah, blah" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:176 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:215 msgid "Enter an integer" msgstr "" #: thonny/plugins/theme_and_font_config_page.py:228 msgid "Theme & Font" msgstr "" #: thonny/plugins/thonny_folders.py:18 msgid "Open Thonny program folder..." msgstr "" #: thonny/plugins/thonny_folders.py:23 msgid "Open Thonny data folder..." msgstr "" #: thonny/plugins/help/__init__.py:58 msgid "Home" msgstr "" #: thonny/plugins/help/__init__.py:69 msgid "Help contents" msgstr "" #: thonny/plugins/micropython/__init__.py:175 msgid "CircuitPython device" msgstr "" #: thonny/plugins/micropython/__init__.py:179 msgid "MicroPython device" msgstr "" #: thonny/plugins/micropython/__init__.py:191 msgid "Connect your device to the computer and select corresponding port below" msgstr "" #: thonny/plugins/micropython/__init__.py:194 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "" #: thonny/plugins/micropython/__init__.py:196 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "" #: thonny/plugins/micropython/__init__.py:220 msgid "Port" msgstr "" #: thonny/plugins/micropython/__init__.py:229 msgid "Try to detect port automatically" msgstr "" #: thonny/plugins/micropython/__init__.py:417 msgid "MicroPython (generic)" msgstr "" #: thonny/plugins/printing/__init__.py:79 msgid "Print..." msgstr "" #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "" #: thonny/plugins/backend_config_page.py:61 msgid "Details" msgstr "" #: thonny/plugins/pip_gui.py:380 msgid "Install from requirements file" msgstr "" #: thonny/plugins/pip_gui.py:391 msgid "Install from local file" msgstr "" #: thonny/plugins/pip_gui.py:970 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "" #: thonny/plugins/circuitpython/__init__.py:47 msgid "CircuitPython (generic)" msgstr "" #: thonny/plugins/commenting_indenting.py:123 msgid "Indent selected lines" msgstr "" #: thonny/plugins/commenting_indenting.py:133 msgid "Dedent selected lines" msgstr "" #: thonny/workbench.py:1264 msgid "Switch to\n" "regular\n" "mode" msgstr "" #: thonny/plugins/microbit/__init__.py:54 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "" #: thonny/plugins/microbit/__init__.py:56 msgid "Don't forget that main.py only works without embedded main script." msgstr "" #: thonny/plugins/microbit/__init__.py:102 msgid "Install latest MicroPython to BBC micro:bit" msgstr "" #: thonny/plugins/microbit/__init__.py:104 msgid "micro:bit location:" msgstr "" #: thonny/plugins/microbit/__init__.py:109 msgid "Version to be installed:" msgstr "" #: thonny/plugins/microbit/__init__.py:111 msgid "please wait" msgstr "" #: thonny/plugins/microbit/__init__.py:115 msgid "NB! All files on micro:bit will be deleted!" msgstr "" #: thonny/plugins/microbit/__init__.py:195 msgid "Installing ..." msgstr "" #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "" #: thonny/plugins/microbit/__init__.py:199 msgid "You can now close this dialog." msgstr "" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "" #: thonny/plugins/micropython/__init__.py:301 msgid "Open the dialog for installing or upgrading MicroPython on your device" msgstr "" #: thonny/plugins/microbit/__init__.py:67 msgid "Could not find disk '%s'." msgstr "" #: thonny/plugins/microbit/__init__.py:69 msgid "Make sure you have micro:bit plugged in!" msgstr "" #: thonny/plugins/microbit/__init__.py:71 msgid "Do you want to continue and locate the disk yourself?" msgstr "" #: thonny/misc_utils.py:120 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "" #: thonny/misc_utils.py:123 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "" #: thonny/misc_utils.py:137 msgid "Can't find suitable disk" msgstr "" #: thonny/base_file_browser.py:259 msgid "%d items" msgstr "" #: thonny/base_file_browser.py:581 msgid "Move to Recycle Bin" msgstr "" #: thonny/base_file_browser.py:583 msgid "Move to Trash" msgstr "" #: thonny/base_file_browser.py:586 msgid "Delete" msgstr "" #: thonny/base_file_browser.py:589 msgid "New directory" msgstr "" #: thonny/base_file_browser.py:592 msgid "Properties" msgstr "" #: thonny/base_file_browser.py:593 msgid "Storage space" msgstr "" #: thonny/base_file_browser.py:603 msgid "Path" msgstr "" #: thonny/base_file_browser.py:605 msgid "Directory properties" msgstr "" #: thonny/base_file_browser.py:607 msgid "File properties" msgstr "" #: thonny/base_file_browser.py:609 msgid "bytes" msgstr "" #: thonny/base_file_browser.py:612 msgid "Size" msgstr "" #: thonny/base_file_browser.py:623 msgid "Modified" msgstr "" #: thonny/base_file_browser.py:679 msgid "Deleting %s" msgstr "" #: thonny/base_file_browser.py:701 msgid "Moving %s to %s" msgstr "" #: thonny/code.py:203 msgid "Loading" msgstr "" #: thonny/code.py:297 msgid "Saving" msgstr "" #: thonny/running.py:1408 msgid "Working..." msgstr "" #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "" #: thonny/plugins/files.py:206 msgid "Upload to %s" msgstr "" #: thonny/plugins/files.py:261 msgid "Downloading %s to %s" msgstr "" #: thonny/plugins/files.py:267 msgid "Download to %s" msgstr "" thonny-3.3.14/thonny/locale/es_ES/000077500000000000000000000000001411757431400167045ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/es_ES/HELP_CONTENT/000077500000000000000000000000001411757431400206265ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/es_ES/HELP_CONTENT/debuggers.rst000066400000000000000000000110021411757431400233210ustar00rootroot00000000000000Uso de depuradores ================== Si quieres ver cómo Python ejecuta tu programa paso a paso, entonces debes ejecutarlo en el "modo de depuración" o "más rápido". También puedes ejecutarlo con `Birdseye `_ y explorar los pasos de ejecución más tarde. Modo "mejor" ------------ Este modo se recomienda para los principiantes totales. Comience seleccionando *Depura el guión actual (mejor)* en el menú *Ejecutar* o pulsando Ctrl+F5 (`en XFCE necesitas usar Shift+Ctrl+F5 `__). Verás que la primera sentencia del programa se resalta y no ocurre nada más. En este modo necesita notificar a Thonny que está listo para dejar que Python haga el siguiente paso. Para ello tienes dos opciones principales: *Ejecutar → Saltando* (o F6) realiza pasos grandes, es decir, ejecuta el código resaltado y resalta la siguiente parte del código. *Ejecutar → Entrando* (o F7) intenta dar pasos más pequeños. Si el código resaltado está hecho de partes más pequeñas (declaraciones o expresiones), entonces la primera de ellas se resalta y Thonny espera el siguiente comando. Si ha llegado a un componente del programa que no tiene subpartes (por ejemplo, un nombre de variable) entonces *Paso a* funciona como *Paso a*, es decir, ejecuta (o evalúa) el código. Si ha entrado en las profundidades de una sentencia o expresión y quiere avanzar más rápido, entonces puede usar *Ejecutar → Saliendo*, que ejecuta el código actualmente resaltado y todas las partes siguientes del programa en el mismo nivel. Hay un comando un poco similar llamado *Reanudar*, que ejecutará el comando sin salirse hasta que se complete (o hasta el siguiente punto de interrupción, ver más abajo). Si accidentalmente hiciste un gran paso y pasaste por encima de una parte interesante del código, puede **retroceder el paso** seleccionando *Ejecutar → Volver atrás*. Thonny mostrará el estado del programa tal y como estaba antes del último paso. Ahora puede continuar con pequeños pasos y hacer zoom en este trozo de código. (¿Cómo funciona? Incluso cuando usted da un gran paso, Thonny guarda todos los estados intermedios del programa, que puede reproducir después de dar el paso atrás). Si quieres llegar a una parte específica del código, entonces puedes acelerar el proceso colocando el cursor en esa línea y seleccionando *Ejecutar → Ejecutar hasta el cursor*. Esto hace que Thonny se desplace automáticamente hasta esa línea. A partir de ahí puede tomar el comando. Si tiene activados los números de línea del editor (Herramientas → Opciones → Editor), entonces puede también usar **puntos de ruptura**. Cuando hace doble clic junto a una sentencia en el margen izquierdo del editor, un punto aparece. Cuando ahora inicie el depurador, no se detendrá antes de la primera sentencia, sino que correrá hasta la declaración marcada con el punto, también conocido como punto de interrupción. Puede colocar tantos puntos de interrupción en sus programas como necesarios. Los puntos de interrupción se pueden eliminar haciendo doble clic en los puntos. Modo "rápido" ------------- Cuando tus programas crecen, puedes notar que dar grandes pasos con el depurador más bonito lleva a veces mucho tiempo. Esto se debe a que las sutilezas (por ejemplo, la posibilidad de pasar por la evaluación de expresiones y dar pasos atrás) requieren una maquinaria pesada y lenta. Con *Depura el script actual (rápidamente)* se pierden las sutilezas pero se puede recorrer el programa mucho más rápido. Puede usar los mismos comandos (excepto "Paso atrás") que con un depurador más agradable. Este es el estilo de depuración al que la mayoría de los programadores programadores profesionales están acostumbrados. Diferentes estilos para mostrar la pila de llamadas --------------------------------------------------- Por defecto, Thonny utiliza ventanas apiladas para presentar la pila de llamadas. Esto da una buena intuición sobre el concepto, pero puede llegar a ser engorroso de usar. Por ello, desde la versión 3.0 se puede elegir entre dos estilos diferentes para presentar la pila de llamadas. En "Herramientas → Opciones → Ejecutar y Depura" se puede cambiar a un estilo más tradicional con una vista separada para presentar y cambiar los marcos de llamadas. Tenga en cuenta que ambos estilos se pueden utilizar con ambos modos de depuración. Birdseye -------- El comando *Depura el script actual (birdseye)* se explica en una `página separada `_ thonny-3.3.14/thonny/locale/es_ES/HELP_CONTENT/debugging.rst000066400000000000000000000125101411757431400233120ustar00rootroot00000000000000Técnicas de depuración ====================== Si tu programa no funciona correctamente, no te asustes. Tienes varias posibilidades para arreglar la situación. Por ejemplo: * Dejar que otra persona lo arregle. * Cambiar *algo* en el código y volver a intentarlo. * Aborda el problema en dos fases: 1) diagnosticar el problema y 2) solucionarlo. Pedir ayuda puede ser una muy buena idea, pero no te dará esta dulce sensación de logro. De todos modos, es mejor no usar esto sin antes hacer un esfuerzo por tu cuenta. Si tus programas son pequeños, puede que te toque el premio gordo cambiando algo al azar e intentándolo de nuevo (repite muchas veces), pero perderás aunque ganes ya que no aprenderás nada. Si quieres llegar a ser bueno en la programación, entonces realmente necesitas abordar el problema de forma más sistemática. Esto significa, entre otras cosas, que tienes que identificar la razón por la que tu programa se comporta mal antes de intentar arreglarlo. El proceso de encontrar el origen del problema se llama *depuración*. Rastrear el flujo del programa / pensar con Python -------------------------------------------------- Lo más probable es que tu programa no esté del todo mal. Puede haber un error tipográfico en alguna parte o que hayas pasado por alto o malinterpretado algo. *¡NB! No te acostumbres a pensar que Python te ha malinterpretado -- es una máquina que ni siquiera intenta entenderte*. La clave de la depuración es encontrar precisamente dónde y cuándo tus suposiciones sobre el comportamiento del programa divergen del comportamiento real. Si su programa imprime una respuesta final incorrecta, esto le dice algo sobre el comportamiento del programa, pero normalmente no es suficiente para localizar el problema con precisión. También debe comprobar qué **pasos intermedios** se ajustan a sus suposiciones y cuáles no. Una técnica obvia (y muy útil) es añadir **sentencias de impresión adicionales** en el código, que te digan dónde está Python y qué ha logrado hasta ahora, por ejemplo .. code:: print("amigos antes del bucle for", amigos) NOTA. A veces es necesario introducir nuevas variables y dividir expresiones complejas en partes más pequeñas para imprimir información más detallada. Aunque la *depuración con prints* es utilizada incluso por los profesionales (pueden llamarlo *logging*), hay una alternativa, que es más cómoda en la mayoría de los casos. Se llama **recorrer el código** y es el pan de cada día de Thonny. Pasa al capítulo `Uso de depuradores `_ para saber más. Revisión de código ------------------ Otra técnica útil es la revisión del código. Es algo similar a trazar el flujo del programa, pero lo haces en tu cabeza y estás tratando de ver la imagen más grande en lugar de seguir pequeños pasos. Observa cada una de las sentencias de tu código e intenta comprender su propósito y cómo se relaciona con tu tarea. Para cada **variable**, pregúntate: * ¿El nombre de la variable revela su propósito? ¿Es mejor nombrarla en singular o en plural? * ¿Qué tipo de valores puede contener esta variable? ¿Cadenas, enteros, listas de cadenas, listas de flotantes, ...? * ¿Cuál es la función de la variable? ¿Está destinada a actualizarse repetidamente para que eventualmente contenga información útil? ¿Está pensada para utilizar la misma información en varios lugares y reducir el copiado? ¿Algo más? Para cada **bucle**, pregúntate: * ¿Cómo sabes que el bucle es necesario? * ¿Cuántas veces debe ejecutarse el cuerpo del bucle? ¿De qué depende esto? * ¿Qué código debe estar dentro del bucle y cuál fuera? * ¿Qué debe hacerse antes del bucle y qué debe hacerse después? Para cada **expresión** compleja pregúntese * ¿En qué orden deben estar los pasos de evaluación de esta expresión? ¿Está Python de acuerdo con esto? En caso de duda, utilice el depurador o introduzca variables de ayuda y divida la expresión en partes más pequeñas. * ¿Qué tipo de valor debería salir de esta expresión? ¿Cadenas? ¿Lista de cadenas? También es posible que te falten algunas partes importantes en tu programa: * ¿Su tarea requiere tratar diferentes situaciones de forma diferente? Si la respuesta es afirmativa, es probable que necesite una sentencia if. * ¿La tarea requiere hacer algo varias veces? En caso afirmativo, probablemente necesite un bucle. ¿Sigue perdiendo el hilo? ------------------------- "Encuentre el lugar donde se rompen sus suposiciones" - esto es definitivamente más fácil de decir que de hacer. En el caso de programas complejos es fácil llegar a la situación en la que ya no estás seguro de lo que asumes y de por qué empezaste con esto de la programación. En este caso es útil simplificar tu tarea tanto como sea posible y tratar de implementar el problema más simple primero. Toma un nuevo editor y empieza desde cero o copia el código existente y desecha todo lo que no sea esencial para el problema. Por ejemplo, puedes asumir que el usuario es cooperativo y que siempre introduce datos "buenos". Si la tarea requiere hacer algo repetidamente, entonces elimine la parte "repetidamente", si la tarea implica una condición compleja para hacer algo, haga la condición más simple, etc. Después de resolver el problema simplificado, estarás mucho mejor equipado para resolver también la tarea original. thonny-3.3.14/thonny/locale/es_ES/HELP_CONTENT/errors.rst000066400000000000000000000041541411757431400227000ustar00rootroot00000000000000Comprender los errores ====================== Si tu programa da errores o resultados erróneos, no intentes arreglar nada antes de entender el problema. Puedes leer una historia más larga en `otra página `__, aquí tienes una lista de comprobación rápida para poner en marcha tus ideas. ¿Tienes miedo? -------------- No lo tengas. Los mensajes de error están pensados para ayudar. Si recibes un error no significa que seas una mala persona. Y no, no has roto el ordenador. Aunque los mensajes de error pueden parecer un bloque de galimatías al principio, con la práctica es posible extraer información útil de ellos. ¿En qué parte del código se produjo el error? --------------------------------------------- Los mensajes de error en Thonny tienen enlaces que te llevan al lugar del código que causó el error. En el caso de varios enlaces, el último suele ser el más relevante. Si el error ocurrió dentro de una función, entonces el mensaje tiene varios enlaces. Intente hacer clic en ellos uno a uno de arriba a abajo y verá cómo Python llegó al lugar del error. Este conjunto de enlaces se llama *el seguimiento de la pila*. ¿Qué significa el error? ------------------------ La última línea del bloque de error dice cuál fue el problema para Python. Cuando intentes comprender el mensaje, no olvides el contexto y trata de relacionar algunas partes del mensaje con el lugar vinculado en el código. A veces el Asistente de Thonny puede explicar el error en términos más sencillos, a veces hay que hacer una búsqueda en internet del mensaje (no olvides añadir "Python" a la búsqueda). ¿Qué había dentro de las variables en el momento del error? ----------------------------------------------------------- ¡Abre la vista de variables y mira tú mismo! Si el error ocurrió dentro de una función, entonces puedes ver las variables locales haciendo clic en el seguimiento de la pila. ¿Cómo llegó el programa a este estado? -------------------------------------- Vea `la página sobre depuración `_ o `la página sobre el uso de los depuradores de Thonny `_. thonny-3.3.14/thonny/locale/es_ES/LC_MESSAGES/000077500000000000000000000000001411757431400204715ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/es_ES/LC_MESSAGES/thonny.mo000066400000000000000000000777611411757431400223670ustar00rootroot00000000000000L ||}]$) *3^ m&z+-! D.7s&      1x?  &5< P[j;{    , GD I [ c <x % * !%!8!U!Y!^!d!y!!!3!""1"8"H" Q"]"m"u"|""!" """ #B#\#b#g#v### ##%##/#'$.B$q$ w$$$ $$ $$$$ $$$$$ %"%(% 1% >% I%U%g%,&/2&=b& &&&&&0&' ''6,'c'}'''''''''L(FM((C\)))7)***!*9*X* s** ** ***3*+ ++&+/+E+T+Y+ a+l+|+ +++~,z1-;---. %.13. e......../ /"/n2//,v000<01-1U1c)222 2n2!3 53 A3 O3 ]3k3q333?3C3454'S4){4 444445&5;5TC5 5555 555H5O'65w66666667 $707:87s7x77&777777 8 8 8*8;8M8a8f8 x8B888 88 8&9)9 19=9 V9 d9q99 999 9 999 9"9: : /: :: G: U:`: g:t:z:: :: : ::2:/;8O;;:;; ;< <0!<R<d<v< {< <<<-<< < <= === 0= ==)K=u=}= ====== =>=n=>0>!> > ? ? @b@@ATA/fAA@PBBB"BBB B CC#C0,C ]CgC lCvCCCCCCC CC2D%7D]DcD lDvDDDLDDD5E EEEECF#YF}F F FF FF1F%F G%GV7GIG GG GGH&H HsH'BIJjI&III;I8JBKJ@J*JHJ5CK*yK K KKK KK KKLLLLLL7L*3M^MgM ~MMMQM N&N@NHNXN^NdN kN xNNNPOiO O^OOO PPD-P-rP1PPPQQ%Q+Q3Q"KQ&nQQ=Q!Q&RXDX=wXX%XX#Y!7YYY`YrYuY ~YjYZYRZ9Z9["T[Cw[[[[[)[!'\ I\W\ k\v\ \\\F\\ \ ] ]']@]Q]X] a]m] ] ](]]^__?_'`D`Z`r`;`&`*`a"a:aNa faqayaaaXa b3 c9=cKwccDbd[dmeqexeexe(f:f Kf Yf ffsfyfffJfQf@g!_g(g2g gg%g2hRhnhhhch ii#i+i2iCiZiHbiUiFjHj _jkjqjvj0j"jjj=k>kEkVkFjk kk k&kll /l;lKl\lqllll[lm m &m3mIm8[m mm'mmmmn n'n0n9nLn`n%znn*nnnoo+o ?o LoVoeomo|ooooo.o> p7IpZppFp6q&RqyqqBqqqrr r/r Nr1[r r rrrrrrrs>s[scszs%s s ssssB tMt3t)u,uy Qy"ry y+yyyz5 z@z[z dzpzzz zzzz zz8 {9C{}{ { {{{{d{K=|| +}6}V}k}G}&}}}~~ !~/~:5~)p~~,~b~V; %d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAdvanced optionsAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAttributesAuthenticationAuthorAuto-completeBackBack to %sBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?CancellingCase sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)Configure %s filesConfigure interpreter...ConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating directoryCreating virtual environmentCutDataDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDelete selectedDeletingDeleting %sDesired versionDetailsDeviceDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter name for new directory under %sEnter string to be replaced.Enter the passphrase of your private key for {}Enter your password for {}Environment variables (one KEY=VALUE per line)ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile name:File propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.For uninstalling delete corresponding files.For upgrading simply install the package again.Found several '%s' disks. Do you want to choose one yourself?Full screenFunctionFunction call at %sGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHide hidden filesHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHighlight tab charactersHomeHomepageIDINSTALLIO fontIf last command raised an exception then this view will show the stacktrace.If you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesIndent with tab characters (not recommended for Python)IndexInstallInstall from PyPIInstall from local fileInstall from requirements fileInstall or update firmwareInstalled to:Installed version:InstallingInstalling '%s'InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKeyKey IDKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLoading %sLocal variablesLocationLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (SSH)MicroPython (generic)MicroPython (local)MicroPython deviceModifiedModuleMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! File selection button may not work properly when selecting executables from a virtual environment. In this case choose the 'activate' script instead of the interpreter (or enter the path directly to the box)!NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NB! micropython.org has published version %s of this package and this will be installed by default.NameNewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.New packages will be installed toNext objectNot availableNot connectedNot supportedNotesNothing selectedOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen evaluated values in Object inspectorOpen from %sOpen in ThonnyOpen in Thonny's text editorOpen in system default appOpen in system file managerOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Package is not available at micropython.org. Version at PyPI will be installed.Package manager is not available for this interpreterPackages' directoryPasswordPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!Please waitPlotterPlotter visualizes series of numbers printed to the Shell.PortPort or WebREPLPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython executablePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRemote Python 3 (SSH)Rename...Reopen all files from previous sessionReplaceReplace allReplace tabs with spacesReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave All filesSave as...Save copy...Save passwordSave to %sSavingSaving to %sScopeSearch on PyPISearch resultsSearchingSee Help for details.Select AllSelect allSelect an item and try again!Select empty directory for new virtual environmentSelect existing or create a new empty directorySelect if the file dialogs end up behind the main windowSelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShadowed items (not importable):ShellShow PlotterShow function calls (frames) in separate windowsShow hidden filesShow line numbersSizeSize (bytes)Source codeSqueezed text (%d characters)StackStart by selecting the package from the left.StartingStep backStep intoStep outStep overStopStop/Restart backendStorage infoStorage spaceStorage space on this drive or filesystemSummarySwitch to regular modeSyntax themeTarget device locationTarget device modelTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The representation above is an approximate value of this float. The exact stored value is %s which is about %sThe same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis dialog lists top-level modules from following directories: This is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUninstalling '%s'Unsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpgrading '%s'Upload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingUse Tk file dialogs instead of ZenityValueValue IDVariablesVersion historyVersion to be installedViewWhat to do with a %s file when you double-click it in Thonny's file browser?Which interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!You need to stop your program before launching the package manager.Your interpreter isn't in the list?Zoomall filesblah, blahbytesfree spaceherelook for your device name, "USB Serial" or "UART"no absolute lib directory in sys.pathplease waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.total spaceunclosed_stringused spaceuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: es %d ítemes(En este caso el back-end de Thonny usa el mismo intérprete, por lo que ambos diálogos usan los mismos paquetes.)(Reinicia Thonny luego de cambiar esto)(utilizado al hacer clic en el botón Depurar de la barra de herramientas)Un entorno virtual especial (obsoleto)Sobre BirdseyeAcerca de ThonnyInstalación / Actualización / Desactualización avanzadasOpciones avanzadasPermitir el completado de código con la tecla "Tab" en la ConsolaPermitir el completado de código con la tecla "Tab" en editoresPermitir solamente una instancia de ThonnyPermitir entrar en librerías fuera del directorio principal del script.Intérprete de Python 3 alternativo o entorno virtual¿Está seguro de que desea desinstalarlo?AsistenteAtributosAutenticaciónAutorAutocompletarAtrásVolver a %sVolver al marco actualDirectorio incorrectoBirdseye es un depurador de Python que debe instalarse por separado. ¿Desea abrir la página de ayuda y obtener más información?Puerto para BirdsyeNavegar por los paquetesRastreador de erroresAún no se puede cerrarNo se pudo encontrar el nombre del paquete en la lista:No es posible encontrar un disco apropiadoCancelar¿Cancelar el proceso?CancelandoSensible a mayúsculasCambiar tamaño de fuenteCambia directorio de trabajo a directorio del script en la Ejecución/DepuraciónCircuitPython (genérico)Dispositivo CircuitPythonLimpiarLimpiar consolaClickClic CerrarCerrar todosCerrar otrosConvertir en comentarioLa configuración ha sido actualizada. Reinicia Thonny para empezar a trabajar de manera normal. (Ver 'Herramientas → Opciones → General' si cambias de opinión más tarde.)Configurando %s archivosConfigurar interprete...ConfirmaciónConecte su dispositivo a la computadora y seleccione el puerto correspondiente a continuaciónCopiarCopiar al portapapelesCopiandoCopiando %s a %sNo se pudo encontrar el disco '%s'. ¿Quieres localizarlo tú mismo?No se ha podido encontrar el paquete en PyPI.No se encontró información del paquete en PyPI.Crear un nuevo entorno virtualCreando directorioCreando ambiente virtual.CortarDatosDepurarDepura el script actualDepura el script actual (birdseye)Depura el script actual (rápidamente)Depura el guión actual (mejor)Modo de depuración (con diagnóstico detallado de registros)Disminuir el tamaño de la fuenteDes-indentar las líneas seleccionadasEliminarBorrar seleccionadoBorrandoBorrando %sVersión deseadaDetallesDispositivoPropiedades del directorioDesactivar los sonidos de notificaciónDesactivar comprobaciones (un id por línea)Desconectar¿Quieres sobreescribir '%s'?Anclar las ventanas de usuarioDocumentaciónNo olvide que main.py solo funciona sin un script principal incrustado.¡Listo!AbajoDescargar a %sDescargando %s a %sEditarEditorLetra editorIngresa un número enteroIngrese el nombre para el nuevo directorio en %sIntroducir la cadena a sustituir.Ingrese la frase de contraseña de su clave privada para {}Ingrese su contraseña para {}Variables de Entorno (una CLAVE=VALOR por línea)ErrorCódigo de error:Error:EventosExcepciónSalirSalir de ThonnyExpandir en la consolaExportar registros de uso...FicheroNombre de archivo:Propiedades del archivoArchivosEncontrarEncontrar y reemplazar…Encontrar un paquete en PyPIEncontrar:FirmwareIr al editorCentrarse enIr al terminalModo de escalado de fuentePor razones de rendimiento, la consola evita mostrar líneas muy largas (ver Herramientas → Opciones → Consola). Aquí puedes interactuar con el fragmento de texto original.Para desinstalar, elimine los archivos correspondientes.Para actualizar, simplemente instale el paquete nuevamente.Se encontraron varios discos '%s'. ¿Quieres elegir uno tú mismo?Pantalla completaFunciónLlamada de función en %sGeneralMontículo (heap)Modo heap (montículo) activado. Seleccione "Vista heap" para cerrarlo. AyudaContenidos de la AyudaNo mostrar archivos ocultosResaltar la línea actual (requiere abrir de nuevo el editor)Resaltar las variables localesResaltar las coincidencias de nombresResaltar los paréntesisResaltar los elementos sintácticosResaltar los caracteres tabuladorInicioPágina principalIDINSTALARLetra Ent/SalSi el último comando generó una excepción, esta vista mostrará el seguimiento de la pila (stacktrace).Si no puede encontrarlo, es posible que primero deba instalar el controlador USB adecuado.Si no sabes dónde está el paquete, probablemente querrás buscarlo en Python Package Index. Entonces introduce el nombre del paquete en la caja de búsqueda y pulsa ENTERSi aún lo desea, instálelo desde la línea de comandos.Aumentar tamaño de fuenteIndentar las líneas seleccionadasSangría con caracteres de tabulación (no recomendado para Python)ÍndiceInstalarInstalar desde PyPIInstalar desde archivo localInstalar desde archivo "requirements.txt"Instalar o actualizar el firmwareInstalado en:Versión instalada:InstalandoInstalando '%s'IntérpreteInterrumpir ejecuciónDentroMantener la terminal abierta luego de que el proceso de Python termineLlaveID de LlaveIntérpretes conocidosIdiomaÚltima versión estableÚltima versiónCargarCargandoCargando %sVariables localesUbicaciónUbicación: Registra los eventos de uso del programaParece que estás instalando un paquete relacionado con Thonny. Si lo que querías es instalar un plugin de Thonny, entonces deberías elegir 'Herramientas → Administrar plugins…' ¿Seguro que quieres instalar %s para el back-end?Parece que estás intentando instalar un plug-in de Thonny obsoleto (no especifica la versión de Thonny requerida). Si desea instalarlo, instálelo desde la línea de comandos.Hecho en la Universidad de Tartu, Estonia, con la ayuda de la comunidad de código abierto, la Raspberry Pi Foundation y Cybernetica ASAsegúrese de que MicroPython se haya instalado en su micro:bitAdministrar paquetes para %sGestionar paquetes...Administra plug-ings…Maximizar vistaMaxima longitud de un fragmento de texto antes de condensarNúmero máximo de líneas a mantener.Tal vez haga de la depuración más lenta.MicroPython (SSH)MicroPython (genérico)MicroPython (local)Dispositivo MicroPythonModificadoMóduloMover a la papeleraMover al basureroMoviendo %s a %s¡Aviso! El cierre automático debe estar habilitado en la configuración de la TerminalNB: El botón de selección de ficheros puede que no funcione bien cuando se seleccionen ejecutables de un entorno virtual. En este caso elegir el script 'activar' en vez del intérprete (o entrar el path –camino del fichero– directamente en la caja)¡Aviso! ¡Valores grandes degradan el rendimiento!NB! ¡Reinicia Thonny después de cambiar estas opciones!¡Aviso! ¡Algunos elementos de estilo cambiaran luego de reiniciar Thonny!¡NB! Debe haber otra versión disponible que sea compatible con la versión actual de Thonny. Click en el botón '…' para elegir la versión e instalarla.NB! Thonny solo es compatible con Python 3.5 y versiones posteriores¡NB! Debe reiniciar Thonny después de instalar / actualizar / desinstalar un complemento.¡Aviso! micropython.org ha publicado la versión %s de este paquete y se instalará de forma predeterminada.NombreNuevo programaNuevo DirectorioTambién se instalarán nuevos paquetes en este directorio. Otras ubicaciones deben gestionarse por medios alternativos.Los nuevos paquetes serán instalados enObjeto siguienteNo disponibleNo conectadoNo soportadoNotasNada seleccionadoOkInspector de objetosAbrir el asistente automáticamente cuando haya advertencias en tu códigoAbrir el asistente automáticamente cuando el programa falle y dé una excepciónAbre la carpeta Thonny data…Abre la carpeta Thonny program…Abrir y cerrar el Stack automáticamenteAbrir valores evaluados en el inspector de objetosAbrir de %sAbrir en ThonnyAbrir en el editor de texto de ThonnyAbrir en la aplicación predeterminada del sistemaAbrir en gestor de archivosAbrir moviola…Abre el shell del sistema…Abrir fichero...Abre la vista Pila en la primera llamada y la cierra cuando el programa regresa al marco principal.Opciones...SalirEsquemaSaltar¿Sobreescribir?Sobrescribir tema '%s PaqueteEl paquete '{}' es requerido para instalar y desinstalar otros paquetes.El paquete no está disponible en micropython.org. Se instalará la versión de PyPI.El administrador de paquetes no está disponible para este intérpreteDirectorio de paquetesContraseñaPegarRutaRealizar comprobaciones MyPyRealizar las comprobaciones Pylint seleccionadas¡Por favor revisa tu ortografía!Espere por favorPlóterPlóter visualiza series de números mostradas en la consola.PuertoPuerto o WebREPLDepurador preferidoContinuar con el REPL de Python luego de la finalización del programaPrevisualizarObjeto anteriorImprimir...Parámetros de ejecución del programaArgumentos del programa:Árbol del programaPropiedadesPágina de PyPIModo Pygame ZeroEjecutable de PythonIntérpretes de PythonSalir¿Desea desinstalarlo?Archivos recientesLongitud de línea máxima recomendada (establecer a 0 para desactivar el margen de línea)RehacerRefrescarModo regularPython 3 Remoto (SSH)Cambiar nombre...Volver a abrir todos los archivos de la sesión anteriorReemplazarReemplazar todoReemplazar los tabuladores por espaciosReemplazar por:Reemplazar+EncontrarInformar de un problemaRequiereRequiere:ReanudarEjecutarEjecutar y DepurarEjecutar / reanudarEjecutar el script actualEjecutar el script actual en terminalEjecutar hasta el cursorEjecutando el script actual en la terminalGuardarSalvar todos los ficherosGuardar como...Guardar una copia...Guardar contraseñaGuardar a %sGuardandoGuardando a %sAlcanceBuscar en PyPIResultados de la búsquedaBuscandoVea Ayuda para detalles.Seleccionar todoSeleccionar todoSeleccione un artículo y vuelva a intentarlo.Seleccione un directorio vacío para el nuevo entorno virtual.Seleccione directorio existente o cree uno nuevo vacíoSeleccione si los cuadros de diálogo del archivo terminan detrás de la ventana principalElegir intérpreteEl directorio seleccionado no está vacío. Seleccione otro o cancele.Envía EOF / Reinicio suaveElementos duplicados (no importables):ConsolaMuestra PlotterMuestra en ventanas separadas los entornos cada llamada a funciónMostrar archivos ocultosMostrar números de líneaTamañoTamaño (bytes)Código fuenteTexto reducido (%d caracteres)Pila (stack)Comience seleccionando el paquete de la izquierdaIniciandoVolver atrásEntrandoSaliendoSaltandoDetenerDetener/Reiniciar back-endInformación de almacenamientoEspacio de almacenamientoEspacio de almacenamiento en esta unidad o sistema de archivosResumenCambiar a modo regularColor SintaxisUbicación del dispositivo de destinoModelo de dispositivo de destinoObjetivo:TerminalEmulación de terminalLa respuesta esAún está en ejecución el proceso. ¿Realmente quieres cancelar?La representación de arriba es un valor aproximado de este 'float'. El valor almacenado exacto es %s, que es aproximadamente %sEl mismo intérprete que corre Thonny (por defecto)No se ha encontrado el texto especificadoTemas y FuentesEsta casilla es para sus notas de trabajo -- instrucciones de asignación, fragmentos de código, o similares. Todo se guardará automáticamente y se cargará cuando abra Thonny la próxima vez. Sírvase borrar este texto para hacer sitio a sus propias notas.Este computadorEste cuadro de diálogo es para administrar los complementos de Thonny y sus dependencias. Si desea instalar paquetes para sus propios programas, elija 'Herramientas → Administrar paquetes ...'Este diálogo lista todos los paquetes disponibles, pero sólo actualiza y desinstala paquetes deEste cuadro de diálogo enumera los módulos de nivel superior de los siguientes directorios:Este es un comentarioEste paquete requiere una versión diferente de Thonny:Este programa viene completamente sin garantía. Es software libre, por lo que puede redistribuirse bajo unas determinadas condiciones: véase https://opensource.org/licenses/MIT para más detallesEste ambiente virtual es mantenido automáticamente por Thonny.Opciones de ThonnyPlug-ins de ThonnyPlugin the Thonny sin requisitosActivar/desactivar como comentarioHerramientasIntenta detectar el puerto automáticamenteModo Interfaz Usuario (IU)Factor de escalado de IUAspectoNo marcar si quiere una experiencia más tradicional.Desactivar como comentarioDeshacerDesinstalarDesinstalando '%s'Requisitos inadecuadosArribaActualizadoActualizar dependenciasActualiza o desinstalaActualizando '%s'Subir a %sSubiendo %s a %sUtiliza la orden "Stop" si desea cancelar la depuraciónUse cuadros de diálogo de archivos Tk en lugar de ZenityValorID de valorVariablesHistorial de versionesVersión a ser instaladaVisualización¿Qué hacer con un archivo %s cuando hace doble clic en él en el explorador de archivos de Thonny?¿Qué intérprete o dispositivo debe usar Thonny para ejecutar tu código?Con el intérprete actual sólo puedes visualizar los paquetes aquí. Use 'Herramientas -> Abrir consola del sistema...' para instalar, actualizar o desinstalar.TrabajandoAjustar texto (puede ser lento)Necesitas introducir¡Debes seleccionar un archivo!Debe detener su programa antes de iniciar el administrador de paquetes.¿No está tu intérprete en la lista?Zoomtodos los archivosbla, blabytesespacio libreaquíbuscar por un nombre de dispositivo, "USB Serial" o "UART"Sin directorio lib absoluto en 'sys.path'por favor esperesoporte para colores y estilos básicos ANSIpara localizar e instalar el fichero del paquete (usualmente con extensión .whl o .tar.gz o .zip)para localizar el fichero requirements.txt e instalar los paquetes allí especificadosespacio totalstring_sin_cerrarespacio ocupadopaquetes del sitio del usuarioentorno virtualthonny-3.3.14/thonny/locale/es_ES/LC_MESSAGES/thonny.po000066400000000000000000001436361411757431400223650ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: es\n" #: thonny/workbench.py:357 msgid "File" msgstr "Fichero" #: thonny/workbench.py:358 msgid "Edit" msgstr "Editar" #: thonny/workbench.py:359 msgid "View" msgstr "Visualización" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "Ejecutar" #: thonny/workbench.py:361 msgid "Tools" msgstr "Herramientas" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "Ayuda" #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "Intérprete de Python 3 alternativo o entorno virtual" #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "Un entorno virtual especial (obsoleto)" #: thonny/workbench.py:582 msgid "Exit" msgstr "Salir" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "Disminuir el tamaño de la fuente" #: thonny/workbench.py:621 msgid "Focus editor" msgstr "Ir al editor" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "Ir al terminal" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "Maximizar vista" #: thonny/workbench.py:653 msgid "Full screen" msgstr "Pantalla completa" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "Parámetros de ejecución del programa" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "Acerca de Thonny" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Hecho en la Universidad de Tartu, Estonia, con la ayuda de la comunidad de código abierto, la Raspberry Pi Foundation y Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "Este programa viene completamente sin garantía. Es software libre, por lo que puede redistribuirse bajo unas determinadas condiciones: véase https://opensource.org/licenses/MIT para más detalles" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "Historial de versiones" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "Informar de un problema" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "Abrir el asistente automáticamente cuando el programa falle y dé una excepción" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "Abrir el asistente automáticamente cuando haya advertencias en tu código" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "Realizar las comprobaciones Pylint seleccionadas" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "Realizar comprobaciones MyPy" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "Desactivar comprobaciones (un id por línea)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "Asistente" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "Autocompletar" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "¿Qué intérprete o dispositivo debe usar Thonny para ejecutar tu código?" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "Intérprete" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "Sobre Birdseye" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Birdseye es un depurador de Python que debe instalarse por separado.\n" "\n" "¿Desea abrir la página de ayuda y obtener más información?" #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "Depura el script actual (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "Activar/desactivar como comentario" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "Convertir en comentario" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "Desactivar como comentario" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "Deshacer" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "Rehacer" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "Cortar" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "Copiar" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "Pegar" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "Seleccionar todo" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "Ejecutar hasta el cursor" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "Aún no se puede cerrar" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "Utiliza la orden \"Stop\" si desea cancelar la depuración" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "Anclar las ventanas de usuario" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "Resaltar las coincidencias de nombres" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "Resaltar las variables locales" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "Resaltar los paréntesis" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "Resaltar los elementos sintácticos" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "Resaltar la línea actual (requiere abrir de nuevo el editor)" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "Permitir el completado de código con la tecla \"Tab\" en editores" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "Permitir el completado de código con la tecla \"Tab\" en la Consola" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "Mostrar números de línea" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "Longitud de línea máxima recomendada (establecer a 0 para desactivar el margen de línea)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "Editor" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "Exportar registros de uso..." #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "Eventos" #: thonny/plugins/files.py:551 msgid "Files" msgstr "Archivos" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "Encontrar y reemplazar…" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "Encontrar:" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "Reemplazar por:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "Sensible a mayúsculas" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "Arriba" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "Abajo" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "Encontrar" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "Reemplazar" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "Reemplazar+Encontrar" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "Reemplazar todo" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "Introducir la cadena a sustituir." #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "No se ha encontrado el texto especificado" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "Permitir solamente una instancia de Thonny" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "Volver a abrir todos los archivos de la sesión anterior" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "Desactivar los sonidos de notificación" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "Modo de escalado de fuente" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "Modo heap (montículo) activado. Seleccione \"Vista heap\" para cerrarlo.\n" "" #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "Montículo (heap)" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "Idioma" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "Esta casilla es para sus notas de trabajo -- instrucciones de asignación, fragmentos de código, o similares.\n" "\n" "Todo se guardará automáticamente y se cargará cuando abra Thonny la próxima vez.\n" "\n" "Sírvase borrar este texto para hacer sitio a sus propias notas." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "Notas" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "Objeto anterior" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "Objeto siguiente" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "Inspector de objetos" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "Esquema" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "Modo Pygame Zero" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "Encontrar un paquete en PyPI" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "Desinstalar" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "Cerrar" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "Clic " #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "aquí" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "Actualizado" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "Instalar" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "No se ha podido encontrar el paquete en PyPI." #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "Última versión estable" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "Última versión" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "Resumen" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "Autor" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "Página principal" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "Rastreador de errores" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "Documentación" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "Página de PyPI" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "Requiere" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "¿Desea desinstalarlo?" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "¿Está seguro de que desea desinstalarlo?" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "Volver al marco actual" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "Variables" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "Este computador" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "Refrescar" #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "Centrarse en" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "Error" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "¡Debes seleccionar un archivo!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "¿Sobreescribir?" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "¿Quieres sobreescribir '%s'?" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "Nuevo programa" #: thonny/editors.py:565 msgid "Open..." msgstr "Abrir fichero..." #: thonny/editors.py:567 msgid "Load" msgstr "Cargar" #: thonny/editors.py:576 msgid "Recent files" msgstr "Archivos recientes" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "Cerrar todos" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "Guardar" #: thonny/editors.py:633 msgid "Save as..." msgstr "Guardar como..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "Guardar una copia..." #: thonny/editors.py:653 msgid "Rename..." msgstr "Cambiar nombre..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "Opciones de Thonny" #: thonny/running.py:121 msgid "Run current script" msgstr "Ejecutar el script actual" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "Ejecutar el script actual en terminal" #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "Detener/Reiniciar back-end" #: thonny/running.py:166 msgid "Stop" msgstr "Detener" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "Interrumpir ejecución" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "Envía EOF / Reinicio suave" #: thonny/running.py:201 msgid "Disconnect" msgstr "Desconectar" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "Intérpretes conocidos" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "¿No está tu intérprete en la lista?" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "NB! Thonny solo es compatible con Python 3.5 y versiones posteriores" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "Crear un nuevo entorno virtual" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "Seleccione directorio existente o cree uno nuevo vacío" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "Intérpretes de Python" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "todos los archivos" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "Seleccione un directorio vacío para el nuevo entorno virtual." #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "Directorio incorrecto" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "El directorio seleccionado no está vacío.\n" "Seleccione otro o cancele." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "Creando ambiente virtual." #: thonny/shell.py:83 msgid "Clear shell" msgstr "Limpiar consola" #: thonny/shell.py:138 msgid "Plotter" msgstr "Plóter" #: thonny/shell.py:269 msgid "Clear" msgstr "Limpiar" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "Muestra Plotter" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "Por razones de rendimiento, la consola evita mostrar líneas muy largas (ver Herramientas → Opciones → Consola).\n" "Aquí puedes interactuar con el fragmento de texto original." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "Ajustar texto (puede ser lento)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "Copiar al portapapeles" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "Expandir en la consola" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "Texto reducido (%d caracteres)" #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "Plóter visualiza series de números mostradas en la consola." #: thonny/shell.py:1796 msgid "See Help for details." msgstr "Vea Ayuda para detalles." #: thonny/ui_utils.py:449 msgid "Close others" msgstr "Cerrar otros" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "Copiando" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "Copiando\n" " %s\n" "a\n" " %s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "Cancelar" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "Ok" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "¿Cancelar el proceso?" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "Aún está en ejecución el proceso.\n" "¿Realmente quieres cancelar?" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "Seleccionar todo" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "Consola" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "El mismo intérprete que corre Thonny (por defecto)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "Este ambiente virtual es mantenido automáticamente por Thonny." #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "Ubicación: " #: thonny/workbench.py:592 msgid "Options..." msgstr "Opciones..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "Aumentar tamaño de fuente" #: thonny/workbench.py:664 msgid "Change font size" msgstr "Cambiar tamaño de fuente" #: thonny/workbench.py:665 msgid "Zoom" msgstr "Zoom" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "Salir de Thonny" #: thonny/workbench.py:677 msgid "Quit" msgstr "Salir" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "Sobrescribir tema '%s " #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "Argumentos del programa:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "Modo regular" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "La configuración ha sido actualizada. Reinicia Thonny para empezar a trabajar de manera normal.\n" "\n" "(Ver 'Herramientas → Opciones → General' si cambias de opinión más tarde.)" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "Árbol del programa" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "Elegir intérprete" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "Reanudar" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "Ejecutar / reanudar" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "Depura el script actual" #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "Depurar" #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "Depura el guión actual (mejor)" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "Depura el script actual (rápidamente)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "Saltando" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "Saltar" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "Entrando" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "Dentro" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "Saliendo" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "Salir" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "Volver atrás" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "Atrás" #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "Pila (stack)" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "Excepción" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "Registra los eventos de uso del programa" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "Modo de depuración (con diagnóstico detallado de registros)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "Modo Interfaz Usuario (IU)" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "Factor de escalado de IU" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "NB! ¡Reinicia Thonny después de cambiar estas opciones!" #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "General" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "INSTALAR" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "Navegar por los paquetes" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "Con el intérprete actual sólo puedes visualizar los paquetes aquí.\n" "Use 'Herramientas -> Abrir consola del sistema...' para instalar, actualizar o desinstalar." #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "Directorio de paquetes" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "Instalar desde PyPI" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "Si no sabes dónde está el paquete, probablemente querrás buscarlo en Python Package Index. Entonces introduce el nombre del paquete en la caja de búsqueda y pulsa ENTER" #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "para localizar el fichero requirements.txt e instalar los paquetes allí especificados" #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "Click" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "para localizar e instalar el fichero del paquete (usualmente con extensión .whl o .tar.gz o .zip)" #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "Actualiza o desinstala" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "Comience seleccionando el paquete de la izquierda" #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "Objetivo:" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "entorno virtual" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "paquetes del sitio del usuario" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "Este diálogo lista todos los paquetes disponibles, pero sólo actualiza y desinstala paquetes de" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "También se instalarán nuevos paquetes en este directorio. Otras ubicaciones deben gestionarse por medios alternativos." #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "Versión instalada:" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "Instalado en:" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "¡Por favor revisa tu ortografía!" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "Necesitas introducir" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "No se encontró información del paquete en PyPI." #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "Código de error:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "No se pudo encontrar el nombre del paquete en la lista:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "El paquete '{}' es requerido para instalar y desinstalar otros paquetes." #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "Paquete" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "Administrar paquetes para %s" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "Confirmación" #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "Parece que estás instalando un paquete relacionado con Thonny. Si lo que querías es instalar un plugin de Thonny, entonces deberías elegir 'Herramientas → Administrar plugins…'\n" "\n" "¿Seguro que quieres instalar %s para el back-end?" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "¡NB! Debe haber otra versión disponible que sea compatible con la versión actual de Thonny. Click en el botón '…' para elegir la versión e instalarla." #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "Plugin the Thonny sin requisitos" #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "Parece que estás intentando instalar un plug-in de Thonny obsoleto (no especifica la versión de Thonny requerida).\n" "\n" "Si desea instalarlo, instálelo desde la línea de comandos." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "Requisitos inadecuados" #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "Este paquete requiere una versión diferente de Thonny:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "Si aún lo desea, instálelo desde la línea de comandos." #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "(En este caso el back-end de Thonny usa el mismo intérprete, por lo que ambos diálogos usan los mismos paquetes.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "¡NB! Debe reiniciar Thonny después de instalar / actualizar / desinstalar un complemento." #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "Plug-ins de Thonny" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "Instalación / Actualización / Desactualización avanzadas" #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "Versión deseada" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "Actualizar dependencias" #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "Requiere:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "Error:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "Gestionar paquetes..." #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "Administra plug-ings…" #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "Abrir moviola…" #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "Cambia directorio de trabajo a directorio del script en la Ejecución/Depuración" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "Muestra en ventanas separadas los entornos cada llamada a función" #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "No marcar si quiere una experiencia más tradicional." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "Abrir y cerrar el Stack automáticamente" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "Abre la vista Pila en la primera llamada y la cierra cuando el programa regresa al marco principal." #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "Permitir entrar en librerías fuera del directorio principal del script." #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "Tal vez haga de la depuración más lenta." #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "Depurador preferido" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(utilizado al hacer clic en el botón Depurar de la barra de herramientas)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr "Puerto para Birdsye" #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(Reinicia Thonny luego de cambiar esto)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "Ejecutar y Depurar" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "Emulación de terminal" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "soporte para colores y estilos básicos ANSI" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "Número máximo de líneas a mantener." #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "¡Aviso! ¡Valores grandes degradan el rendimiento!" #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "Maxima longitud de un fragmento de texto antes de condensar" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "Ejecutando el script actual en la terminal" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "Continuar con el REPL de Python luego de la finalización del programa" #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "Mantener la terminal abierta luego de que el proceso de Python termine" #: thonny/plugins/terminal_config_page.py:31 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "¡Aviso! El cierre automático debe estar habilitado en la configuración de la Terminal" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "Terminal" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "Aspecto" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "Color Sintaxis" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "Letra editor" #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "Letra Ent/Sal" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "Previsualizar" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "Este es un comentario" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "La respuesta es" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "string_sin_cerrar" #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "bla, bla" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "¡Aviso! ¡Algunos elementos de estilo cambiaran luego de reiniciar Thonny!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "Ingresa un número entero" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "Temas y Fuentes" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "Abre la carpeta Thonny program…" #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "Abre la carpeta Thonny data…" #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "Inicio" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "Contenidos de la Ayuda" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "Dispositivo CircuitPython" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "Dispositivo MicroPython" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "Conecte su dispositivo a la computadora y seleccione el puerto correspondiente a continuación" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "buscar por un nombre de dispositivo, \"USB Serial\" o \"UART\"" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "Si no puede encontrarlo, es posible que primero deba instalar el controlador USB adecuado." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "Puerto" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "Intenta detectar el puerto automáticamente" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr "MicroPython (genérico)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "Imprimir..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "Abre el shell del sistema…" #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "Detalles" #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "Instalar desde archivo \"requirements.txt\"" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "Instalar desde archivo local" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "Este cuadro de diálogo es para administrar los complementos de Thonny y sus dependencias.\n" "Si desea instalar paquetes para sus propios programas, elija 'Herramientas → Administrar paquetes ...'" #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr "CircuitPython (genérico)" #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "Indentar las líneas seleccionadas" #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "Des-indentar las líneas seleccionadas" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "Cambiar a modo regular" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "Asegúrese de que MicroPython se haya instalado en su micro:bit" #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "No olvide que main.py solo funciona sin un script principal incrustado." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "por favor espere" #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "¡Listo!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "Firmware" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "No se pudo encontrar el disco '%s'. ¿Quieres localizarlo tú mismo?" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "Se encontraron varios discos '%s'. ¿Quieres elegir uno tú mismo?" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "No es posible encontrar un disco apropiado" #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "%d ítemes" #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "Mover a la papelera" #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "Mover al basurero" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "Eliminar" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "Nuevo Directorio" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "Propiedades" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "Espacio de almacenamiento" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "Ruta" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "Propiedades del directorio" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "Propiedades del archivo" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "bytes" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "Tamaño" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "Modificado" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "Borrando %s" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "Moviendo %s a %s" #: thonny/editors.py:219 msgid "Loading" msgstr "Cargando" #: thonny/editors.py:335 msgid "Saving" msgstr "Guardando" #: thonny/running.py:1408 msgid "Working..." msgstr "Trabajando" #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "Subiendo %s a %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "Subir a %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "Descargando %s a %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "Descargar a %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "Abrir en gestor de archivos" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "No mostrar archivos ocultos" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "Mostrar archivos ocultos" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "Abrir en Thonny" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "Abrir en la aplicación predeterminada del sistema" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "Configurando %s archivos" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "¿Qué hacer con un archivo %s cuando hace doble clic en él en el explorador de archivos de Thonny?" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "Borrando" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "Creando directorio" #: thonny/editors.py:217 msgid "Loading %s" msgstr "Cargando %s" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "Guardando a %s" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "Salvar todos los ficheros" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "Configurar interprete..." #: thonny/workbench.py:1501 msgid "Device" msgstr "Dispositivo" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "Cancelando" #: thonny/workdlg.py:212 msgid "Starting" msgstr "Iniciando" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "Autenticación" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "Ingrese la frase de contraseña de su clave privada para\n" "{}" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "Ingrese su contraseña para\n" "{}" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "La representación de arriba es un valor aproximado de este 'float'. El valor almacenado exacto es %s, que es aproximadamente %s" #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "Resultados de la búsqueda" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "Buscando" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "Instalando '%s'" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "Actualizando '%s'" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "Desinstalando '%s'" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "Instalando" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "El administrador de paquetes no está disponible para este intérprete" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "No soportado" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "No disponible" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "Debe detener su programa antes de iniciar el administrador de paquetes." #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "Abrir valores evaluados en el inspector de objetos" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "Ejecutable de Python" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "NB: El botón de selección de ficheros puede que no funcione bien cuando se seleccionen ejecutables de un entorno virtual. En este caso elegir el script 'activar' en vez del intérprete (o entrar el path –camino del fichero– directamente en la caja)" #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "Python 3 Remoto (SSH)" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "No conectado" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "Opciones avanzadas" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "Instalar o actualizar el firmware" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "MicroPython (local)" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "MicroPython (SSH)" #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "Módulo" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "Elementos duplicados (no importables):" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "El paquete no está disponible en micropython.org. Se instalará la versión de PyPI." #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "¡Aviso! micropython.org ha publicado la versión %s de este paquete y se instalará de forma predeterminada." #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "Para actualizar, simplemente instale el paquete nuevamente." #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "Para desinstalar, elimine los archivos correspondientes." #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "Alcance" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "Este cuadro de diálogo enumera los módulos de nivel superior de los siguientes directorios:" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "Los nuevos paquetes serán instalados en" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "Sin directorio lib absoluto en 'sys.path'" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "Versión a ser instalada" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "Ubicación del dispositivo de destino" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "Modelo de dispositivo de destino" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "Espere por favor" #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "Buscar en PyPI" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "Borrar seleccionado" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "Abrir en el editor de texto de Thonny" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "Espacio de almacenamiento en esta unidad o sistema de archivos" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "espacio total" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "espacio ocupado" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "espacio libre" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "Información de almacenamiento" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "Reemplazar los tabuladores por espacios" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "Resaltar los caracteres tabulador" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "Sangría con caracteres de tabulación (no recomendado para Python)" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "Nombre" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "Tamaño (bytes)" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "Ingrese el nombre para el nuevo directorio en\n" "%s" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "Nada seleccionado" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "Seleccione un artículo y vuelva a intentarlo." #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "Abrir de %s" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "Guardar a %s" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "Nombre de archivo:" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "ID de valor" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "Valor" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "Guardar contraseña" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "Llamada de función en %s" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "Variables locales" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "Función" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "Ubicación" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "Si el último comando generó una excepción, esta vista mostrará el seguimiento de la pila (stacktrace)." #: thonny/plugins/heap.py:22 msgid "ID" msgstr "ID" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "Datos" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "Atributos" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "Índice" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "ID de Llave" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "Llave" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "Volver a\n" "%s" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "Puerto o WebREPL" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "Contraseña" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "Código fuente" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "Use cuadros de diálogo de archivos Tk en lugar de Zenity" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "Seleccione si los cuadros de diálogo del archivo terminan detrás de la ventana principal" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "Variables de Entorno (una CLAVE=VALOR por línea)" thonny-3.3.14/thonny/locale/et_EE/000077500000000000000000000000001411757431400166675ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/et_EE/LC_MESSAGES/000077500000000000000000000000001411757431400204545ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/et_EE/LC_MESSAGES/thonny.mo000066400000000000000000000737651411757431400223520ustar00rootroot00000000000000L ||}]$) *3^ m&z+-! D.7s&      1x?  &5< P[j;{    , GD I [ c <x % * !%!8!U!Y!^!d!y!!!3!""1"8"H" Q"]"m"u"|""!" """ #B#\#b#g#v### ##%##/#'$.B$q$ w$$$ $$ $$$$ $$$$$ %"%(% 1% >% I%U%g%,&/2&=b& &&&&&0&' ''6,'c'}'''''''''L(FM((C\)))7)***!*9*X* s** ** ***3*+ ++&+/+E+T+Y+ a+l+|+ +++~,z1-;---. %.13. e......../ /"/n2//,v000<01-1U1c)222 2n2!3 53 A3 O3 ]3k3q333?3C3454'S4){4 444445&5;5TC5 5555 555H5O'65w66666667 $707:87s7x77&777777 8 8 8*8;8M8a8f8 x8B888 88 8&9)9 19=9 V9 d9q99 999 9 999 9"9: : /: :: G: U:`: g:t:z:: :: : ::2:/;8O;;:;; ;< <0!<R<d<v< {< <<<-<< < <= === 0= ==)K=u=}= ====== =>=n=>0>!> > ? ? @b@@ATA/fAA@PBBB"BBB B CC#C0,C ]CgC lCvCCCCCCC CC2D%7D]DcD lDvDDDLDDD5E EEEECF#YF}F F FF FF1F%F G%GV7GIG GG GGH&H HH*RI8}I,III!J &J01J1bJJCJ;J.4K cK mK xKKKK KK KvK QL _LkL{LLLLL L LL<MKMcMxMMMMM MM MMfNyNN2NNNNN8O IO jOO OOOOOO#O!P"9P7\PPPPPP PPQ QQ Q64Q kQyQQQPQRRR3R KRUR^RmR!~RR)RR3R.S3Sd8d 5eCeJeQeUeke,e ee9eeff/%fUf^f mfwff ff ffffg ggE,g%rg g ggg0gh h #hDhLh[hohvh~hh hhh$hhhi&iv Ev Rv]v cvmv9rv*v v+vOwC^wwwwww%d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAdvanced optionsAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAttributesAuthenticationAuthorAuto-completeBackBack to %sBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?CancellingCase sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)Configure %s filesConfigure interpreter...ConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating directoryCreating virtual environmentCutDataDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDelete selectedDeletingDeleting %sDesired versionDetailsDeviceDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter name for new directory under %sEnter string to be replaced.Enter the passphrase of your private key for {}Enter your password for {}Environment variables (one KEY=VALUE per line)ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile name:File propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.For uninstalling delete corresponding files.For upgrading simply install the package again.Found several '%s' disks. Do you want to choose one yourself?Full screenFunctionFunction call at %sGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHide hidden filesHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHighlight tab charactersHomeHomepageIDINSTALLIO fontIf last command raised an exception then this view will show the stacktrace.If you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesIndent with tab characters (not recommended for Python)IndexInstallInstall from PyPIInstall from local fileInstall from requirements fileInstall or update firmwareInstalled to:Installed version:InstallingInstalling '%s'InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKeyKey IDKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLoading %sLocal variablesLocationLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (SSH)MicroPython (generic)MicroPython (local)MicroPython deviceModifiedModuleMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! File selection button may not work properly when selecting executables from a virtual environment. In this case choose the 'activate' script instead of the interpreter (or enter the path directly to the box)!NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NB! micropython.org has published version %s of this package and this will be installed by default.NameNewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.New packages will be installed toNext objectNot availableNot connectedNot supportedNotesNothing selectedOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen evaluated values in Object inspectorOpen from %sOpen in ThonnyOpen in Thonny's text editorOpen in system default appOpen in system file managerOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Package is not available at micropython.org. Version at PyPI will be installed.Package manager is not available for this interpreterPackages' directoryPasswordPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!Please waitPlotterPlotter visualizes series of numbers printed to the Shell.PortPort or WebREPLPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython executablePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRemote Python 3 (SSH)Rename...Reopen all files from previous sessionReplaceReplace allReplace tabs with spacesReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave All filesSave as...Save copy...Save passwordSave to %sSavingSaving to %sScopeSearch on PyPISearch resultsSearchingSee Help for details.Select AllSelect allSelect an item and try again!Select empty directory for new virtual environmentSelect existing or create a new empty directorySelect if the file dialogs end up behind the main windowSelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShadowed items (not importable):ShellShow PlotterShow function calls (frames) in separate windowsShow hidden filesShow line numbersSizeSize (bytes)Source codeSqueezed text (%d characters)StackStart by selecting the package from the left.StartingStep backStep intoStep outStep overStopStop/Restart backendStorage infoStorage spaceStorage space on this drive or filesystemSummarySwitch to regular modeSyntax themeTarget device locationTarget device modelTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The representation above is an approximate value of this float. The exact stored value is %s which is about %sThe same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis dialog lists top-level modules from following directories: This is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUninstalling '%s'Unsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpgrading '%s'Upload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingUse Tk file dialogs instead of ZenityValueValue IDVariablesVersion historyVersion to be installedViewWhat to do with a %s file when you double-click it in Thonny's file browser?Which interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!You need to stop your program before launching the package manager.Your interpreter isn't in the list?Zoomall filesblah, blahbytesfree spaceherelook for your device name, "USB Serial" or "UART"no absolute lib directory in sys.pathplease waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.total spaceunclosed_stringused spaceuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: et %d üksust(Antud juhul kasutab Thonny programmide jooksutamiseks sama interpretaatorit, seega tegelevad mõlemad dialoogid samade pakkidega.)(taaskäivita Thonny peale selle muutmist)(rakendatakse "Silur" tööriistariba nupu klõpsamisel)Spetsiaalne virtuaalkeskkond (pole soovitav)Birdseye kohtaInfo Thonny kohtaTäpsem install / versiooni valikLisaseadedVõimalda sõnu lõpetada Tab-klahviga käsurealVõimalda sõnu lõpetada Tab-klahviga redaktorisLuba korraga ainult üks ThonnyLuba teegifunktsioonide sisse astumine (väljaspool skripti kausta)Alternatiivne Python 3 interpretaator või virtuaalkeskkondKas oled kindel, et soovid seda desinstallida?JuhendajaAtribuudidAutentimineAutorLõpeta sõna automaatseltTagasiTagasi %sTagasi aktiivsesse raamiHalb kaustBirdseye on Pythoni silur, mis tuleb eraldi paigaldada. Kas soovid avada vastava abiinfo lehe, et rohkem teada saada?Birdseye portVaata pakkeVigade registerEi saa veel sulgedaEi leia paki nime nimekirjast:Ei leia sobivat draivi.TühistaTühista protsess?TühistanTõstutundlikMuuda kirja suurustMuuda jooksutamisel / silumisel automaatselt jooksvat kaustaCircuitPython (üldine)CircuitPythoni seadePuhastaPuhasta käsuridaKlõpsaKlõpsa SulgeSulge kõikSulge ülejäänudKommenteeriSeaded on muudetud. Tavarežiimis alustamiseks taaskäivita Thonny. (Vaata 'Tööriistad → Seaded → Üldine', kui Sa mõtled hiljem ümber.)Seadista %s failidSeadista interpretaator...KinnitusÜhenda seade arvutiga ja vali allpoolt selle portKopeeriKopeeri lõikepuhvrisseKopeerinKopeerin %s => %sEi leia draivi nimega '%s'. Kas soovid selle ise valida?Ei leidnud PyPI-st sellist pakkiEi leidnud sellist pakki PyPI-stLoo uus virtuaalkeskkondLoon kaustaLoon virtuaalkeskkondaLõikaAndmedSiluSilu käesolevat skriptiSilu käesolevat skripti (birdseye)Silu käesolevat skripti (kiirem)Silu käesolevat skripti (ägedam)Arendusrežiim (annab detailsemat diagnostilised logid)Vähenda fondi suurustVähenda ridade taanetKustutaKustuta valitudKustutanKustutan %sSoovitud versioonDetailidSeadeKausta omadusedKeela teavitushelidTühistatud kontrollid (üks identifikaator rea kohta)Ühenda lahtiKas soovid '%s' üle kirjutada?Kinnita kasutaja aknadDokumentatsioonÄra unusta, et main.py toimib ainult siis kui MicroPython on ilma peaskriptita.Valmis!AllaLaadi alla kausta %sLaadi %s alla kausta %sRedigeeriRedaktorRedaktori fontSisesta täisarvSisesta uue kausta nimi (%s all)Sisesta asendatav sõneSisesta oma privaatvõtme parool {} jaoksSisesta parool {} jaoksKeskkonnamuutujad (üks VÕTI=VÄÄRTUS ühel real)VigaVeakood:Viga:SündmusedErindVäljuVälju ThonnystKirjuta Käsureale väljaEkspordi kasutuslogiFailFaili nimi:Faili omadusedFailidOtsiOtsi ja asendaOtsi pakki PyPI-stOtsi:PüsivaraMine redaktorisseMine sisseMine käsurealeFondi suuruse režiimParema jõudluse nimel ei näidata Käsureal väga pikki ridu (vaata Tööriistad => Seaded => Käsurida). Siin saad Sa algset tekstifragmenti täielikult näha.Deinstallimiseks kustuta vastavad failid.Uuendamiseks lihtsalt installi pakk uuesti.Leidsin mitu draivi nimega '%s'. Kas soovid ühe neist ise valida?TäisekraanFunktsioonFunktsiooni väljakutse (%s)ÜldineKuhiKuhja režiim on sees. Väljalülitamiseks sulge Kuhja vaadeAbiinfoAbiinfo sisukordPeida varjatud failidToo esile jooksev ridaToo esile lokaalsed muutujadToo esile samad nimedToo esile sulupaaridTee kood värviliseksToo tab-sümbolid esileAvalehtKodulehtIDINSTALLISisend/väljund fontKui viimane käsk tekitas erindi, siis siin näidatakse selle pinujälge.Kui sa ei leia seda, siis pead võibolla installima sobiva USB draiveri.Kui Sa ei tea, kust pakki saada, siis on mõistlik otsida seda Pythoni pakiregistrist (PyPI), Alustuseks sisest paki nimi otsingukasti ja vajuta ENTER.Kui sa ikkagi tahad seda, siis installi see süsteemi käsurealt..Suurenda kirja suurustSuurenda ridade taanetTaanda tab-sümbolitega (mittesoovitav Pythoni koodis)IndeksInstalliInstalli PyPI-stInstalli lokaalsest failistInstalli sõltuvusfaili järgiPaigalda või uuenda püsivaraInstallimise asukoht:Installitud versioon:InstallinInstallin '%s'InterpretaatorKatkesta programmSisseHoia terminali aken avatuna ka peale Pythoni protsessi lõppemistVõtiVõtme IDTeadaolevad interpretaatoridKeelViimane stabiilne versioonViimane versioonLaeLaadinLaadin %sLokaalsed muutujadAsukohtAsukoht: Logi kasutussündmusiPaistab, et soovid installida Thonny pistikprogrammi. Õige oleks seda teha 'Tööriistad → Halda pistikprogramme' alt. Oled sa kindel, et tahad installida %s siin?Paistab, et proovid installida aegunud Thonny pistikprogrammi (sellel pole märgitud vajalikku Thonny versiooni). Kui sa tõesti tahad seda, siis installi see süsteemi käsurealt.Loodud Tartu Ülikoolis, Eestis. Abiks on olnud avatud tarkvara kogukond, Raspberry Pi Foundation ja Cybernetica ASVeendu, et MicroPython oleks su micro:bit-ile installitud.Halda %s pakkeHalda lisapakke...Halda pistikprogramme...Suurenda vaadeMaksimaalne realõigu pikkus enne "kokkupigistamist"Maksimaalne ridade arv.Võib teha silumise aeglasemaks.MicroPython (SSH)MicroPython (üldine)MicroPython (lokaalne)MicroPythoni seadeMuudetudMoodulLiiguta PrügikastiLiiguta PrügikastiLiigutan %s asukohta %sNB! Automaatset sulgemist tuleb lubada Terminali seadetes (Profiles → Shell → When the shell exits)NB! Faili valimise nupp ei pruugi korralikult toimida, kui valida käivitusfaile virtuaalkeskkonnas. Sel juhul vali hoopis 'activate' skript (või sisesta failitee sisestuskasti käsitsi)!NB! Suurte väärtustega võib jõudlus halveneda!NB! Need seaded rakenduvad peale Thonny taaskäivitamistNB! Mõned stiilielemendid muutuvad alles peale Thonny taaskäivitamist!NB! Mõni muu versioon võib selle Thonny versiooniga klappida. Klõpsa '...' nupule versiooni valimiseks.NB! Thonny toetab ainult Python 3.5 ja hilisemaidNB! Äsja installitud pistikprogramm rakendub alles peale Thonny taaskäivitamist.NB! micropython.org on publitseerinud versiooni %s sellest pakist ja vaikimisi installitakse see.NimiUusUus kaustUued pakid installitakse ka sellesse kausta. Teisi asukohti tuleb hallata teiste vahenditegaUued pakid installitakse kaustaJärgmine objektPole kättesaadavPole ühendatudPole toetatudMärkmedMidagi pole märgitudSobibObjektivaaturAva Juhendaja automaatselt, kui tal on hoiatusi Sinu koodi kohtaAva Juhendaja automaatselt, kui programm annab veaAva Thonny andmekaust...Ava Thonny programmikaust...Ava ja sulge Pinu vaade automaatseltAva väärtused ObjektivaaturisAva asukohast %sAva ThonnysAva Thonny tekstiredaktorisAva süsteemi vaikerakendusegaAva süsteemi failihaldurisAva Taasesitaja...Ava süsteemi käsurida / terminalAva...Avab Pinu vaate esimesel funktsiooni väljakutsel ja sulgeb, kui programm jõuab tagasi pearaamiSeaded...VäljaStruktuurÜleKirjutada üle?Kirjutan üle teemat nimega '%s'PakkPakk '{}' on vajalik teiste pakkide installimiseks ja uuendamisksPakki ei ole micropython.org peal. Installitakse PyPI variant.Pakihaldur pole selle interpretaatori jaoks kättesaadavPakkide kaustParoolKleebiTeeTeosta MyPy kontrolleTeosta Pylint kontrolleKontrolli kas kirjutasid paki nime õigesti!Palun ootaPlotterPlotter visualiseerib käsureale prinditud numbrijadasid.PortPort või WebREPLEelistatud silurNäita peale programmi lõppu Pythoni käsuridaEelvaadeEelmine objektPrindi...Programmi argumendidProgrammi argumendid:ProgrammipuuOmadusedPyPI lehtPygame Zero režiimPythoni käivitusfailPythoni interpretaatordVäljuDesinstallida?Hiljutised failidSoovitatav maksimaalne reapikkus (0 lülitab serva näitamise välja)Rakenda tagasivõetud muudatus uuestiVärskendaTavarežiimPython 3 teises masinas (SSH)Nimeta ümber...Ava käivitumisel kõik eelmise sessiooni failidAsendaAsenda kõikAsenda tab-sümbolid tühikutegaAsenda:Otsi ja asendaTeata probleemidestNõuabNõuab:NaaseKäivitaKäivitamineJooksuta / naaseJooksuta käesolev skriptJooksuta käesolev skript terminalisJooksuta kursoriniSkripti käivitamine terminalisSalvestaSalvesta kõik failidSalvesta nimega...Salvesta koopia...Salvesta paroolSalvesta %s allaSalvestanSalvestan %sSkoopOtsi PyPI-stOtsingutulemusedOtsinTäpsemalt vaata abiinfost.Vali kõikVali kõikMärgi midagi ja proovi uuestiVali uue virtuaalkeskkonna jaoks tühi kaustVali olemasolev või loo uus tühi kaustVali kui failidialoogid satuvad peaakna tahaVali interpretaatorValitud kaust pole tühi. Vali mõni muu või tühista.Saada EOF / Soft rebootVarjatud üksused (mitteimporditavad)KäsuridaAva PlotterNäita funktsiooni väljakutseid (raame) eraldi akendesNäita varjatud faileNäita reanumbreidSuurusSuurus (baitides)LähtekoodKokkupressitud tekst (%d sümbolit)PinuAlustuseks vali vasakult huvipakkuv pakkAlustanAstu tagasiAsti sisseAstu väljaAstu ülePeataPeata/taaskäivita interpretaatorSalvestusruumi infoSalvestusruumSalvestusruum sellel kettal või failisüsteemisKokkuvõteMine tavalisse režiimiSüntaksi stiilSeadme asukohtSeadme mudelSihtkoht:TerminalTerminali emuleerimineVastus onProtsess käib veel. Oled Sa kindel, et soovid katkestada?Ülaltoodud esitus on antud ujukomaarvu ligikaudne väärtus. Täpne mälus hoitav väärtus on %s, mis on umbes %sSama interpretaator, mis jooksutab Thonnyt (vaikimisi)Otsitavat teksti ei leitud!Stiil & fontSee kast on mõeldud Sinu märkmeteks -- tööjuhenditeks, koodijuppideks, ... Tekst salvestub automaatselt ja laetakse uuesti kui Sa avad Thonny uuesti. Võid vabalt selle teksti kustutada, et enda märkmetele ruumi teha.See arvutiSee dialoog on mõeldud Thonny pistiprogrammide haldamiseks. Kui soovid installida pakke enda programmide jaoks, siis kasuta 'Tööriistad → Halda lisapakke...'Selles dialoogis näidatakse kõiki pakke, aga uuendada ja desinstallida lubatakse ainult pakke asukohastSelles dialoogis näidatakse ülemtaseme mooduleid järgnevatest kaustadest:See on kommentaarSee pakk vajab teistsugust Thonny versiooni:Selle programmi toimimise kohta ei anta mingeid garantiisid. See on avatud tarkvara ja seda võib teatud tingimustel levitada. Vaata täpsemalt https://opensource.org/licenses/MITSeda virtuaalkeskkonda haldab Thonny automaatselt.Thonny seadedThonny pistikprogrammidThonny pistikprogramm ilma sõltuvustetaLülita kommentaar sisse/väljaTööriistadProovi tuvastada port automaatseltKasutajaliidese režiimKasutajaliidese suurendamineKasutajaliidese stiilÄra vali, kui soovid tavapärast (vähem intuitiivset) esitusviisi.Eemalda kommentaarVõta muudatus tagasiDesinstalliDeinstallin '%s'Ebasobivad sõltuvusedÜlesUuendaUuenda sõltuvusedUuenda või desinstalliUendan '%s'Laadi üles kausta %sLaadin %s üles asukohta %sKui soovid silumist lõpetada, siis kasuta "Stop" käskuKasuta Tk failidialooge Zenity asemelVäärtusVäärtuse IDMuutujadVersioonide ajaluguInstallitav versioonVaatedMida tuleks teha %s failiga, kui sa topeltklõpsad seda Thonny failibrauseris?Millise interpretaatoriga peaks Thonny Su koodi jooksutama?Käesoleva interpretaatoriga saad Sa siin pakke ainult vaadata. Installimiseks, kustutamiseks ja uuendamiseks on vaja kasutada muid vahendeidTöötan...Murra rida (võib olla aeglane)On vaja sisestadaSa peand valima faili!Enne pakihalduri avamist pead oma programmi töö lõpetamaEi leida vajalikku interpretaatorit?Suuruskõik failidblaa, blaabaitivaba ruumsiiaotsi oma seadme nime või fraase "USB Serial" või "UART"sys.path ei sisalda absoluutset lib kaustapalun ootatoetab põhilisi ANSI värvikoode ja stiileet valida ja installida pakifail (harilikult .whl, .tar.gz või .zip laiendiga)et valida requirements.txt fail ja installida seal näidatud pakid.koguruumsulgemata_stringkasutatud ruumkasutaja "site-packages"virtuaalkeskkondthonny-3.3.14/thonny/locale/et_EE/LC_MESSAGES/thonny.po000066400000000000000000001400101411757431400223270ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: et\n" #: thonny/workbench.py:357 msgid "File" msgstr "Fail" #: thonny/workbench.py:358 msgid "Edit" msgstr "Redigeeri" #: thonny/workbench.py:359 msgid "View" msgstr "Vaated" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "Käivita" #: thonny/workbench.py:361 msgid "Tools" msgstr "Tööriistad" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "Abiinfo" #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "Alternatiivne Python 3 interpretaator või virtuaalkeskkond" #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "Spetsiaalne virtuaalkeskkond (pole soovitav)" #: thonny/workbench.py:582 msgid "Exit" msgstr "Välju" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "Vähenda fondi suurust" #: thonny/workbench.py:621 msgid "Focus editor" msgstr "Mine redaktorisse" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "Mine käsureale" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "Suurenda vaade" #: thonny/workbench.py:653 msgid "Full screen" msgstr "Täisekraan" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "Programmi argumendid" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "Info Thonny kohta" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "Loodud\n" "Tartu Ülikoolis, Eestis.\n" "Abiks on olnud\n" "avatud tarkvara kogukond,\n" "Raspberry Pi Foundation\n" "ja Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "Selle programmi toimimise\n" "kohta ei anta mingeid garantiisid.\n" "See on avatud tarkvara ja seda\n" "võib teatud tingimustel levitada.\n" "Vaata täpsemalt\n" "https://opensource.org/licenses/MIT" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "Versioonide ajalugu" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "Teata probleemidest" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "Ava Juhendaja automaatselt, kui programm annab vea" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "Ava Juhendaja automaatselt, kui tal on hoiatusi Sinu koodi kohta" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "Teosta Pylint kontrolle" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "Teosta MyPy kontrolle" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "Tühistatud kontrollid (üks identifikaator rea kohta)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "Juhendaja" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "Lõpeta sõna automaatselt" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "Millise interpretaatoriga peaks Thonny Su koodi jooksutama?" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "Interpretaator" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "Birdseye kohta" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Birdseye on Pythoni silur, mis tuleb eraldi paigaldada.\n" "\n" "Kas soovid avada vastava abiinfo lehe, et rohkem teada saada?" #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "Silu käesolevat skripti (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "Lülita kommentaar sisse/välja" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "Kommenteeri" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "Eemalda kommentaar" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "Võta muudatus tagasi" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "Rakenda tagasivõetud muudatus uuesti" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "Lõika" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "Kopeeri" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "Kleebi" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "Vali kõik" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "Jooksuta kursorini" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "Ei saa veel sulgeda" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "Kui soovid silumist lõpetada, siis kasuta \"Stop\" käsku" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "Kinnita kasutaja aknad" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "Too esile samad nimed" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "Too esile lokaalsed muutujad" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "Too esile sulupaarid" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "Tee kood värviliseks" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "Too esile jooksev rida" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "Võimalda sõnu lõpetada Tab-klahviga redaktoris" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "Võimalda sõnu lõpetada Tab-klahviga käsureal" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "Näita reanumbreid" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "Soovitatav maksimaalne reapikkus\n" "(0 lülitab serva näitamise välja)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "Redaktor" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "Ekspordi kasutuslogi" #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "Sündmused" #: thonny/plugins/files.py:551 msgid "Files" msgstr "Failid" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "Otsi ja asenda" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "Otsi:" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "Asenda:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "Tõstutundlik" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "Üles" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "Alla" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "Otsi" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "Asenda" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "Otsi ja asenda" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "Asenda kõik" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "Sisesta asendatav sõne" #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "Otsitavat teksti ei leitud!" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "Luba korraga ainult üks Thonny" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "Ava käivitumisel kõik eelmise sessiooni failid" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "Keela teavitushelid" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "Fondi suuruse režiim" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "Kuhja režiim on sees.\n" "Väljalülitamiseks sulge Kuhja vaade" #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "Kuhi" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "Keel" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "See kast on mõeldud Sinu märkmeteks -- tööjuhenditeks, koodijuppideks, ...\n" "\n" "Tekst salvestub automaatselt ja laetakse uuesti kui Sa avad Thonny uuesti.\n" "\n" "Võid vabalt selle teksti kustutada, et enda märkmetele ruumi teha." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "Märkmed" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "Eelmine objekt" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "Järgmine objekt" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "Objektivaatur" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "Struktuur" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "Pygame Zero režiim" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "Otsi pakki PyPI-st" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "Desinstalli" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "Sulge" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "Klõpsa " #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "siia" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "Uuenda" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "Installi" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "Ei leidnud PyPI-st sellist pakki" #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "Viimane stabiilne versioon" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "Viimane versioon" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "Kokkuvõte" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "Autor" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "Koduleht" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "Vigade register" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "Dokumentatsioon" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "PyPI leht" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "Nõuab" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "Desinstallida?" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "Kas oled kindel, et soovid seda desinstallida?" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "Tagasi\n" "aktiivsesse raami" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "Muutujad" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "See arvuti" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "Värskenda" #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "Mine sisse" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "Viga" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "Sa peand valima faili!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "Kirjutada üle?" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "Kas soovid '%s' üle kirjutada?" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "Uus" #: thonny/editors.py:565 msgid "Open..." msgstr "Ava..." #: thonny/editors.py:567 msgid "Load" msgstr "Lae" #: thonny/editors.py:576 msgid "Recent files" msgstr "Hiljutised failid" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "Sulge kõik" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "Salvesta" #: thonny/editors.py:633 msgid "Save as..." msgstr "Salvesta nimega..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "Salvesta koopia..." #: thonny/editors.py:653 msgid "Rename..." msgstr "Nimeta ümber..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "Thonny seaded" #: thonny/running.py:121 msgid "Run current script" msgstr "Jooksuta käesolev skript" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "Jooksuta käesolev skript terminalis" #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "Peata/taaskäivita interpretaator" #: thonny/running.py:166 msgid "Stop" msgstr "Peata" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "Katkesta programm" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "Saada EOF / Soft reboot" #: thonny/running.py:201 msgid "Disconnect" msgstr "Ühenda lahti" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "Teadaolevad interpretaatorid" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "Ei leida vajalikku interpretaatorit?" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "NB! Thonny toetab ainult Python 3.5 ja hilisemaid" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "Loo uus virtuaalkeskkond" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "Vali olemasolev või loo uus tühi kaust" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "Pythoni interpretaatord" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "kõik failid" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "Vali uue virtuaalkeskkonna jaoks tühi kaust" #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "Halb kaust" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "Valitud kaust pole tühi.\n" "Vali mõni muu või tühista." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "Loon virtuaalkeskkonda" #: thonny/shell.py:83 msgid "Clear shell" msgstr "Puhasta käsurida" #: thonny/shell.py:138 msgid "Plotter" msgstr "Plotter" #: thonny/shell.py:269 msgid "Clear" msgstr "Puhasta" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "Ava Plotter" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "Parema jõudluse nimel ei näidata Käsureal väga pikki ridu\n" "(vaata Tööriistad => Seaded => Käsurida).\n" "Siin saad Sa algset tekstifragmenti täielikult näha." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "Murra rida (võib olla aeglane)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "Kopeeri lõikepuhvrisse" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "Kirjuta Käsureale välja" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "Kokkupressitud tekst (%d sümbolit)" #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "Plotter visualiseerib käsureale\n" "prinditud numbrijadasid." #: thonny/shell.py:1796 msgid "See Help for details." msgstr "Täpsemalt vaata abiinfost." #: thonny/ui_utils.py:449 msgid "Close others" msgstr "Sulge ülejäänud" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "Kopeerin" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "Kopeerin\n" " %s\n" "=> \n" " %s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "Tühista" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "Sobib" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "Tühista protsess?" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "Protsess käib veel.\n" "Oled Sa kindel, et soovid katkestada?" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "Vali kõik" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "Käsurida" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "Sama interpretaator, mis jooksutab Thonnyt (vaikimisi)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "Seda virtuaalkeskkonda haldab Thonny automaatselt." #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "Asukoht: " #: thonny/workbench.py:592 msgid "Options..." msgstr "Seaded..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "Suurenda kirja suurust" #: thonny/workbench.py:664 msgid "Change font size" msgstr "Muuda kirja suurust" #: thonny/workbench.py:665 msgid "Zoom" msgstr "Suurus" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "Välju Thonnyst" #: thonny/workbench.py:677 msgid "Quit" msgstr "Välju" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "Kirjutan üle teemat nimega '%s'" #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "Programmi argumendid:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "Tavarežiim" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "Seaded on muudetud. Tavarežiimis alustamiseks taaskäivita Thonny.\n" "\n" "(Vaata 'Tööriistad → Seaded → Üldine', kui Sa mõtled hiljem ümber.)" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "Programmipuu" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "Vali interpretaator" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "Naase" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "Jooksuta / naase" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "Silu käesolevat skripti" #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "Silu" #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "Silu käesolevat skripti (ägedam)" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "Silu käesolevat skripti (kiirem)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "Astu üle" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "Üle" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "Asti sisse" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "Sisse" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "Astu välja" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "Välja" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "Astu tagasi" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "Tagasi" #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "Pinu" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "Erind" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "Logi kasutussündmusi" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "Arendusrežiim (annab detailsemat diagnostilised logid)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "Kasutajaliidese režiim" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "Kasutajaliidese suurendamine" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "NB! Need seaded rakenduvad peale Thonny taaskäivitamist" #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "Üldine" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "INSTALLI" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "Vaata pakke" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "Käesoleva interpretaatoriga saad Sa siin pakke ainult vaadata.\n" "Installimiseks, kustutamiseks ja uuendamiseks on vaja kasutada\n" "muid vahendeid" #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "Pakkide kaust" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "Installi PyPI-st" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "Kui Sa ei tea, kust pakki saada, siis on mõistlik otsida\n" "seda Pythoni pakiregistrist (PyPI), Alustuseks sisest\n" "paki nimi otsingukasti ja vajuta ENTER." #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "et valida requirements.txt fail ja installida seal näidatud pakid." #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "Klõpsa" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "et valida ja installida pakifail (harilikult .whl, .tar.gz või .zip laiendiga)" #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "Uuenda või desinstalli" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "Alustuseks vali vasakult huvipakkuv pakk" #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "Sihtkoht:" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "virtuaalkeskkond" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "kasutaja \"site-packages\"" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "Selles dialoogis näidatakse kõiki pakke, aga uuendada ja desinstallida\n" "lubatakse ainult pakke asukohast" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "Uued pakid installitakse ka sellesse kausta. Teisi asukohti\n" "tuleb hallata teiste vahenditega" #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "Installitud versioon:" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "Installimise asukoht:" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "Kontrolli kas kirjutasid paki nime õigesti!" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "On vaja sisestada" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "Ei leidnud sellist pakki PyPI-st" #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "Veakood:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "Ei leia paki nime nimekirjast:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "Pakk '{}' on vajalik teiste pakkide installimiseks ja uuendamisks" #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "Pakk" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "Halda %s pakke" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "Kinnitus" #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "Paistab, et soovid installida Thonny pistikprogrammi.\n" "Õige oleks seda teha 'Tööriistad → Halda pistikprogramme' alt.\n" "\n" "Oled sa kindel, et tahad installida %s siin?" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "NB! Mõni muu versioon võib selle Thonny versiooniga klappida. \n" "Klõpsa '...' nupule versiooni valimiseks." #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "Thonny pistikprogramm ilma sõltuvusteta" #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "Paistab, et proovid installida aegunud Thonny pistikprogrammi\n" "(sellel pole märgitud vajalikku Thonny versiooni).\n" "\n" "Kui sa tõesti tahad seda, siis installi see süsteemi käsurealt." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "Ebasobivad sõltuvused" #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "See pakk vajab teistsugust Thonny versiooni:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "Kui sa ikkagi tahad seda, siis installi see süsteemi käsurealt.." #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "(Antud juhul kasutab Thonny programmide jooksutamiseks sama interpretaatorit,\n" "seega tegelevad mõlemad dialoogid samade pakkidega.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "NB! Äsja installitud pistikprogramm rakendub alles peale Thonny taaskäivitamist." #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "Thonny pistikprogrammid" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "Täpsem install / versiooni valik" #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "Soovitud versioon" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "Uuenda sõltuvused" #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "Nõuab:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "Viga:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "Halda lisapakke..." #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "Halda pistikprogramme..." #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "Ava Taasesitaja..." #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "Muuda jooksutamisel / silumisel automaatselt jooksvat kausta" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "Näita funktsiooni väljakutseid (raame) eraldi akendes" #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "Ära vali, kui soovid tavapärast (vähem intuitiivset) esitusviisi." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "Ava ja sulge Pinu vaade automaatselt" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "Avab Pinu vaate esimesel funktsiooni väljakutsel ja sulgeb, kui programm jõuab tagasi pearaami" #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "Luba teegifunktsioonide sisse astumine (väljaspool skripti kausta)" #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "Võib teha silumise aeglasemaks." #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "Eelistatud silur" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(rakendatakse \"Silur\" tööriistariba nupu klõpsamisel)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr "Birdseye port" #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(taaskäivita Thonny peale selle muutmist)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "Käivitamine" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "Terminali emuleerimine" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "toetab põhilisi ANSI värvikoode ja stiile" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "Maksimaalne ridade arv." #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "NB! Suurte väärtustega võib jõudlus halveneda!" #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "Maksimaalne realõigu pikkus enne \"kokkupigistamist\"" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "Skripti käivitamine terminalis" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "Näita peale programmi lõppu Pythoni käsurida" #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "Hoia terminali aken avatuna ka peale Pythoni protsessi lõppemist" #: thonny/plugins/terminal_config_page.py:31 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "NB! Automaatset sulgemist tuleb lubada Terminali seadetes\n" "(Profiles → Shell → When the shell exits)" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "Terminal" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "Kasutajaliidese stiil" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "Süntaksi stiil" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "Redaktori font" #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "Sisend/väljund font" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "Eelvaade" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "See on kommentaar" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "Vastus on" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "sulgemata_string" #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "blaa, blaa" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "NB! Mõned stiilielemendid muutuvad alles peale Thonny taaskäivitamist!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "Sisesta täisarv" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "Stiil & font" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "Ava Thonny programmikaust..." #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "Ava Thonny andmekaust..." #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "Avaleht" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "Abiinfo sisukord" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "CircuitPythoni seade" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "MicroPythoni seade" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "Ühenda seade arvutiga ja vali allpoolt selle port" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "otsi oma seadme nime või fraase \"USB Serial\" või \"UART\"" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "Kui sa ei leia seda, siis pead võibolla installima sobiva USB draiveri." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "Port" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "Proovi tuvastada port automaatselt" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr "MicroPython (üldine)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "Prindi..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "Ava süsteemi käsurida / terminal" #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "Detailid" #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "Installi sõltuvusfaili järgi" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "Installi lokaalsest failist" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "See dialoog on mõeldud Thonny pistiprogrammide haldamiseks.\n" "Kui soovid installida pakke enda programmide jaoks, siis kasuta 'Tööriistad → Halda lisapakke...'" #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr "CircuitPython (üldine)" #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "Suurenda ridade taanet" #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "Vähenda ridade taanet" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "Mine\n" "tavalisse\n" "režiimi" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "Veendu, et MicroPython oleks su micro:bit-ile installitud." #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "Ära unusta, et main.py toimib ainult siis kui MicroPython on ilma peaskriptita." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "palun oota" #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "Valmis!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "Püsivara" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "Ei leia draivi nimega '%s'. Kas soovid selle ise valida?" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "Leidsin mitu draivi nimega '%s'. Kas soovid ühe neist ise valida?" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "Ei leia sobivat draivi." #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "%d üksust" #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "Liiguta Prügikasti" #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "Liiguta Prügikasti" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "Kustuta" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "Uus kaust" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "Omadused" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "Salvestusruum" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "Tee" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "Kausta omadused" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "Faili omadused" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "baiti" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "Suurus" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "Muudetud" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "Kustutan %s" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "Liigutan %s asukohta %s" #: thonny/editors.py:219 msgid "Loading" msgstr "Laadin" #: thonny/editors.py:335 msgid "Saving" msgstr "Salvestan" #: thonny/running.py:1408 msgid "Working..." msgstr "Töötan..." #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "Laadin %s üles asukohta %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "Laadi üles kausta %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "Laadi %s alla kausta %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "Laadi alla kausta %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "Ava süsteemi failihalduris" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "Peida varjatud failid" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "Näita varjatud faile" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "Ava Thonnys" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "Ava süsteemi vaikerakendusega" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "Seadista %s failid" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "Mida tuleks teha %s failiga, kui sa topeltklõpsad seda Thonny failibrauseris?" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "Kustutan" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "Loon kausta" #: thonny/editors.py:217 msgid "Loading %s" msgstr "Laadin %s" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "Salvestan %s" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "Salvesta kõik failid" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "Seadista interpretaator..." #: thonny/workbench.py:1501 msgid "Device" msgstr "Seade" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "Tühistan" #: thonny/workdlg.py:212 msgid "Starting" msgstr "Alustan" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "Autentimine" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "Sisesta oma privaatvõtme parool {} jaoks" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "Sisesta parool {} jaoks" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "Ülaltoodud esitus on antud ujukomaarvu ligikaudne väärtus. Täpne mälus hoitav väärtus on %s, mis on umbes %s" #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "Otsingutulemused" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "Otsin" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "Installin '%s'" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "Uendan '%s'" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "Deinstallin '%s'" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "Installin" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "Pakihaldur pole selle interpretaatori jaoks kättesaadav" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "Pole toetatud" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "Pole kättesaadav" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "Enne pakihalduri avamist pead oma programmi töö lõpetama" #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "Ava väärtused Objektivaaturis" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "Pythoni käivitusfail" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "NB! Faili valimise nupp ei pruugi korralikult toimida, kui valida\n" "käivitusfaile virtuaalkeskkonnas. Sel juhul vali hoopis 'activate' \n" "skript (või sisesta failitee sisestuskasti käsitsi)!" #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "Python 3 teises masinas (SSH)" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "Pole ühendatud" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "Lisaseaded" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "Paigalda või uuenda püsivara" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "MicroPython (lokaalne)" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "MicroPython (SSH)" #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "Moodul" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "Varjatud üksused (mitteimporditavad)" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "Pakki ei ole micropython.org peal. Installitakse PyPI variant." #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "NB! micropython.org on publitseerinud versiooni %s sellest pakist ja vaikimisi installitakse see." #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "Uuendamiseks lihtsalt installi pakk uuesti." #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "Deinstallimiseks kustuta vastavad failid." #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "Skoop" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "Selles dialoogis näidatakse ülemtaseme mooduleid järgnevatest kaustadest:" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "Uued pakid installitakse kausta" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "sys.path ei sisalda absoluutset lib kausta" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "Installitav versioon" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "Seadme asukoht" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "Seadme mudel" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "Palun oota" #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "Otsi PyPI-st" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "Kustuta valitud" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "Ava Thonny tekstiredaktoris" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "Salvestusruum sellel kettal või failisüsteemis" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "koguruum" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "kasutatud ruum" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "vaba ruum" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "Salvestusruumi info" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "Asenda tab-sümbolid tühikutega" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "Too tab-sümbolid esile" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "Taanda tab-sümbolitega (mittesoovitav Pythoni koodis)" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "Nimi" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "Suurus (baitides)" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "Sisesta uue kausta nimi \n" "(%s all)" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "Midagi pole märgitud" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "Märgi midagi ja proovi uuesti" #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "Ava asukohast %s" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "Salvesta %s alla" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "Faili nimi:" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "Väärtuse ID" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "Väärtus" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "Salvesta parool" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "Funktsiooni väljakutse (%s)" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "Lokaalsed muutujad" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "Funktsioon" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "Asukoht" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "Kui viimane käsk tekitas erindi, siis siin näidatakse selle pinujälge." #: thonny/plugins/heap.py:22 msgid "ID" msgstr "ID" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "Andmed" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "Atribuudid" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "Indeks" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "Võtme ID" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "Võti" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "Tagasi\n" "%s" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "Port või WebREPL" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "Parool" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "Lähtekood" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "Kasuta Tk failidialooge Zenity asemel" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "Vali kui failidialoogid satuvad peaakna taha" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "Keskkonnamuutujad (üks VÕTI=VÄÄRTUS ühel real)" thonny-3.3.14/thonny/locale/fa_IR/000077500000000000000000000000001411757431400166665ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/fa_IR/LC_MESSAGES/000077500000000000000000000000001411757431400204535ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/fa_IR/LC_MESSAGES/thonny.mo000066400000000000000000001137321411757431400223360ustar00rootroot00000000000000L ||}]$) *3^ m&z+-! D.7s&      1x?  &5< P[j;{    , GD I [ c <x % * !%!8!U!Y!^!d!y!!!3!""1"8"H" Q"]"m"u"|""!" """ #B#\#b#g#v### ##%##/#'$.B$q$ w$$$ $$ $$$$ $$$$$ %"%(% 1% >% I%U%g%,&/2&=b& &&&&&0&' ''6,'c'}'''''''''L(FM((C\)))7)***!*9*X* s** ** ***3*+ ++&+/+E+T+Y+ a+l+|+ +++~,z1-;---. %.13. e......../ /"/n2//,v000<01-1U1c)222 2n2!3 53 A3 O3 ]3k3q333?3C3454'S4){4 444445&5;5TC5 5555 555H5O'65w66666667 $707:87s7x77&777777 8 8 8*8;8M8a8f8 x8B888 88 8&9)9 19=9 V9 d9q99 999 9 999 9"9: : /: :: G: U:`: g:t:z:: :: : ::2:/;8O;;:;; ;< <0!<R<d<v< {< <<<-<< < <= === 0= ==)K=u=}= ====== =>=n=>0>!> > ? ? @b@@ATA/fAA@PBBB"BBB B CC#C0,C ]CgC lCvCCCCCCC CC2D%7D]DcD lDvDDDLDDD5E EEEECF#YF}F F FF FF1F%F G%GV7GIG GG GGH&HHH\IYI5WJJJGJK?KI_K5KKBtLkL #M0M9M MMZMrMyM#MMMNN N#N0N#O}(V}}%}}}} }~~*~ @~4a~~*~ ~%~ 'A[n7+?LSfV^s!q:΂Ղl%Z  ă5҃ EYm*Ʉ+ 34 h"sɅ !!c*KE)Їt9ƊoIFaa ";C$) ݎ+#*iN ͏؏&-@-W%ːސOFJ !+kiǓ<"/=wm(! 8DT fQq7ÕJ~[rږ M%[%Ɨ%d items(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)(restart Thonny after changing this)(used when clicking Debug toolbar button)A special virtual environment (deprecated)About BirdseyeAbout ThonnyAdvanced install / upgrade / downgradeAdvanced optionsAllow code completion with Tab-key in ShellAllow code completion with Tab-key in editorsAllow only single Thonny instanceAllow stepping into libraries (ie. outside of main script directory)Alternative Python 3 interpreter or virtual environmentAre you sure you want to uninstall it?AssistantAttributesAuthenticationAuthorAuto-completeBackBack to %sBack to current frameBad directoryBirdseye is a Python debugger which needs to be installed separately. Do you want to open the help page and learn more?Birdseye portBrowse the packagesBugtrackerCan't close yetCan't find package name from the list:Can't find suitable diskCancelCancel the process?CancellingCase sensitiveChange font sizeChange working directory to script directory on Run / DebugCircuitPython (generic)CircuitPython deviceClearClear shellClickClick CloseClose allClose othersComment outConfiguration has been updated. Restart Thonny to start working in regular mode. (See 'Tools → Options → General' if you change your mind later.)Configure %s filesConfigure interpreter...ConfirmationConnect your device to the computer and select corresponding port belowCopyCopy to clipboardCopyingCopying %s to %sCould not find disk '%s'. Do you want to locate it yourself?Could not find the package from PyPI.Could not find the package info from PyPI.Create new virtual environmentCreating directoryCreating virtual environmentCutDataDebugDebug current scriptDebug current script (birdseye)Debug current script (faster)Debug current script (nicer)Debug mode (provides more detailed diagnostic logs)Decrease font sizeDedent selected linesDeleteDelete selectedDeletingDeleting %sDesired versionDetailsDeviceDirectory propertiesDisable notification soundDisabled checks (one id per line)DisconnectDo you want to overwrite '%s' ?Dock user windowsDocumentationDon't forget that main.py only works without embedded main script.Done!DownDownload to %sDownloading %s to %sEditEditorEditor fontEnter an integerEnter name for new directory under %sEnter string to be replaced.Enter the passphrase of your private key for {}Enter your password for {}Environment variables (one KEY=VALUE per line)ErrorError code:Error:EventsExceptionExitExit ThonnyExpand in ShellExport usage logs...FileFile name:File propertiesFilesFindFind & ReplaceFind package from PyPIFind:FirmwareFocus editorFocus intoFocus shellFont scaling modeFor performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell). Here you can interact with the original text fragment.For uninstalling delete corresponding files.For upgrading simply install the package again.Found several '%s' disks. Do you want to choose one yourself?Full screenFunctionFunction call at %sGeneralHeapHeap mode is on. Close Heap view to turn it off.HelpHelp contentsHide hidden filesHighlight current line (requires reopening the editor)Highlight local variablesHighlight matching namesHighlight parenthesesHighlight syntax elementsHighlight tab charactersHomeHomepageIDINSTALLIO fontIf last command raised an exception then this view will show the stacktrace.If you can't find it, you may need to install proper USB driver first.If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER.If you still want it, then please install it from the command line.Increase font sizeIndent selected linesIndent with tab characters (not recommended for Python)IndexInstallInstall from PyPIInstall from local fileInstall from requirements fileInstall or update firmwareInstalled to:Installed version:InstallingInstalling '%s'InterpreterInterrupt executionIntoKeep terminal window open after Python process endsKeyKey IDKnown interpretersLanguageLatest stable versionLatest versionLoadLoadingLoading %sLocal variablesLocationLocation: Log program usage eventsLooks like you are installing a Thonny-related package. If you meant to install a Thonny plugin, then you should choose 'Tools → Manage plugins...' instead Are you sure you want to install %s for the back-end?Looks like you are trying to install an outdated Thonny plug-in (it doesn't specify required Thonny version). If you still want it, then please install it from the command line.Made in University of Tartu, Estonia, with the help from open-source community, Raspberry Pi Foundation and Cybernetica ASMake sure MicroPython has been installed to your micro:bit.Manage packages for %sManage packages...Manage plug-ins...Maximize viewMaximum length of line fragments before squeezingMaximum number of lines to keep.May make debugging slower.MicroPython (SSH)MicroPython (generic)MicroPython (local)MicroPython deviceModifiedModuleMove to Recycle BinMove to TrashMoving %s to %sNB! Automatic closing needs to be enabled in Terminal's settings (Profiles → Shell → When the shell exits)NB! File selection button may not work properly when selecting executables from a virtual environment. In this case choose the 'activate' script instead of the interpreter (or enter the path directly to the box)!NB! Large values may cause poor performance!NB! Restart Thonny after changing these options!NB! Some style elements change only after restarting Thonny!NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install.NB! Thonny only supports Python 3.5 and laterNB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in.NB! micropython.org has published version %s of this package and this will be installed by default.NameNewNew directoryNew packages will be also installed into this directory. Other locations must be managed by alternative means.New packages will be installed toNext objectNot availableNot connectedNot supportedNotesNothing selectedOKObject inspectorOpen Assistant automatically when it has warnings for your codeOpen Assistant automatically when program crashes with an exceptionOpen Thonny data folder...Open Thonny program folder...Open and close Stack view automaticallyOpen evaluated values in Object inspectorOpen from %sOpen in ThonnyOpen in Thonny's text editorOpen in system default appOpen in system file managerOpen replayer...Open system shell...Open...Opens the Stack view on first call and closes it when program returns to main frame.Options...OutOutlineOverOverwrite?Overwriting theme '%s'PackagePackage '{}' is required for installing and uninstalling other packages.Package is not available at micropython.org. Version at PyPI will be installed.Package manager is not available for this interpreterPackages' directoryPasswordPastePathPerform MyPy checksPerform selected Pylint checksPlease check your spelling!Please waitPlotterPlotter visualizes series of numbers printed to the Shell.PortPort or WebREPLPreferred debuggerPresent Python REPL after program endsPreviewPrevious objectPrint...Program argumentsProgram arguments:Program treePropertiesPyPI pagePygame Zero modePython executablePython interpretersQuitReally uninstall?Recent filesRecommended maximum line length (Set to 0 to turn off margin line)RedoRefreshRegular modeRemote Python 3 (SSH)Rename...Reopen all files from previous sessionReplaceReplace allReplace tabs with spacesReplace with:Replace+FindReport problemsRequiresRequires:ResumeRunRun & DebugRun / resumeRun current scriptRun current script in terminalRun to cursorRunning current script in terminalSaveSave All filesSave as...Save copy...Save passwordSave to %sSavingSaving to %sScopeSearch on PyPISearch resultsSearchingSee Help for details.Select AllSelect allSelect an item and try again!Select empty directory for new virtual environmentSelect existing or create a new empty directorySelect if the file dialogs end up behind the main windowSelect interpreterSelected directory is not empty. Select another or cancel.Send EOF / Soft rebootShadowed items (not importable):ShellShow PlotterShow function calls (frames) in separate windowsShow hidden filesShow line numbersSizeSize (bytes)Source codeSqueezed text (%d characters)StackStart by selecting the package from the left.StartingStep backStep intoStep outStep overStopStop/Restart backendStorage infoStorage spaceStorage space on this drive or filesystemSummarySwitch to regular modeSyntax themeTarget device locationTarget device modelTarget:TerminalTerminal emulationThe answer isThe process is still running. Are you sure you want to cancel?The representation above is an approximate value of this float. The exact stored value is %s which is about %sThe same interpreter which runs Thonny (default)The specified text was not found!Theme & FontThis box is meant for your working notes -- assignment instructions, code snippets, whatever. Everything will be saved automatically and loaded when you open Thonny next time. Feel free to delete this text to make room for your own notes.This computerThis dialog is for managing Thonny plug-ins and their dependencies. If you want to install packages for your own programs then choose 'Tools → Manage packages...'This dialog lists all available packages, but allows upgrading and uninstalling only packages fromThis dialog lists top-level modules from following directories: This is a commentThis package requires different Thonny version:This program comes with ABSOLUTELY NO WARRANTY! It is free software, and you are welcome to redistribute it under certain conditions, see https://opensource.org/licenses/MIT for detailsThis virtual environment is automatically maintained by Thonny. Thonny optionsThonny plug-insThonny plugin without requirementsToggle commentToolsTry to detect port automaticallyUI modeUI scaling factorUI themeUncheck if you want more traditional experience.UncommentUndoUninstallUninstalling '%s'Unsuitable requirementsUpUpgradeUpgrade dependenciesUpgrade or uninstallUpgrading '%s'Upload to %sUploading %s to %sUse "Stop" command if you want to cancel debuggingUse Tk file dialogs instead of ZenityValueValue IDVariablesVersion historyVersion to be installedViewWhat to do with a %s file when you double-click it in Thonny's file browser?Which interpreter or device should Thonny use for running your code?With current interpreter you can only browse the packages here. Use 'Tools → Open system shell...' for installing, upgrading or uninstalling.Working...Wrap text (may be slow)You need to enterYou need to select a file!You need to stop your program before launching the package manager.Your interpreter isn't in the list?Zoomall filesblah, blahbytesfree spaceherelook for your device name, "USB Serial" or "UART"no absolute lib directory in sys.pathplease waitsupports basic ANSI-colors and stylesto locate and install the package file (usually with .whl, .tar.gz or .zip extension).to locate requirements.txt file and install the packages specified in it.total spaceunclosed_stringused spaceuser site packagesvirtual environmentMIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: POEditor.com Project-Id-Version: Thonny Language: fa تعداد %d مورددر این حالت هسته تانی از مفسر یکسانی استفاده می کند، بنابراین هر دو پنجره بسته‌های یکسانی را مدیریت می کنند.)(بعد از تغییر این گزینه باید مجدد تانی را اجرا کنید)(هنگام کلیک کردن روی دکمه خطایابی استفاده می شود)یک محیط مجازی ویژه (منسوخ شده)درباره Birdseyeدرباره تانینصب، ارتقاء یا نصب نسخه‌ قدیمی پیشرفتهتنظیمات پیشرفتهاجازه تکمیل کد با زدن دکمه Tab در شِلاجازه تکمیل کد با زدن دکمه Tab در ویرایشگرفقط یکبار اجرای تانی مجاز استاجازه قدم گذاشتن به داخل کتابخانه‌ها (مانند مواقعی که خارج از پوشه اسکریپت هستید)سایر مفسرهای پایتون 3 و یا محیط مجازیآیا از اینکه می‌خواهید آن برنامه را حذف کنید، مطمئن هستید؟دستیارخواصاحراز هویتسازندهتکمیل خودکارعقببرگرد به %sبازگشت به فریم فعلیپوشه نامناسبBirdseye یک خطایاب پایتون است و بایستی جداگانه نصب شود. آیا می‌خواهید صفحه راهنمای را باز کنید و بیشتر بدانید؟پورت Birdseyeمرور بسته‌هاخطایابهنوز قابل بستن نیستبسته در فهرست زیر یافت نشد:دیسک مناسب یافت نشدلغواین پردازش لغو شود؟درحال لغوحساس به حروف کوچک و بزرگ انگلیسیتغییر اندازه فونتپوشه فعلی را به پوشه اسکریپت در اجرا / خطایابی تغییر دهیدCircuitPython (عمومی)دستگاه CircuitPythonپاک کنپاک کردن شِلکلیککلیکبستنبستن همهبستن بقیهکد به توضیحتنظیمات بروز رسانی شد. برای شروع کار در محیط عادی، تانی را مجدد اجرا کنید. (اگر نظرتان عوض شد، از «ابزارها ← تنظیمات ← عمومی» را انتخاب کنید)%s فایل تنظیم شدپیکره‌بندی مفسر...تاییددستگاه خود را به رایانه متصل کرده و پورت مربوط را از زیر انتخاب کنیدکپیکپی در حافظه موقتدرحال کپیکپی %s در %sدیسک %s پیدا نشد. آیا مایلید که محل آن را خودتان مشخص کنید؟بسته مورد نظر در PyPI پیدا نشد.این بسته در PyPI یافت نشد.ایجاد محیط مجازی جدیدساخت پوشهساخت یک محیط مجازیبرشدادهخطایابیخطایابی این اسکریپتخطایابی همین اسکریپت (birdseye)خطایابی همین اسکریپت (سریع)خطایابی همین اسکریپت (مبتدی)حالت خطایابی (ثبت خطایابی‌ها با جزئیات بیشتر)فونت کوچک‌تر شودحذف تورفتگی خطوط انتخابیحذفحذف انتخاب شده‌هادر حال حذفحذف %sنسخه دلخواهجزئیاتدستگاهمشخصات پوشههشدارهای صوتی غیرفعال شودلغو بررسی (یک شناسه در هر خط)قطع اتصالآیا می‌خواهید بر روی «%s» جایگزین شود؟ثابت‌ کردن محل پنجره‌های شمامستنداتدقت کنید که main.py در صورتی کار می‌کند که بدون اسکریپ main باشد.انجام شد!رو به پاییندانلود در %sدرحال دانلود %s در %sویرایشویرایشگرفونت ویرایشگرعددی صحیح را وارد کنیدنام پوشه جدید که در زیر مجموعه پوشه زیر ساخته خواهد شد را وارد کنید. %sمتنی را جهت جایگزینی وارد کنید.برای {} عبارت کلید خصوصی خود را وارد کنیدبرای {} گذرواژه خود را وارد کنیدمتغیرهای محیطی (در هر سطر یک مقدار=کلید)خطاکد خطا:خطا:رویدادهااستثناءخروجخروج از Thonnyبسط دادن در شِلذخیره وقایع ثبت شده...فایلنام فایل:مشخصات فایلفایل‌هایافتنیافتن و جایگزینییافتن بسته از PyPIیافتنسفت‌افزاربرو به ویرایشگربرو بهبرو به شِلمقیاس اندازه فونتبرای بهبود کارآیی، شِل از نمایش خطوط بلند به صورت کامل خودداری می‌کند (به ابزارها ← تنظیمات ← شِل بروید). از اینجا می توانید با قسمتی از متن اصلی کار کنید.برای حذف فایلهای مربوطه را حذف کنید.برای به روزرسانی ساده‌تر، بسته را دوباره نصب کنید.چندین دیسک %s پیدا شد. آیا مایلید که خودتان یکی از آنها را انتخاب کنید؟تمام صفحهتابعفراخوانی تابع در %sعمومیهیپحالت هیپ فعال است. برای بستن آن باید نمای هیپ را ببندید.راهنمامحتوای راهنماعدم نمایش فایل‌های مخفینمایان کردن خط فعلی (باید دوباره ویرایشگر را باز کنید)نمایان کردن متغیرهای محلینمایان کردن نام‌های یکساننمایان کردن پرانتزهانمایان کردن اجزای دستورنمایان کردن Tabهاخانهصفحه اصلی سایتشناسهنصب برنامهفونت IOاگر آخرین دستور یک خطا را ایجاد کند این نما، stacktrace (ردیاب اِستک) را نمایش می‌دهد.اگر آن را پیدا نکردید،احتمالا لازم است که ابتدا درایور USB مناسب را نصب کنید.اگر نمی دانید بسته را باید از کجا بگیرید، به احتمال زیاد بخواهید تا فهرست بسته‌های پایتون را جستجو کنید. ابتدا نام بسته را در قسمت جستجو وارد کنید و سپس کلید Enter را بزنید.اگر کماکان آن را می‌خواهید ، لطفاً آن را از خط فرمان نصب کنید.فونت درشت‌تر شودتورفتگی خطوط انتخابیایجاد تورفتگی با Tab (در پایتون این کار توصیه نمی‌شود)اندیسنصب برنامهنصب برنامه از PyPIنصب با فایل‌های موجودنصب از فایل‌های مورد نیازنصب یا بروز رسانی سفت‌ابزارنصب در:نسخه نصب شده:در حال نصبدر حال نصب «%s»مفسرقطع اجراداخلپنجره ترمینال را بعد از اتمام پردازش پایتون باز نگه دارکلیدشناسه کلیدمفسرهای مشهورزبانآخرین نسخه پایدارآخرین نسخهبارگذاریدر حال بازگذاریدر حال بارگذاری %sمتغیرهای محلیمحلمحل:ثبت رویداد‌های استفاده از برنامهبه نظر می رسد شما در حال نصب یکی از بسته‌های تانی هستنید. اگر قصد نصب پلاگینی برای تانی را دارید باید از «ابزارهای ← مدیریت افزونه‌ها...» اقدام کنید. آیا از نصب %s برای هسته کاملا مطمئن هستید؟به نظر می رسد که شما در حال نصب یک افزونه قدیمی تانی هستید (نسخه مورد نیاز تانی را مشخص نمی کند). اگر واقعا آن را می خواهید ، لطفاً توسط خط فرمان آن را نصب کنید.ساخته شده در دانشگاه Tartu، کشور استونی با کمک از جامعه متن باز، بنیاد رزبری پای و Cybernetica ASمطمئن شوید که MicroPython بر روی micro:bit شما نصب است...مدیریت بسته‌های %sمدیریت بسته‌ها...مدیریت افزودنی‌ها...نمای کاملحداکثر طول یک قطعه از خط قبل از فشرده شدننگهداری حداکثر تعداد سطر ممکن.ممکن است خطایابی را کندتر کند.میکروپایتون (SSH)MicroPython (عمومی)میکروپایتون (محلی)دستگاه MicroPythonویرایش شدهماژولانتقال به سطل بازیافتانتقال به سطل زبالهانتقال %s به %sتوجه مهم! بستن خودکار نیاز به فعال سازی تنظیمات ترمینال دارد (پروفایل ← شِل ← هنگام خروج از شِل)توجه مهم! دکمه انتخاب فایل در هنگام انتخاب فایل‌های اجرایی در محیط مجازی ممکن است به درستی کار نکند. در این صورت اسکریپت «activate» را به جای مفسر انتخاب کنید (و یا مسیر را در قسمت مسیر مستقیما وارد کنید)!توجه مهم! مقادیر بزرگ ممکن است باعث کاهش کارآیی شوند!توجه مهم! بعد از تغییر این گزینه‌ها باید تانی را دوباره باز کنید!توجه مهم! برخی از تغییرات ظاهری موارد نیاز به اجرای دوباره تانی دارد!توجه مهم! ممکن است نسخه دیگری موجود باشد که با نسخه فعلی تانی سازگار باشد. برای انتخاب نسخه مورد نظرتان برای نصب، بر روی دکمه «...» کلیک کنید.توجه مهم! تانی فقط از پایتون 3.5 به بعد پشتیبانی می‌کندتوجه مهم! بعد از نصب / ارتقاء / حذف افزونه‌ای، باید تانی را دوباره باز کنید.توجه مهم! micropython.org نسخه %s این بسته را منتشر کرده است و به صورت پیش فرض نصب خواهد شد.نامجدیدپوشه جدیدبسته‌های جدید در این پوشه نصب خواهند شد. مسیرهای دیگر باید با سایر روش‌ها مدیریت شود.بسته‌های جدید نصب خواهند شد درشیء بعدیموجود نیستوصل نیستپشتیبانی نمی‌شودیادداشت‌هاچیزی انتخاب نشده استتاییدبازرس اشیاءاجرای خودکار دستیار در هنگام داشتن هشدارهایی در برنامهاجرای خودکار دستیار در هنگام اجرا نشدن برنامه همرا خطانمایش فولدر داده‌های تانینمایش فولدر برنامه تانیباز و بسته شدن خودکار نمای اِستکنمایش مقدار محاسبه شده را در بازرس اشیاءباز کردن از %sبازکردن در تانیدر ویرایشگر متنی تانی باز شودبازکردن با نرم افزار پیش‌فرض سیستمبازکردن در برنامه مدیریت فایل سیستمباز کردن «بازپخش کننده»بازکردن شِل سیستمباز کردن...نمای اِستک را در اولین فراخوانی نمایش داده و بعد از بازگشت برنامه به فریم اصلی آن را خواهد بست.تنظیمات...بیرونطرح کلیبعدیجایگزین شود؟در حال بازنویسی قالب «%s»بستهبسته «{}» برای نصب و یا حذف سایر بسته‌ها مورد نیاز است.این بسته در micropython.org موجود نبود. نسخه موجود در PyPI نصب خواهد شد.مدیریت بسته برای این مفسر موجود نیستپوشه‌ی بسته‌هاگذرواژهجای‌گذاریمسیربررسی MyPyبررسی Pylint انتخابیلطفا غلط املائی را بررسی کنید!اندکی صبر...نمودارنموداری به صورت گرافیکی اعدادی که در شِل چاپ می‌شوند را نمایش می‌دهد.پورتپورت WebREPLخطایاب انتخابینمایش Python REPL بعد از اتمام برنامهپیش‌نمایششیء قبلیچاپ...ورودی‌های برنامهورودی‌های برنامه:درخت برنامهویژگی‌هاصفحه PyPIحالت Pygame Zeroفایل اجرایی پایتونمفسرهای پایتونخروجواقعا برنامه را حذف می‌کنید؟آخرین فایل‌هاحداکثر طول خط پیشنهادی (برای خاموش کردن خط حاشیه روی 0 تنظیم کنید)بازانجامتازه سازیحالت عادیدسترسی از راه‌ دور پایتون 3 (SSH)تغییر نام...تمام فایلها‌ی اجرای قبلی برنامه را دوباره باز شودجایگزینیجایگزینی همهجایگزینی Tabها با فاصلهجایگزین شود با:جایگزین و یافتن بعدیگزارش مشکلاتالزاماتمورد نیاز:ادامهاجرااجرا و خطایابیاجرا / ادامهاجرای این اسکریپتاجرای این اسکریپت در ترمینالاجرا تا نشانگراجرای این اسکریپ در شِلذخیرهذخیره تمامی فایل‌هاذخیره با نام...ذخیره یک کپی ..ذخیره گذرواژهذخیره در %sدر حال ذخیرهدر حال ذخیره %sمیدان دیدجستجو در PyPIنتایج جستجودر حال جستجوبرای جزئیات، راهنما را ببینید.انتخاب همهانتخاب همهموردی را انتخاب کنید و دوباره امتحان کنید!برای محیط مجازی جدید بایستی پوشه‌ای خالی را انتخاب کنیدپوشه‌ای را انتخاب کنید و یا یک پوشه خالی بسازیداگر پنجره‌ها پشت پنجره اصلی برنامه قرار می‌گیرد، این گزینه را انتخاب کنیدانتخاب مفسرپوشه انتخاب شده خالی نیست. یکی دیگر را انتخاب کنید و یا لغو کنید.ارسال EOF/ ریبوت نرمموارد سایه‌دار (وارد نشده‌اند):شِلنمایش نمودارفراخوانی توابع را در پنجره‌های جداگانه (فریم‌ها) نمایش بدهنمایش فایل‌های مخفینمایش شماره خطوطاندازهاندازه (بایت)کد اصلیمتن فشرده شده (شامل %d کاراکتر)اِستکبا انتخاب بسته‌ای از سمت چپ شروع کنید.درحال شروعگامی به عقبگامی به داخلگامی به خارجگام بعدیتوقفتوقف/ اجرای دوباره هستهاطلاعات فضای ذخیره سازیفضای ذخیرهفضای ذخیره سازی در این درایوخلاصهبرگشت به حالت عادیقالب نوشتارمحل دستگاه مقصدنوع دستگاه مقصدمقصد:ترمینالشبیه‌ ساز ترمینالپاسخپردازش هنوز در حال اجراست. آیا از لغو آن اطمینان دارید؟مقدار نمایش داده شده در بالا، مقدار تقریبی این عدد اعشاری است. مقدار دقیق ذخیره شده در %s تقریبا %s است.همان مفسری که تانی را اجرا می کند (پیش فرض)متن تعیین شده یافت نشد!قالب و فونتاین قسمت برای یادداشت‌های کاری شما، مقداردهی‌ها ، قطعه کد و یا هر یادداشت دلخواه دیگری است. هر چیزی در آن به صورت خودکار ذخیره خواهد شد و در اجرای بعدی تانی نمایش داده می‌شود. می‌توانید همین متن را برای داشتن فضای بیشتر، پاک کنید.این کامپیوتراین پنجره برای مدیریت افزونه‌های تانی و وابستگی‌های آنها است. اگر می‌خواهید که یک بسته را برای برنامه‌تان نصب کنید باید اینکار را «ابزارها ← مدیریت بسته‌ها» انجام دهید.این پنجره تمام بسته های موجود را لیست می کند، اما فقط اجازه می‌دهد تا ارتقا و حذف بسته از مسیر زیر انجام شوداین پنجره ماژول‌های سطح بالا را از پوشه‌های زیر لیست می کند:این یک توضیح استاین بسته به نسخه دیگری از تانی نیاز دارد:این برنامه بدون هیچگونه ضمانتی است! این نرم افزار رایگان است و می‌توانید آن را تحت شرایط تعیین شده، باز توزیع نمایید. برای جزئیات بیشتر به آدرس زیر مراجعه کنید: https://opensource.org/licenses/MITاین محیط مجازی به طور خودکار توسط تانی نگهداری می شود.تنظیمات تانیافزودنی‌های تانیافزودنی‌های تانی بدون پیش‌نیازتغییر وضعیت توضیحاتابزارهاشروع تشخیص خودکار پورتحالت ظاهری برنامهضریب اندازه ظاهر برنامهقالب محیط نرم افزاراگر می خواهید تجربه سنتی‌تری داشته باشید، غیر فعالش کنید.توضیح به کدواگردحذف برنامهدر حال حذف «%s»پیش‌نیازهای نامناسبرو به بالابه روز رسانیبه‌روزرسانی پیش‌نیازهاارتقاء یا حذف برنامهدر حال ارتقای «%s»آپلود به %sبارگذاری %s در %sبرای لغو خطایابی از دستور «Stop» استفاده کنیدبه جای پنجره فایل Zenity از Tk استفاده کنیدمقدارشناسه مقدارمتغیرهاتغییرات نسخه‌‌هانسخه‌ای که نصب خواهد شدنماوقتی که فایل %s را در مرورگر فایل تانی دوبار کلیک شد، چه شود؟تانی از کدام مفسر یا دستگاه برای اجرای کد شما استفاده کند؟با مفسر فعلی فقط می توانید بسته‌ها را در اینجا ببینید. برای نصب، ارتقاء و یا حذف به «ابزارها ← باز کردن شِل سیستم» بروید.درحال کار کردن...شکستن خطوط (ممکن است کمی کند باشد)باید وارد شویدباید فایلی را انتخاب کنید!قبل از راه‌اندازی مدیریت بسته‌ها، باید برنامه خود را متوقف کنید.مفسر شما در لیست نیست؟بزرگنماییهمه فایل‌هاو غیرهبایت‌هافضای آزاداینجانام دستگاه خود، «USB Serial» یا «UART» را مشخص کنیدبدون پوشه مشخص (مطلق) lib در sys.pathاندکی صبر...پشتیبانی از استایل‌ها و رنگ‌های ANSI سادهبرای مشخص کردن و نصب بسته از فایل (معمولا با پسوندهای whl. یا tar.gz و یا zip.)برای مشخص کردن محل فایل requirements.txt و نصب بسته‌های مشخص شده در آن.فضای کلانتهای متن بسته نیستفضای استفاده شدهبسته‌های سایت کاربرمحیط مجازیthonny-3.3.14/thonny/locale/fa_IR/LC_MESSAGES/thonny.po000066400000000000000000001576551411757431400223550ustar00rootroot00000000000000msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Thonny\n" "Language: fa\n" #: thonny/workbench.py:357 msgid "File" msgstr "فایل" #: thonny/workbench.py:358 msgid "Edit" msgstr "ویرایش" #: thonny/workbench.py:359 msgid "View" msgstr "نما" #: thonny/running.py:122 thonny/workbench.py:360 msgid "Run" msgstr "اجرا" #: thonny/workbench.py:361 msgid "Tools" msgstr "ابزارها" #: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362 msgid "Help" msgstr "راهنما" #: thonny/plugins/cpython/__init__.py:610 msgid "Alternative Python 3 interpreter or virtual environment" msgstr "سایر مفسرهای پایتون 3 و یا محیط مجازی" #: thonny/plugins/cpython/__init__.py:618 msgid "A special virtual environment (deprecated)" msgstr "یک محیط مجازی ویژه (منسوخ شده)" #: thonny/workbench.py:582 msgid "Exit" msgstr "خروج" #: thonny/workbench.py:609 msgid "Decrease font size" msgstr "فونت کوچک‌تر شود" #: thonny/workbench.py:621 msgid "Focus editor" msgstr "برو به ویرایشگر" #: thonny/workbench.py:630 msgid "Focus shell" msgstr "برو به شِل" #: thonny/workbench.py:641 msgid "Maximize view" msgstr "نمای کامل" #: thonny/workbench.py:653 msgid "Full screen" msgstr "تمام صفحه" #: thonny/workbench.py:1377 msgid "Program arguments" msgstr "ورودی‌های برنامه" #: thonny/plugins/about.py:28 thonny/plugins/about.py:163 msgid "About Thonny" msgstr "درباره تانی" #: thonny/plugins/about.py:81 msgid "Made in\n" "University of Tartu, Estonia,\n" "with the help from\n" "open-source community,\n" "Raspberry Pi Foundation\n" "and Cybernetica AS" msgstr "ساخته شده در\n" " دانشگاه Tartu، کشور استونی\n" " با کمک از جامعه متن باز،\n" " بنیاد رزبری پای \n" "و Cybernetica AS" #: thonny/plugins/about.py:107 msgid "This program comes with\n" "ABSOLUTELY NO WARRANTY!\n" "It is free software, and you are welcome to\n" "redistribute it under certain conditions, see\n" "https://opensource.org/licenses/MIT\n" "for details" msgstr "این برنامه بدون \n" "هیچگونه ضمانتی است!\n" "این نرم افزار رایگان است و می‌توانید آن را تحت شرایط تعیین شده،\n" "باز توزیع نمایید. برای جزئیات بیشتر به آدرس زیر مراجعه کنید:\n" "https://opensource.org/licenses/MIT" #: thonny/plugins/about.py:152 msgid "Version history" msgstr "تغییرات نسخه‌‌ها" #: thonny/plugins/about.py:159 msgid "Report problems" msgstr "گزارش مشکلات" #: thonny/plugins/assistant_config_page.py:16 msgid "Open Assistant automatically when program crashes with an exception" msgstr "اجرای خودکار دستیار در هنگام اجرا نشدن برنامه همرا خطا" #: thonny/plugins/assistant_config_page.py:23 msgid "Open Assistant automatically when it has warnings for your code" msgstr "اجرای خودکار دستیار در هنگام داشتن هشدارهایی در برنامه" #: thonny/plugins/assistant_config_page.py:30 msgid "Perform selected Pylint checks" msgstr "بررسی Pylint انتخابی" #: thonny/plugins/assistant_config_page.py:34 msgid "Perform MyPy checks" msgstr "بررسی MyPy" #: thonny/plugins/assistant_config_page.py:36 msgid "Disabled checks (one id per line)" msgstr "لغو بررسی (یک شناسه در هر خط)" #: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73 msgid "Assistant" msgstr "دستیار" #: thonny/plugins/autocomplete.py:333 msgid "Auto-complete" msgstr "تکمیل خودکار" #: thonny/plugins/backend_config_page.py:84 msgid "Which interpreter or device should Thonny use for running your code?" msgstr "تانی از کدام مفسر یا دستگاه برای اجرای کد شما استفاده کند؟" #: thonny/plugins/backend_config_page.py:320 msgid "Interpreter" msgstr "مفسر" #: thonny/plugins/birdseye_frontend.py:54 msgid "About Birdseye" msgstr "درباره Birdseye" #: thonny/plugins/birdseye_frontend.py:55 msgid "Birdseye is a Python debugger which needs to be installed separately.\n" "\n" "Do you want to open the help page and learn more?" msgstr "Birdseye یک خطایاب پایتون است و بایستی جداگانه نصب شود.\n" "\n" "آیا می‌خواهید صفحه راهنمای را باز کنید و بیشتر بدانید؟" #: thonny/plugins/birdseye_frontend.py:83 msgid "Debug current script (birdseye)" msgstr "خطایابی همین اسکریپت (birdseye)" #: thonny/plugins/commenting_indenting.py:172 msgid "Toggle comment" msgstr "تغییر وضعیت توضیحات" #: thonny/plugins/commenting_indenting.py:182 msgid "Comment out" msgstr "کد به توضیح" #: thonny/plugins/commenting_indenting.py:192 msgid "Uncomment" msgstr "توضیح به کد" #: thonny/plugins/common_editing_commands.py:21 msgid "Undo" msgstr "واگرد" #: thonny/plugins/common_editing_commands.py:33 msgid "Redo" msgstr "بازانجام" #: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176 msgid "Cut" msgstr "برش" #: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177 msgid "Copy" msgstr "کپی" #: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178 msgid "Paste" msgstr "جای‌گذاری" #: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152 msgid "Select all" msgstr "انتخاب همه" #: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398 msgid "Run to cursor" msgstr "اجرا تا نشانگر" #: thonny/plugins/debugger.py:980 msgid "Can't close yet" msgstr "هنوز قابل بستن نیست" #: thonny/plugins/debugger.py:981 msgid "Use \"Stop\" command if you want to cancel debugging" msgstr "برای لغو خطایابی از دستور «Stop» استفاده کنید" #: thonny/plugins/dock_user_windows_frontend.py:28 msgid "Dock user windows" msgstr "ثابت‌ کردن محل پنجره‌های شما" #: thonny/plugins/editor_config_page.py:15 msgid "Highlight matching names" msgstr "نمایان کردن نام‌های یکسان" #: thonny/plugins/editor_config_page.py:21 msgid "Highlight local variables" msgstr "نمایان کردن متغیرهای محلی" #: thonny/plugins/editor_config_page.py:26 msgid "Highlight parentheses" msgstr "نمایان کردن پرانتزها" #: thonny/plugins/editor_config_page.py:27 msgid "Highlight syntax elements" msgstr "نمایان کردن اجزای دستور" #: thonny/plugins/editor_config_page.py:31 msgid "Highlight current line (requires reopening the editor)" msgstr "نمایان کردن خط فعلی (باید دوباره ویرایشگر را باز کنید)" #: thonny/plugins/editor_config_page.py:36 msgid "Allow code completion with Tab-key in editors" msgstr "اجازه تکمیل کد با زدن دکمه Tab در ویرایشگر" #: thonny/plugins/editor_config_page.py:42 msgid "Allow code completion with Tab-key in Shell" msgstr "اجازه تکمیل کد با زدن دکمه Tab در شِل" #: thonny/plugins/editor_config_page.py:51 msgid "Show line numbers" msgstr "نمایش شماره خطوط" #: thonny/plugins/editor_config_page.py:54 msgid "Recommended maximum line length\n" "(Set to 0 to turn off margin line)" msgstr "حداکثر طول خط پیشنهادی\n" "(برای خاموش کردن خط حاشیه روی 0 تنظیم کنید)" #: thonny/plugins/editor_config_page.py:75 msgid "Editor" msgstr "ویرایشگر" #: thonny/plugins/event_logging.py:206 msgid "Export usage logs..." msgstr "ذخیره وقایع ثبت شده..." #: thonny/plugins/event_view.py:39 msgid "Events" msgstr "رویدادها" #: thonny/plugins/files.py:551 msgid "Files" msgstr "فایل‌ها" #: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416 msgid "Find & Replace" msgstr "یافتن و جایگزینی" #: thonny/plugins/find_replace.py:63 msgid "Find:" msgstr "یافتن" #: thonny/plugins/find_replace.py:74 msgid "Replace with:" msgstr "جایگزین شود با:" #: thonny/plugins/find_replace.py:92 msgid "Case sensitive" msgstr "حساس به حروف کوچک و بزرگ انگلیسی" #: thonny/plugins/find_replace.py:99 msgid "Up" msgstr "رو به بالا" #: thonny/plugins/find_replace.py:103 msgid "Down" msgstr "رو به پایین" #: thonny/plugins/find_replace.py:112 msgid "Find" msgstr "یافتن" #: thonny/plugins/find_replace.py:122 msgid "Replace" msgstr "جایگزینی" #: thonny/plugins/find_replace.py:130 msgid "Replace+Find" msgstr "جایگزین و یافتن بعدی" #: thonny/plugins/find_replace.py:140 msgid "Replace all" msgstr "جایگزینی همه" #: thonny/plugins/find_replace.py:236 msgid "Enter string to be replaced." msgstr "متنی را جهت جایگزینی وارد کنید." #: thonny/plugins/find_replace.py:320 msgid "The specified text was not found!" msgstr "متن تعیین شده یافت نشد!" #: thonny/plugins/general_config_page.py:15 msgid "Allow only single Thonny instance" msgstr "فقط یکبار اجرای تانی مجاز است" #: thonny/plugins/general_config_page.py:22 msgid "Reopen all files from previous session" msgstr "تمام فایلها‌ی اجرای قبلی برنامه را دوباره باز شود" #: thonny/plugins/general_config_page.py:37 msgid "Disable notification sound" msgstr "هشدارهای صوتی غیرفعال شود" #: thonny/plugins/general_config_page.py:86 msgid "Font scaling mode" msgstr "مقیاس اندازه فونت" #: thonny/plugins/heap.py:37 msgid "Heap mode is on.\n" "Close Heap view to turn it off." msgstr "حالت هیپ فعال است.\n" "برای بستن آن باید نمای هیپ را ببندید." #: thonny/plugins/heap.py:86 msgid "Heap" msgstr "هیپ" #: thonny/plugins/general_config_page.py:53 msgid "Language" msgstr "زبان" #: thonny/plugins/notes.py:35 msgid "This box is meant for your working notes -- assignment instructions, code snippets, whatever.\n" "\n" "Everything will be saved automatically and loaded when you open Thonny next time.\n" "\n" "Feel free to delete this text to make room for your own notes." msgstr "این قسمت برای یادداشت‌های کاری شما، مقداردهی‌ها ، قطعه کد و یا هر یادداشت دلخواه دیگری است.\n" "\n" "هر چیزی در آن به صورت خودکار ذخیره خواهد شد و در اجرای بعدی تانی نمایش داده می‌شود.\n" "\n" "می‌توانید همین متن را برای داشتن فضای بیشتر، پاک کنید." #: thonny/plugins/notes.py:63 msgid "Notes" msgstr "یادداشت‌ها" #: thonny/plugins/object_inspector.py:111 msgid "Previous object" msgstr "شیء قبلی" #: thonny/plugins/object_inspector.py:114 msgid "Next object" msgstr "شیء بعدی" #: thonny/plugins/object_inspector.py:704 msgid "Object inspector" msgstr "بازرس اشیاء" #: thonny/plugins/outline.py:138 msgid "Outline" msgstr "طرح کلی" #: thonny/plugins/pgzero_frontend.py:27 msgid "Pygame Zero mode" msgstr "حالت Pygame Zero" #: thonny/plugins/pip_gui.py:78 msgid "Find package from PyPI" msgstr "یافتن بسته از PyPI" #: thonny/plugins/pip_gui.py:76 msgid "Uninstall" msgstr "حذف برنامه" #: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448 #: thonny/ui_utils.py:1755 thonny/workdlg.py:155 msgid "Close" msgstr "بستن" #: thonny/plugins/pip_gui.py:347 msgid "Click " msgstr "کلیک" #: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382 msgid "here" msgstr "اینجا" #: thonny/plugins/pip_gui.py:73 msgid "Upgrade" msgstr "به روز رسانی" #: thonny/plugins/esp/__init__.py:365 #: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70 msgid "Install" msgstr "نصب برنامه" #: thonny/plugins/pip_gui.py:491 msgid "Could not find the package from PyPI." msgstr "بسته مورد نظر در PyPI پیدا نشد." #: thonny/plugins/pip_gui.py:511 msgid "Latest stable version" msgstr "آخرین نسخه پایدار" #: thonny/plugins/pip_gui.py:513 msgid "Latest version" msgstr "آخرین نسخه" #: thonny/plugins/pip_gui.py:514 msgid "Summary" msgstr "خلاصه" #: thonny/plugins/pip_gui.py:515 msgid "Author" msgstr "سازنده" #: thonny/plugins/pip_gui.py:516 msgid "Homepage" msgstr "صفحه اصلی سایت" #: thonny/plugins/pip_gui.py:518 msgid "Bugtracker" msgstr "خطایاب" #: thonny/plugins/pip_gui.py:520 msgid "Documentation" msgstr "مستندات" #: thonny/plugins/pip_gui.py:522 msgid "PyPI page" msgstr "صفحه PyPI" #: thonny/plugins/pip_gui.py:526 msgid "Requires" msgstr "الزامات" #: thonny/plugins/pip_gui.py:652 msgid "Really uninstall?" msgstr "واقعا برنامه را حذف می‌کنید؟" #: thonny/plugins/pip_gui.py:657 msgid "Are you sure you want to uninstall it?" msgstr "آیا از اینکه می‌خواهید آن برنامه را حذف کنید، مطمئن هستید؟" #: thonny/plugins/variables.py:19 msgid "Back to\n" "current frame" msgstr "بازگشت به فریم فعلی" #: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75 #: thonny/plugins/variables.py:138 msgid "Variables" msgstr "متغیرها" #: thonny/base_file_browser.py:1313 msgid "This computer" msgstr "این کامپیوتر" #: thonny/base_file_browser.py:618 msgid "Refresh" msgstr "تازه سازی" #: thonny/base_file_browser.py:631 msgid "Focus into" msgstr "برو به" #: thonny/base_file_browser.py:1164 msgid "Error" msgstr "خطا" #: thonny/base_file_browser.py:1164 msgid "You need to select a file!" msgstr "باید فایلی را انتخاب کنید!" #: thonny/base_file_browser.py:1168 msgid "Overwrite?" msgstr "جایگزین شود؟" #: thonny/base_file_browser.py:1168 msgid "Do you want to overwrite '%s' ?" msgstr "آیا می‌خواهید بر روی «%s» جایگزین شود؟" #: thonny/editors.py:552 thonny/editors.py:554 msgid "New" msgstr "جدید" #: thonny/editors.py:565 msgid "Open..." msgstr "باز کردن..." #: thonny/editors.py:567 msgid "Load" msgstr "بارگذاری" #: thonny/editors.py:576 msgid "Recent files" msgstr "آخرین فایل‌ها" #: thonny/editors.py:598 thonny/ui_utils.py:450 msgid "Close all" msgstr "بستن همه" #: thonny/editors.py:608 thonny/editors.py:610 msgid "Save" msgstr "ذخیره" #: thonny/editors.py:633 msgid "Save as..." msgstr "ذخیره با نام..." #: thonny/editors.py:644 msgid "Save copy..." msgstr "ذخیره یک کپی .." #: thonny/editors.py:653 msgid "Rename..." msgstr "تغییر نام..." #: thonny/config_ui.py:19 msgid "Thonny options" msgstr "تنظیمات تانی" #: thonny/running.py:121 msgid "Run current script" msgstr "اجرای این اسکریپت" #: thonny/running.py:152 msgid "Run current script in terminal" msgstr "اجرای این اسکریپت در ترمینال" #: thonny/running.py:165 msgid "Stop/Restart backend" msgstr "توقف/ اجرای دوباره هسته" #: thonny/running.py:166 msgid "Stop" msgstr "توقف" #: thonny/running.py:177 msgid "Interrupt execution" msgstr "قطع اجرا" #: thonny/running.py:190 msgid "Send EOF / Soft reboot" msgstr "ارسال EOF/ ریبوت نرم" #: thonny/running.py:201 msgid "Disconnect" msgstr "قطع اتصال" #: thonny/running_config_page.py:23 msgid "Known interpreters" msgstr "مفسرهای مشهور" #: thonny/running_config_page.py:36 msgid "Your interpreter isn't in the list?" msgstr "مفسر شما در لیست نیست؟" #: thonny/plugins/cpython/__init__.py:391 msgid "NB! Thonny only supports Python 3.5 and later" msgstr "توجه مهم! تانی فقط از پایتون 3.5 به بعد پشتیبانی می‌کند" #: thonny/running_config_page.py:56 msgid "Create new virtual environment" msgstr "ایجاد محیط مجازی جدید" #: thonny/running_config_page.py:59 msgid "Select existing or create a new empty directory" msgstr "پوشه‌ای را انتخاب کنید و یا یک پوشه خالی بسازید" #: thonny/plugins/cpython/__init__.py:419 msgid "Python interpreters" msgstr "مفسرهای پایتون" #: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696 #: thonny/plugins/pip_gui.py:709 msgid "all files" msgstr "همه فایل‌ها" #: thonny/plugins/cpython/__init__.py:442 msgid "Select empty directory for new virtual environment" msgstr "برای محیط مجازی جدید بایستی پوشه‌ای خالی را انتخاب کنید" #: thonny/plugins/cpython/__init__.py:449 msgid "Bad directory" msgstr "پوشه نامناسب" #: thonny/plugins/cpython/__init__.py:450 msgid "Selected directory is not empty.\n" "Select another or cancel." msgstr "پوشه انتخاب شده خالی نیست.\n" "یکی دیگر را انتخاب کنید و یا لغو کنید." #: thonny/plugins/cpython/__init__.py:467 msgid "Creating virtual environment" msgstr "ساخت یک محیط مجازی" #: thonny/shell.py:83 msgid "Clear shell" msgstr "پاک کردن شِل" #: thonny/shell.py:138 msgid "Plotter" msgstr "نمودار" #: thonny/shell.py:269 msgid "Clear" msgstr "پاک کن" #: thonny/shell.py:282 msgid "Show Plotter" msgstr "نمایش نمودار" #: thonny/shell.py:1572 msgid "For performance reasons, Shell avoids showing very long lines in full (see Tools => Options => Shell).\n" "Here you can interact with the original text fragment." msgstr "برای بهبود کارآیی، شِل از نمایش خطوط بلند به صورت کامل خودداری می‌کند \n" "(به ابزارها ← تنظیمات ← شِل بروید).\n" "از اینجا می توانید با قسمتی از متن اصلی کار کنید." #: thonny/shell.py:1583 msgid "Wrap text (may be slow)" msgstr "شکستن خطوط (ممکن است کمی کند باشد)" #: thonny/ui_utils.py:1750 msgid "Copy to clipboard" msgstr "کپی در حافظه موقت" #: thonny/shell.py:1431 msgid "Expand in Shell" msgstr "بسط دادن در شِل" #: thonny/shell.py:1625 msgid "Squeezed text (%d characters)" msgstr "متن فشرده شده (شامل %d کاراکتر)" #: thonny/shell.py:1794 msgid "Plotter visualizes series of\n" "numbers printed to the Shell." msgstr "نموداری به صورت گرافیکی اعدادی که در شِل چاپ می‌شوند را نمایش می‌دهد." #: thonny/shell.py:1796 msgid "See Help for details." msgstr "برای جزئیات، راهنما را ببینید." #: thonny/ui_utils.py:449 msgid "Close others" msgstr "بستن بقیه" #: thonny/ui_utils.py:1606 msgid "Copying" msgstr "درحال کپی" #: thonny/ui_utils.py:1609 msgid "Copying\n" " %s\n" "to\n" " %s" msgstr "کپی\n" " %s\n" "در\n" " %s" #: thonny/base_file_browser.py:1133 thonny/config_ui.py:36 thonny/export.py:28 #: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1146 #: thonny/ui_utils.py:114 thonny/ui_utils.py:1617 thonny/ui_utils.py:1702 #: thonny/workdlg.py:157 thonny/workdlg.py:201 msgid "Cancel" msgstr "لغو" #: thonny/base_file_browser.py:1130 thonny/config_ui.py:35 thonny/export.py:25 #: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268 #: thonny/ui_utils.py:111 thonny/ui_utils.py:1699 thonny/workdlg.py:198 msgid "OK" msgstr "تایید" #: thonny/ui_utils.py:1783 msgid "Cancel the process?" msgstr "این پردازش لغو شود؟" #: thonny/ui_utils.py:1784 msgid "The process is still running.\n" "Are you sure you want to cancel?" msgstr "پردازش هنوز در حال اجراست.\n" "آیا از لغو آن اطمینان دارید؟" #: thonny/ui_utils.py:2182 msgid "Select All" msgstr "انتخاب همه" #: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158 msgid "Shell" msgstr "شِل" #: thonny/plugins/cpython/__init__.py:602 msgid "The same interpreter which runs Thonny (default)" msgstr "همان مفسری که تانی را اجرا می کند (پیش فرض)" #: thonny/plugins/cpython/__init__.py:350 msgid "This virtual environment is automatically maintained by Thonny.\n" "" msgstr "این محیط مجازی به طور خودکار توسط تانی نگهداری می شود." #: thonny/plugins/cpython/__init__.py:351 msgid "Location: " msgstr "محل:" #: thonny/workbench.py:592 msgid "Options..." msgstr "تنظیمات..." #: thonny/workbench.py:599 msgid "Increase font size" msgstr "فونت درشت‌تر شود" #: thonny/workbench.py:664 msgid "Change font size" msgstr "تغییر اندازه فونت" #: thonny/workbench.py:665 msgid "Zoom" msgstr "بزرگنمایی" #: thonny/workbench.py:674 msgid "Exit Thonny" msgstr "خروج از Thonny" #: thonny/workbench.py:677 msgid "Quit" msgstr "خروج" #: thonny/workbench.py:1181 thonny/workbench.py:1189 msgid "Overwriting theme '%s'" msgstr "در حال بازنویسی قالب «%s»" #: thonny/workbench.py:1348 msgid "Program arguments:" msgstr "ورودی‌های برنامه:" #: thonny/workbench.py:1402 msgid "Regular mode" msgstr "حالت عادی" #: thonny/workbench.py:1403 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n" "\n" "(See 'Tools → Options → General' if you change your mind later.)" msgstr "تنظیمات بروز رسانی شد. برای شروع کار در محیط عادی، تانی را مجدد اجرا کنید.\n" "\n" "(اگر نظرتان عوض شد، از «ابزارها ← تنظیمات ← عمومی» را انتخاب کنید)" #: thonny/plugins/ast_view.py:210 msgid "Program tree" msgstr "درخت برنامه" #: thonny/plugins/backend_config_page.py:323 msgid "Select interpreter" msgstr "انتخاب مفسر" #: thonny/plugins/debugger.py:1280 msgid "Resume" msgstr "ادامه" #: thonny/plugins/debugger.py:1296 msgid "Run / resume" msgstr "اجرا / ادامه" #: thonny/plugins/debugger.py:1311 msgid "Debug current script" msgstr "خطایابی این اسکریپت" #: thonny/plugins/debugger.py:1313 msgid "Debug" msgstr "خطایابی" #: thonny/plugins/debugger.py:1324 msgid "Debug current script (nicer)" msgstr "خطایابی همین اسکریپت (مبتدی)" #: thonny/plugins/debugger.py:1336 msgid "Debug current script (faster)" msgstr "خطایابی همین اسکریپت (سریع)" #: thonny/plugins/debugger.py:1347 msgid "Step over" msgstr "گام بعدی" #: thonny/plugins/debugger.py:1349 msgid "Over" msgstr "بعدی" #: thonny/plugins/debugger.py:1360 msgid "Step into" msgstr "گامی به داخل" #: thonny/plugins/debugger.py:1362 msgid "Into" msgstr "داخل" #: thonny/plugins/debugger.py:1373 msgid "Step out" msgstr "گامی به خارج" #: thonny/plugins/debugger.py:1375 msgid "Out" msgstr "بیرون" #: thonny/plugins/debugger.py:1410 msgid "Step back" msgstr "گامی به عقب" #: thonny/plugins/debugger.py:1412 msgid "Back" msgstr "عقب" #: thonny/plugins/debugger.py:1418 msgid "Stack" msgstr "اِستک" #: thonny/plugins/debugger.py:1419 msgid "Exception" msgstr "استثناء" #: thonny/plugins/general_config_page.py:18 msgid "Log program usage events" msgstr "ثبت رویداد‌های استفاده از برنامه" #: thonny/plugins/general_config_page.py:43 msgid "Debug mode (provides more detailed diagnostic logs)" msgstr "حالت خطایابی (ثبت خطایابی‌ها با جزئیات بیشتر)" #: thonny/plugins/general_config_page.py:67 msgid "UI mode" msgstr "حالت ظاهری برنامه" #: thonny/plugins/general_config_page.py:80 msgid "UI scaling factor" msgstr "ضریب اندازه ظاهر برنامه" #: thonny/plugins/general_config_page.py:108 msgid "NB! Restart Thonny after changing these options!" msgstr "توجه مهم! بعد از تغییر این گزینه‌ها باید تانی را دوباره باز کنید!" #: thonny/plugins/general_config_page.py:129 msgid "General" msgstr "عمومی" #: thonny/plugins/pip_gui.py:129 msgid "INSTALL" msgstr "نصب برنامه" #: thonny/plugins/pip_gui.py:365 msgid "Browse the packages" msgstr "مرور بسته‌ها" #: thonny/plugins/pip_gui.py:368 msgid "With current interpreter you can only browse the packages here.\n" "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling." msgstr "با مفسر فعلی فقط می توانید بسته‌ها را در اینجا ببینید.\n" "برای نصب، ارتقاء و یا حذف به «ابزارها ← باز کردن شِل سیستم» بروید." #: thonny/plugins/pip_gui.py:376 msgid "Packages' directory" msgstr "پوشه‌ی بسته‌ها" #: thonny/plugins/pip_gui.py:333 msgid "Install from PyPI" msgstr "نصب برنامه از PyPI" #: thonny/plugins/pip_gui.py:336 msgid "If you don't know where to get the package from, then most likely you'll want to search the Python Package Index. Start by entering the name of the package in the search box above and pressing ENTER." msgstr "اگر نمی دانید بسته را باید از کجا بگیرید، به احتمال زیاد بخواهید تا فهرست بسته‌های پایتون را جستجو کنید. ابتدا نام بسته را در قسمت جستجو وارد کنید و سپس کلید Enter را بزنید." #: thonny/plugins/pip_gui.py:352 msgid "to locate requirements.txt file and install the packages specified in it." msgstr "برای مشخص کردن محل فایل requirements.txt و نصب بسته‌های مشخص شده در آن." #: thonny/plugins/pip_gui.py:381 msgid "Click" msgstr "کلیک" #: thonny/plugins/pip_gui.py:386 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)." msgstr "برای مشخص کردن و نصب بسته از فایل (معمولا با پسوندهای whl. یا tar.gz و یا zip.)" #: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393 msgid "Upgrade or uninstall" msgstr "ارتقاء یا حذف برنامه" #: thonny/plugins/pip_gui.py:395 msgid "Start by selecting the package from the left." msgstr "با انتخاب بسته‌ای از سمت چپ شروع کنید." #: thonny/plugins/pip_gui.py:399 msgid "Target:" msgstr "مقصد:" #: thonny/plugins/pip_gui.py:401 msgid "virtual environment" msgstr "محیط مجازی" #: thonny/plugins/pip_gui.py:403 msgid "user site packages" msgstr "بسته‌های سایت کاربر" #: thonny/plugins/pip_gui.py:407 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from" msgstr "این پنجره تمام بسته های موجود را لیست می کند، اما فقط اجازه می‌دهد تا ارتقا و حذف بسته از مسیر زیر انجام شود" #: thonny/plugins/pip_gui.py:417 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means." msgstr "بسته‌های جدید در این پوشه نصب خواهند شد. مسیرهای دیگر باید با سایر روش‌ها مدیریت شود." #: thonny/plugins/pip_gui.py:441 msgid "Installed version:" msgstr "نسخه نصب شده:" #: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443 msgid "Installed to:" msgstr "نصب در:" #: thonny/plugins/pip_gui.py:494 msgid "Please check your spelling!" msgstr "لطفا غلط املائی را بررسی کنید!" #: thonny/plugins/pip_gui.py:512 msgid "You need to enter" msgstr "باید وارد شوید" #: thonny/plugins/pip_gui.py:498 msgid "Could not find the package info from PyPI." msgstr "این بسته در PyPI یافت نشد." #: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200 msgid "Error code:" msgstr "کد خطا:" #: thonny/plugins/pip_gui.py:601 msgid "Can't find package name from the list:" msgstr "بسته در فهرست زیر یافت نشد:" #: thonny/plugins/pip_gui.py:653 msgid "Package '{}' is required for installing and uninstalling other packages." msgstr "بسته «{}» برای نصب و یا حذف سایر بسته‌ها مورد نیاز است." #: thonny/plugins/pip_gui.py:696 msgid "Package" msgstr "بسته" #: thonny/plugins/pip_gui.py:796 msgid "Manage packages for %s" msgstr "مدیریت بسته‌های %s" #: thonny/plugins/pip_gui.py:872 msgid "Confirmation" msgstr "تایید" #: thonny/plugins/pip_gui.py:873 msgid "Looks like you are installing a Thonny-related package.\n" "If you meant to install a Thonny plugin, then you should\n" "choose 'Tools → Manage plugins...' instead\n" "\n" "Are you sure you want to install %s for the back-end?" msgstr "به نظر می رسد شما در حال نصب یکی از بسته‌های تانی هستنید.\n" "اگر قصد نصب پلاگینی برای تانی را دارید باید از «ابزارهای ← مدیریت افزونه‌ها...» اقدام کنید.\n" "\n" "آیا از نصب %s برای هسته کاملا مطمئن هستید؟" #: thonny/plugins/pip_gui.py:981 msgid "NB! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install." msgstr "توجه مهم! ممکن است نسخه دیگری موجود باشد که با نسخه فعلی تانی سازگار باشد. برای انتخاب نسخه مورد نظرتان برای نصب، بر روی دکمه «...» کلیک کنید." #: thonny/plugins/pip_gui.py:989 msgid "Thonny plugin without requirements" msgstr "افزودنی‌های تانی بدون پیش‌نیاز" #: thonny/plugins/pip_gui.py:990 msgid "Looks like you are trying to install an outdated Thonny\n" "plug-in (it doesn't specify required Thonny version).\n" "\n" "If you still want it, then please install it from the command line." msgstr "به نظر می رسد که شما در حال نصب یک افزونه قدیمی تانی هستید (نسخه مورد نیاز تانی را مشخص نمی کند).\n" "\n" "اگر واقعا آن را می خواهید ، لطفاً توسط خط فرمان آن را نصب کنید." #: thonny/plugins/pip_gui.py:1004 msgid "Unsuitable requirements" msgstr "پیش‌نیازهای نامناسب" #: thonny/plugins/pip_gui.py:1005 msgid "This package requires different Thonny version:" msgstr "این بسته به نسخه دیگری از تانی نیاز دارد:" #: thonny/plugins/pip_gui.py:1009 msgid "If you still want it, then please install it from the command line." msgstr "اگر کماکان آن را می‌خواهید ، لطفاً آن را از خط فرمان نصب کنید." #: thonny/plugins/pip_gui.py:1052 msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)" msgstr "در این حالت هسته تانی از مفسر یکسانی استفاده می کند، بنابراین هر دو پنجره بسته‌های یکسانی را مدیریت می کنند.)" #: thonny/plugins/pip_gui.py:1058 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in." msgstr "توجه مهم! بعد از نصب / ارتقاء / حذف افزونه‌ای، باید تانی را دوباره باز کنید." #: thonny/plugins/pip_gui.py:1068 msgid "Thonny plug-ins" msgstr "افزودنی‌های تانی" #: thonny/plugins/pip_gui.py:1090 msgid "Advanced install / upgrade / downgrade" msgstr "نصب، ارتقاء یا نصب نسخه‌ قدیمی پیشرفته" #: thonny/plugins/pip_gui.py:1099 msgid "Desired version" msgstr "نسخه دلخواه" #: thonny/plugins/pip_gui.py:1137 msgid "Upgrade dependencies" msgstr "به‌روزرسانی پیش‌نیازها" #: thonny/plugins/pip_gui.py:1198 msgid "Requires:" msgstr "مورد نیاز:" #: thonny/plugins/pip_gui.py:1202 msgid "Error:" msgstr "خطا:" #: thonny/plugins/pip_gui.py:1409 msgid "Manage packages..." msgstr "مدیریت بسته‌ها..." #: thonny/plugins/pip_gui.py:1415 msgid "Manage plug-ins..." msgstr "مدیریت افزودنی‌ها..." #: thonny/plugins/replayer.py:365 msgid "Open replayer..." msgstr "باز کردن «بازپخش کننده»" #: thonny/plugins/run_debug_config_page.py:14 msgid "Change working directory to script directory on Run / Debug" msgstr "پوشه فعلی را به پوشه اسکریپت در اجرا / خطایابی تغییر دهید" #: thonny/plugins/run_debug_config_page.py:22 msgid "Show function calls (frames) in separate windows" msgstr "فراخوانی توابع را در پنجره‌های جداگانه (فریم‌ها) نمایش بده" #: thonny/plugins/run_debug_config_page.py:23 msgid "Uncheck if you want more traditional experience." msgstr "اگر می خواهید تجربه سنتی‌تری داشته باشید، غیر فعالش کنید." #: thonny/plugins/run_debug_config_page.py:29 msgid "Open and close Stack view automatically" msgstr "باز و بسته شدن خودکار نمای اِستک" #: thonny/plugins/run_debug_config_page.py:30 msgid "Opens the Stack view on first call and closes it when program returns to main frame." msgstr "نمای اِستک را در اولین فراخوانی نمایش داده و بعد از بازگشت\n" "برنامه به فریم اصلی آن را خواهد بست." #: thonny/plugins/run_debug_config_page.py:39 msgid "Allow stepping into libraries (ie. outside of main script directory)" msgstr "اجازه قدم گذاشتن به داخل کتابخانه‌ها (مانند مواقعی که خارج از پوشه اسکریپت هستید)" #: thonny/plugins/run_debug_config_page.py:40 msgid "May make debugging slower." msgstr "ممکن است خطایابی را کندتر کند." #: thonny/plugins/run_debug_config_page.py:45 msgid "Preferred debugger" msgstr "خطایاب انتخابی" #: thonny/plugins/run_debug_config_page.py:57 msgid "(used when clicking Debug toolbar button)" msgstr "(هنگام کلیک کردن روی دکمه خطایابی استفاده می شود)" #: thonny/plugins/run_debug_config_page.py:62 msgid "Birdseye port" msgstr "پورت Birdseye" #: thonny/plugins/run_debug_config_page.py:66 msgid "(restart Thonny after changing this)" msgstr "(بعد از تغییر این گزینه باید مجدد تانی را اجرا کنید)" #: thonny/plugins/run_debug_config_page.py:74 msgid "Run & Debug" msgstr "اجرا و خطایابی" #: thonny/plugins/shell_config_page.py:17 msgid "Terminal emulation" msgstr "شبیه‌ ساز ترمینال" #: thonny/plugins/shell_config_page.py:19 msgid "supports basic ANSI-colors and styles" msgstr "پشتیبانی از استایل‌ها و رنگ‌های ANSI ساده" #: thonny/plugins/shell_config_page.py:31 msgid "Maximum number of lines to keep." msgstr "نگهداری حداکثر تعداد سطر ممکن." #: thonny/plugins/shell_config_page.py:33 msgid "NB! Large values may cause poor performance!" msgstr "توجه مهم! مقادیر بزرگ ممکن است باعث کاهش کارآیی شوند!" #: thonny/plugins/shell_config_page.py:49 msgid "Maximum length of line fragments before squeezing" msgstr "حداکثر طول یک قطعه از خط قبل از فشرده شدن" #: thonny/plugins/terminal_config_page.py:12 msgid "Running current script in terminal" msgstr "اجرای این اسکریپ در شِل" #: thonny/plugins/terminal_config_page.py:17 msgid "Present Python REPL after program ends" msgstr "نمایش Python REPL بعد از اتمام برنامه" #: thonny/plugins/terminal_config_page.py:24 msgid "Keep terminal window open after Python process ends" msgstr "پنجره ترمینال را بعد از اتمام پردازش پایتون باز نگه دار" #: thonny/plugins/terminal_config_page.py:31 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n" "(Profiles → Shell → When the shell exits)" msgstr "توجه مهم! بستن خودکار نیاز به فعال سازی تنظیمات ترمینال دارد\n" "(پروفایل ← شِل ← هنگام خروج از شِل)" #: thonny/plugins/terminal_config_page.py:41 msgid "Terminal" msgstr "ترمینال" #: thonny/plugins/theme_and_font_config_page.py:40 msgid "UI theme" msgstr "قالب محیط نرم افزار" #: thonny/plugins/theme_and_font_config_page.py:53 msgid "Syntax theme" msgstr "قالب نوشتار" #: thonny/plugins/theme_and_font_config_page.py:85 msgid "Editor font" msgstr "فونت ویرایشگر" #: thonny/plugins/theme_and_font_config_page.py:108 msgid "IO font" msgstr "فونت IO" #: thonny/plugins/theme_and_font_config_page.py:133 msgid "Preview" msgstr "پیش‌نمایش" #: thonny/plugins/theme_and_font_config_page.py:145 msgid "This is a comment" msgstr "این یک توضیح است" #: thonny/plugins/theme_and_font_config_page.py:148 msgid "The answer is" msgstr "پاسخ" #: thonny/plugins/theme_and_font_config_page.py:152 msgid "unclosed_string" msgstr "انتهای متن بسته نیست" #: thonny/plugins/theme_and_font_config_page.py:154 msgid "blah, blah" msgstr "و غیره" #: thonny/plugins/theme_and_font_config_page.py:177 msgid "NB! Some style elements change only after restarting Thonny!" msgstr "توجه مهم! برخی از تغییرات ظاهری موارد نیاز به اجرای دوباره تانی دارد!" #: thonny/plugins/theme_and_font_config_page.py:216 msgid "Enter an integer" msgstr "عددی صحیح را وارد کنید" #: thonny/plugins/theme_and_font_config_page.py:229 msgid "Theme & Font" msgstr "قالب و فونت" #: thonny/plugins/thonny_folders.py:19 msgid "Open Thonny program folder..." msgstr "نمایش فولدر برنامه تانی" #: thonny/plugins/thonny_folders.py:24 msgid "Open Thonny data folder..." msgstr "نمایش فولدر داده‌های تانی" #: thonny/plugins/help/__init__.py:64 msgid "Home" msgstr "خانه" #: thonny/plugins/help/__init__.py:75 msgid "Help contents" msgstr "محتوای راهنما" #: thonny/plugins/micropython/__init__.py:274 msgid "CircuitPython device" msgstr "دستگاه CircuitPython" #: thonny/plugins/micropython/__init__.py:278 msgid "MicroPython device" msgstr "دستگاه MicroPython" #: thonny/plugins/micropython/__init__.py:476 msgid "Connect your device to the computer and select corresponding port below" msgstr "دستگاه خود را به رایانه متصل کرده و پورت مربوط را از زیر انتخاب کنید" #: thonny/plugins/micropython/__init__.py:479 msgid "look for your device name, \"USB Serial\" or \"UART\"" msgstr "نام دستگاه خود، «USB Serial» یا «UART» را مشخص کنید" #: thonny/plugins/micropython/__init__.py:481 msgid "If you can't find it, you may need to install proper USB driver first." msgstr "اگر آن را پیدا نکردید،احتمالا لازم است که ابتدا درایور USB مناسب را نصب کنید." #: thonny/plugins/micropython/__init__.py:401 msgid "Port" msgstr "پورت" #: thonny/plugins/micropython/__init__.py:411 msgid "Try to detect port automatically" msgstr "شروع تشخیص خودکار پورت" #: thonny/plugins/micropython/__init__.py:954 msgid "MicroPython (generic)" msgstr "MicroPython (عمومی)" #: thonny/plugins/printing/__init__.py:82 msgid "Print..." msgstr "چاپ..." #: thonny/plugins/system_shell/__init__.py:59 msgid "Open system shell..." msgstr "بازکردن شِل سیستم" #: thonny/plugins/backend_config_page.py:103 msgid "Details" msgstr "جزئیات" #: thonny/plugins/pip_gui.py:345 msgid "Install from requirements file" msgstr "نصب از فایل‌های مورد نیاز" #: thonny/plugins/pip_gui.py:380 msgid "Install from local file" msgstr "نصب با فایل‌های موجود" #: thonny/plugins/pip_gui.py:1038 msgid "This dialog is for managing Thonny plug-ins and their dependencies.\n" "If you want to install packages for your own programs then choose 'Tools → Manage packages...'" msgstr "این پنجره برای مدیریت افزونه‌های تانی و وابستگی‌های آنها است.\n" "اگر می‌خواهید که یک بسته را برای برنامه‌تان نصب کنید\n" " باید اینکار را «ابزارها ← مدیریت بسته‌ها» انجام دهید." #: thonny/plugins/circuitpython/__init__.py:163 msgid "CircuitPython (generic)" msgstr "CircuitPython (عمومی)" #: thonny/plugins/commenting_indenting.py:143 msgid "Indent selected lines" msgstr "تورفتگی خطوط انتخابی" #: thonny/plugins/commenting_indenting.py:153 msgid "Dedent selected lines" msgstr "حذف تورفتگی خطوط انتخابی" #: thonny/workbench.py:1391 msgid "Switch to\n" "regular\n" "mode" msgstr "برگشت\n" " به حالت\n" "عادی" #: thonny/plugins/microbit/__init__.py:55 msgid "Make sure MicroPython has been installed to your micro:bit." msgstr "مطمئن شوید که MicroPython بر روی micro:bit شما نصب است..." #: thonny/plugins/microbit/__init__.py:57 msgid "Don't forget that main.py only works without embedded main script." msgstr "دقت کنید که main.py در صورتی کار می‌کند که بدون اسکریپ main باشد." #: thonny/plugins/micropython/uf2dialog.py:45 msgid "please wait" msgstr "اندکی صبر..." #: thonny/plugins/microbit/__init__.py:199 msgid "Done!" msgstr "انجام شد!" #: thonny/plugins/micropython/__init__.py:298 msgid "Firmware" msgstr "سفت‌افزار" #: thonny/misc_utils.py:134 msgid "Could not find disk '%s'. Do you want to locate it yourself?" msgstr "دیسک %s پیدا نشد. آیا مایلید که محل آن را خودتان مشخص کنید؟" #: thonny/misc_utils.py:137 msgid "Found several '%s' disks. Do you want to choose one yourself?" msgstr "چندین دیسک %s پیدا شد. آیا مایلید که خودتان یکی از آنها را انتخاب کنید؟" #: thonny/misc_utils.py:153 msgid "Can't find suitable disk" msgstr "دیسک مناسب یافت نشد" #: thonny/base_file_browser.py:273 msgid "%d items" msgstr "تعداد %d مورد" #: thonny/base_file_browser.py:692 msgid "Move to Recycle Bin" msgstr "انتقال به سطل بازیافت" #: thonny/base_file_browser.py:694 msgid "Move to Trash" msgstr "انتقال به سطل زباله" #: thonny/base_file_browser.py:697 msgid "Delete" msgstr "حذف" #: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834 msgid "New directory" msgstr "پوشه جدید" #: thonny/base_file_browser.py:703 msgid "Properties" msgstr "ویژگی‌ها" #: thonny/base_file_browser.py:705 msgid "Storage space" msgstr "فضای ذخیره" #: thonny/base_file_browser.py:715 msgid "Path" msgstr "مسیر" #: thonny/base_file_browser.py:717 msgid "Directory properties" msgstr "مشخصات پوشه" #: thonny/base_file_browser.py:719 msgid "File properties" msgstr "مشخصات فایل" #: thonny/base_file_browser.py:721 msgid "bytes" msgstr "بایت‌ها" #: thonny/base_file_browser.py:724 msgid "Size" msgstr "اندازه" #: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735 msgid "Modified" msgstr "ویرایش شده" #: thonny/base_file_browser.py:794 msgid "Deleting %s" msgstr "حذف %s" #: thonny/base_file_browser.py:817 msgid "Moving %s to %s" msgstr "انتقال %s به %s" #: thonny/editors.py:219 msgid "Loading" msgstr "در حال بازگذاری" #: thonny/editors.py:335 msgid "Saving" msgstr "در حال ذخیره" #: thonny/running.py:1408 msgid "Working..." msgstr "درحال کار کردن..." #: thonny/plugins/files.py:199 msgid "Uploading %s to %s" msgstr "بارگذاری %s در %s" #: thonny/plugins/files.py:216 msgid "Upload to %s" msgstr "آپلود به %s" #: thonny/plugins/files.py:362 msgid "Downloading %s to %s" msgstr "درحال دانلود %s در %s" #: thonny/plugins/files.py:275 msgid "Download to %s" msgstr "دانلود در %s" #: thonny/base_file_browser.py:620 msgid "Open in system file manager" msgstr "بازکردن در برنامه مدیریت فایل سیستم" #: thonny/base_file_browser.py:625 msgid "Hide hidden files" msgstr "عدم نمایش فایل‌های مخفی" #: thonny/base_file_browser.py:625 msgid "Show hidden files" msgstr "نمایش فایل‌های مخفی" #: thonny/base_file_browser.py:635 msgid "Open in Thonny" msgstr "بازکردن در تانی" #: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661 msgid "Open in system default app" msgstr "بازکردن با نرم افزار پیش‌فرض سیستم" #: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669 msgid "Configure %s files" msgstr "%s فایل تنظیم شد" #: thonny/base_file_browser.py:670 msgid "What to do with a %s file when you double-click it in Thonny's file browser?" msgstr "وقتی که فایل %s را در مرورگر فایل تانی دوبار کلیک شد، چه شود؟" #: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77 msgid "Deleting" msgstr "در حال حذف" #: thonny/base_file_browser.py:1049 msgid "Creating directory" msgstr "ساخت پوشه" #: thonny/editors.py:217 msgid "Loading %s" msgstr "در حال بارگذاری %s" #: thonny/editors.py:333 msgid "Saving to %s" msgstr "در حال ذخیره %s" #: thonny/editors.py:622 thonny/editors.py:624 msgid "Save All files" msgstr "ذخیره تمامی فایل‌ها" #: thonny/workbench.py:828 msgid "Configure interpreter..." msgstr "پیکره‌بندی مفسر..." #: thonny/workbench.py:1501 msgid "Device" msgstr "دستگاه" #: thonny/workdlg.py:185 msgid "Cancelling" msgstr "درحال لغو" #: thonny/workdlg.py:212 msgid "Starting" msgstr "درحال شروع" #: thonny/plugins/backend_config_page.py:234 msgid "Authentication" msgstr "احراز هویت" #: thonny/plugins/backend_config_page.py:236 msgid "Enter the passphrase of your private key for\n" "{}" msgstr "برای {} عبارت کلید خصوصی خود را وارد کنید" #: thonny/plugins/backend_config_page.py:239 msgid "Enter your password for\n" "{}" msgstr "برای {} گذرواژه خود را وارد کنید" #: thonny/plugins/object_inspector.py:458 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s" msgstr "مقدار نمایش داده شده در بالا، مقدار تقریبی این عدد اعشاری است. مقدار دقیق ذخیره شده در %s تقریبا %s است." #: thonny/plugins/pip_gui.py:557 msgid "Search results" msgstr "نتایج جستجو" #: thonny/plugins/pip_gui.py:558 msgid "Searching" msgstr "در حال جستجو" #: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729 msgid "Installing '%s'" msgstr "در حال نصب «%s»" #: thonny/plugins/pip_gui.py:645 msgid "Upgrading '%s'" msgstr "در حال ارتقای «%s»" #: thonny/plugins/pip_gui.py:650 msgid "Uninstalling '%s'" msgstr "در حال حذف «%s»" #: thonny/plugins/pip_gui.py:663 msgid "Installing" msgstr "در حال نصب" #: thonny/plugins/pip_gui.py:1372 msgid "Package manager is not available for this interpreter" msgstr "مدیریت بسته برای این مفسر موجود نیست" #: thonny/plugins/pip_gui.py:1385 msgid "Not supported" msgstr "پشتیبانی نمی‌شود" #: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390 msgid "Not available" msgstr "موجود نیست" #: thonny/plugins/pip_gui.py:1391 msgid "You need to stop your program before launching the package manager." msgstr "قبل از راه‌اندازی مدیریت بسته‌ها، باید برنامه خود را متوقف کنید." #: thonny/plugins/shell_config_page.py:64 msgid "Open evaluated values in Object inspector" msgstr "نمایش مقدار محاسبه شده را در بازرس اشیاء" #: thonny/plugins/cpython/__init__.py:370 msgid "Python executable" msgstr "فایل اجرایی پایتون" #: thonny/plugins/cpython/__init__.py:393 msgid "NB! File selection button may not work properly when selecting executables\n" "from a virtual environment. In this case choose the 'activate' script instead\n" "of the interpreter (or enter the path directly to the box)!" msgstr "توجه مهم! دکمه انتخاب فایل در هنگام انتخاب فایل‌های اجرایی در محیط مجازی ممکن است به درستی کار نکند. در این صورت اسکریپت «activate» را به جای مفسر انتخاب کنید (و یا مسیر را در قسمت مسیر مستقیما وارد کنید)!" #: thonny/plugins/cpython_ssh/__init__.py:153 msgid "Remote Python 3 (SSH)" msgstr "دسترسی از راه‌ دور پایتون 3 (SSH)" #: thonny/plugins/micropython/__init__.py:284 msgid "Not connected" msgstr "وصل نیست" #: thonny/plugins/micropython/__init__.py:453 msgid "Advanced options" msgstr "تنظیمات پیشرفته" #: thonny/plugins/micropython/__init__.py:460 msgid "Install or update firmware" msgstr "نصب یا بروز رسانی سفت‌ابزار" #: thonny/plugins/micropython/__init__.py:963 msgid "MicroPython (local)" msgstr "میکروپایتون (محلی)" #: thonny/plugins/micropython/__init__.py:973 msgid "MicroPython (SSH)" msgstr "میکروپایتون (SSH)" #: thonny/plugins/micropython/pip_gui.py:134 msgid "Module" msgstr "ماژول" #: thonny/plugins/micropython/pip_gui.py:159 msgid "Shadowed items (not importable):" msgstr "موارد سایه‌دار (وارد نشده‌اند):" #: thonny/plugins/micropython/pip_gui.py:208 msgid "Package is not available at micropython.org. Version at PyPI will be installed." msgstr "این بسته در micropython.org موجود نبود. نسخه موجود در PyPI نصب خواهد شد." #: thonny/plugins/micropython/pip_gui.py:219 msgid "NB! micropython.org has published version %s of this package and this will be installed by default." msgstr "توجه مهم! micropython.org نسخه %s این بسته را منتشر کرده است و به صورت پیش فرض نصب خواهد شد." #: thonny/plugins/micropython/pip_gui.py:245 msgid "For upgrading simply install the package again." msgstr "برای به روزرسانی ساده‌تر، بسته را دوباره نصب کنید." #: thonny/plugins/micropython/pip_gui.py:248 msgid "For uninstalling delete corresponding files." msgstr "برای حذف فایلهای مربوطه را حذف کنید." #: thonny/plugins/micropython/pip_gui.py:262 msgid "Scope" msgstr "میدان دید" #: thonny/plugins/micropython/pip_gui.py:275 msgid "This dialog lists top-level modules from following directories:\n" "" msgstr "این پنجره ماژول‌های سطح بالا را از پوشه‌های زیر لیست می کند:" #: thonny/plugins/micropython/pip_gui.py:284 msgid "New packages will be installed to" msgstr "بسته‌های جدید نصب خواهند شد در" #: thonny/plugins/micropython/pip_gui.py:292 msgid "no absolute lib directory in sys.path" msgstr "بدون پوشه مشخص (مطلق) lib در sys.path" #: thonny/plugins/micropython/uf2dialog.py:40 msgid "Version to be installed" msgstr "نسخه‌ای که نصب خواهد شد" #: thonny/plugins/micropython/uf2dialog.py:48 msgid "Target device location" msgstr "محل دستگاه مقصد" #: thonny/plugins/micropython/uf2dialog.py:59 msgid "Target device model" msgstr "نوع دستگاه مقصد" #: thonny/plugins/micropython/uf2dialog.py:145 msgid "Please wait" msgstr "اندکی صبر..." #: thonny/plugins/pip_gui.py:67 msgid "Search on PyPI" msgstr "جستجو در PyPI" #: thonny/plugins/pip_gui.py:79 msgid "Delete selected" msgstr "حذف انتخاب شده‌ها" #: thonny/base_file_browser.py:662 msgid "Open in Thonny's text editor" msgstr "در ویرایشگر متنی تانی باز شود" #: thonny/base_file_browser.py:325 msgid "Storage space on this drive or filesystem" msgstr "فضای ذخیره سازی در این درایو" #: thonny/base_file_browser.py:326 msgid "total space" msgstr "فضای کل" #: thonny/base_file_browser.py:328 msgid "used space" msgstr "فضای استفاده شده" #: thonny/base_file_browser.py:329 msgid "free space" msgstr "فضای آزاد" #: thonny/base_file_browser.py:336 msgid "Storage info" msgstr "اطلاعات فضای ذخیره سازی" #: thonny/plugins/commenting_indenting.py:163 msgid "Replace tabs with spaces" msgstr "جایگزینی Tabها با فاصله" #: thonny/plugins/editor_config_page.py:28 msgid "Highlight tab characters" msgstr "نمایان کردن Tabها" #: thonny/plugins/editor_config_page.py:47 msgid "Indent with tab characters (not recommended for Python)" msgstr "ایجاد تورفتگی با Tab (در پایتون این کار توصیه نمی‌شود)" #: thonny/base_file_browser.py:81 thonny/memory.py:63 msgid "Name" msgstr "نام" #: thonny/base_file_browser.py:85 msgid "Size (bytes)" msgstr "اندازه (بایت)" #: thonny/base_file_browser.py:835 msgid "Enter name for new directory under\n" "%s" msgstr "نام پوشه جدید که در زیر مجموعه پوشه زیر ساخته خواهد شد را وارد کنید.\n" "%s" #: thonny/base_file_browser.py:858 msgid "Nothing selected" msgstr "چیزی انتخاب نشده است" #: thonny/base_file_browser.py:858 msgid "Select an item and try again!" msgstr "موردی را انتخاب کنید و دوباره امتحان کنید!" #: thonny/base_file_browser.py:1105 msgid "Open from %s" msgstr "باز کردن از %s" #: thonny/base_file_browser.py:1108 msgid "Save to %s" msgstr "ذخیره در %s" #: thonny/base_file_browser.py:1120 msgid "File name:" msgstr "نام فایل:" #: thonny/memory.py:64 thonny/plugins/object_inspector.py:510 #: thonny/plugins/object_inspector.py:589 msgid "Value ID" msgstr "شناسه مقدار" #: thonny/memory.py:65 thonny/plugins/heap.py:23 #: thonny/plugins/object_inspector.py:511 #: thonny/plugins/object_inspector.py:590 msgid "Value" msgstr "مقدار" #: thonny/plugins/backend_config_page.py:257 msgid "Save password" msgstr "ذخیره گذرواژه" #: thonny/plugins/debugger.py:553 msgid "Function call at %s" msgstr "فراخوانی تابع در %s" #: thonny/plugins/debugger.py:1001 msgid "Local variables" msgstr "متغیرهای محلی" #: thonny/plugins/debugger.py:1033 msgid "Function" msgstr "تابع" #: thonny/plugins/debugger.py:1034 msgid "Location" msgstr "محل" #: thonny/plugins/debugger.py:1110 msgid "If last command raised an exception then this view will show the stacktrace." msgstr "اگر آخرین دستور یک خطا را ایجاد کند این نما، stacktrace (ردیاب اِستک) را نمایش می‌دهد." #: thonny/plugins/heap.py:22 msgid "ID" msgstr "شناسه" #: thonny/plugins/object_inspector.py:87 msgid "Data" msgstr "داده" #: thonny/plugins/object_inspector.py:88 msgid "Attributes" msgstr "خواص" #: thonny/plugins/object_inspector.py:509 msgid "Index" msgstr "اندیس" #: thonny/plugins/object_inspector.py:587 msgid "Key ID" msgstr "شناسه کلید" #: thonny/plugins/object_inspector.py:588 msgid "Key" msgstr "کلید" #: thonny/plugins/variables.py:36 msgid "Back to\n" "%s" msgstr "برگرد به %s" #: thonny/plugins/micropython/__init__.py:401 msgid "Port or WebREPL" msgstr "پورت WebREPL" #: thonny/plugins/micropython/__init__.py:518 msgid "Password" msgstr "گذرواژه" #: thonny/plugins/debugger.py:959 msgid "Source code" msgstr "کد اصلی" #: thonny/plugins/general_config_page.py:29 msgid "Use Tk file dialogs instead of Zenity" msgstr "به جای پنجره فایل Zenity از Tk استفاده کنید" #: thonny/plugins/general_config_page.py:30 msgid "Select if the file dialogs end up behind the main window" msgstr "اگر پنجره‌ها پشت پنجره اصلی برنامه قرار می‌گیرد، این گزینه را انتخاب کنید" #: thonny/plugins/general_config_page.py:97 msgid "Environment variables (one KEY=VALUE per line)" msgstr "متغیرهای محیطی (در هر سطر یک مقدار=کلید)" thonny-3.3.14/thonny/locale/fi_FI/000077500000000000000000000000001411757431400166625ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/fi_FI/LC_MESSAGES/000077500000000000000000000000001411757431400204475ustar00rootroot00000000000000thonny-3.3.14/thonny/locale/fi_FI/LC_MESSAGES/thonny.mo000066400000000000000000000467451411757431400223430ustar00rootroot00000000000000(\ $* +->!l7    x   #/ 5 ?LG+0B<J%3%Yls !  *05: AM%^/. !- 4> COd it    0%V[6m %L.F{7#)1C Vbv{  z;8 t   1,?0l<-c l q u     ? C$!h!!'!)! !"","G"TO" """" ""H"O#5l###### ###$$$*$ 3$ @$ K$U$f$z$ $B$$$ $$ $& %0% 8%D% ]% k%x%%% %% %%% % % % %& && +& 5& @&K&2i&/&8&':'S' Y'0f'''' ' '''-' +( 5(?( H(R(W( l( y()(((((( )n)0)!) )) **/*!+@+,+, 1,0R,,,,%,, ,,,D,#-C>-#-- - -- -1- . .. +.6.J..1../M/a/8t/;//80@0 I0U0f0n0 00z01/1?1 Q1_1x1111 111 1 12E223 31$3V3v33333<3?4O4g4n4 }4 444!4?45&5 E5S5[5`5h5p5555.56."6Q6 W6 c6n6w6 ~666 66 66 66 77"787S7h7y7777M777: 8F8d888888R8C#9g9~9H99999::3:<:B:Y:_:v::::: :!::};8 <C<.U<$<<<<<<==$=88=Aq=a=3>^I>>>> > > > > > ?? ?C?>`???+?"@ '@3@C@'a@@l@ @ AAA A*AF2AVyA2AB BBB#3B WBcBlBsB BB BB B BB BBBXC mC {CCCC(CC C#C D )D5DDDJDRDbD{DDDDDDD D E E'E/E>E#ME<qE4ECE'FF6F}FF8FFFFF G"G